版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、opLINUXCNC源程序?qū)W習源程序的樹結(jié)構(gòu)如下:Overview of the emc2 directory (generated by tree -I .git -d) :.|- app-defaults|- bin (user mode binaries)|- configs| |- 5axis| |- boss| |- common| |- dallur-thc| |- demo_mazak (sample mazak config files)| |- demo_sim_cl (sample sim with ladder IO)| |- demo_step_cl (sample s
2、tepper with ladder IO)| |- etch-servo| |- halui_halvcp| |- hexapod-sim| |- lathe-pluto| |- m5i20 (sample servo using Mesa PCI)| |- max| |- motenc (sample servo using Vital PCI)| |- nist-lathe| |- plasma-thc| |- plasma-thc-sim| |- ppmc| |- puma| |- scara| |- sim (simulated motion and IO)| |- stepper
3、(parport stepper driver) | |- stepper-gantry| |- stepper-xyza| |- stg (sample servo using STG ISA)| |- univpwm (sample PICO servo generator)| |- univstep (sample PICO stepper generator)| - vti|- debian (files needed to build deb packages)| |- extras-Ubuntu-5.10 (extra files for Ubuntu 5.10)| | |- et
4、c| | | |- modprobe.d| | | |- udev| | | | |- rules.d| | | | - scripts| | | - xdg| | | - menus| | | - applications-merged| | - usr| | - share| | |- applications| | |- desktop-directories| | - pixmaps| |- extras-Ubuntu-6.06 (extra files for building on Ubuntu 6.06 Dapper Drake)| | |- etc| | | |- modpro
5、be.d| | | |- udev| | | | |- rules.d| | | | - scripts| | | - xdg| | | - menus| | | - applications-merged| | - usr| | - share| | |- applications| | |- desktop-directories| | - pixmaps| |- extras-Ubuntu-7.10 (extra files for building on Ubuntu 7.10)| | |- etc| | | |- modprobe.d| | | |- udev| | | | - ru
6、les.d| | | - xdg| | | - menus| | | - applications-merged| | - usr| | - share| | |- applications| | |- desktop-directories| | - pixmaps| |- extras-Ubuntu-8.04 (extra files for building on Ubuntu 8.04 Hardy Heron)| | |- etc| | | |- modprobe.d| | | - xdg| | | - menus| | | - applications-merged| | - usr
7、| | - share| | |- applications| | |- desktop-directories| | - pixmaps| |- extras-sim-Ubuntu-5.10 (extra files for sim package for Ubuntu 5.10)| | |- etc| | | - xdg| | | - menus| | | - applications-merged| | - usr| | - share| | |- applications| | |- desktop-directories| | - pixmaps| - extras-sim-Ubun
8、tu-6.06 (extra files for sim package for Ubuntu 6.06 Dapper Drake)| |- etc| | - xdg| | - menus| | - applications-merged| - usr| - share| |- applications| |- desktop-directories| - pixmaps|- docs (All the important and relevant Docs.)| |- help| |- html (html version of docs - some generated from lyx)
9、| |- man (man pages)| | |- man1| | |- man3| | - man9| - src (API and source notes should be in each src dir.) (source for the handbooks) (top level .lyx files)| |- code| |- common (shared .lyx files and images, such as glossary, GPLD license)| |- config| |- gcode (.lyx files, images, etc. for G-Code
10、 documentation)| |- gui (.lyx files, images, etc. for GUI documentation)| |- hal (.lyx files, images, etc. for HAL documentation)| |- install| |- ladder| |- motion| - quickstart|- include (headers installed here - originals in src/xxx/)|- lib (user mode object files)| - python| |- rs274| - yapps|- n
11、c_files (Sample NC files)|- rtlib (kernel mode object files, only after a successfull compile)|- scripts(bash scripts like linuxcnc, realtime, rip-environment, etc.)|- share| |- axis| | |- images| | - tcl| |- emc| - locale| |- de| | - LC_MESSAGES| |- es| | - LC_MESSAGES| |- fr| | - LC_MESSAGES| |- h
12、u| | - LC_MESSAGES| |- it| | - LC_MESSAGES| |- pt_BR| | - LC_MESSAGES| |- ro| | - LC_MESSAGES| |- ru| | - LC_MESSAGES| |- se| | - LC_MESSAGES| |- sr| | - LC_MESSAGES| - zh_CN| - LC_MESSAGES|- src (source tree - configure script, top level makefile, Makefile.inc, etc)| | |- depends (generated depende
13、ncy tree)| | |- emc (actual LinuxCNC code)| | |- canterp (interpreter for canonical commands)| | |- ini (inifile related operations)| | |- iotask (IO interface, lots of HAL pins)| | |- kinematics (trajectory planner and kinematics)| | |- motion (motion controller, talks through SHM to the rest of EM
14、C)| | |- nml_intf (emc specific NML implementation, all messages sent in emc)| | |- rs274ngc (the rs274 g-code interpreter)| | |- sai| | |- task (core component in emc, dispatches actions to other parts)| | - usr_intf (interfaces for some GUIs, and other interfaces: AXIS, halui, stepconf)| | |- axis
15、| | | |- etc| | | |- extensions| | | - scripts| | - stepconf| |- hal (the Hardware Abstraction Layer, provides a unified interface across all hardware)| | |- classicladder| | | - projects_examples| | |- components| | |- drivers| | | |- m5i20| | | | |- bit| | | | - hostmot5_src| | | |- mesa-hostmot2|
16、 | | | |- doc| | | | - firmware| | | | |- 5i20| | | | | - SOURCE| | | | - 7i43| | | | |- CPLD| | | | | - SOURCE| | | | - SOURCE| | | |- mesa7i43-firmware| | | | |- gpio| | | | | - source| | | | |- hostmot2| | | | | - src| | | | - source| | | |- mesa_5i2x| | | | - firmware| | | |- pluto_servo_firmwar
17、e| | | - pluto_step_firmware| | |- user_comps| | | |- devices| | | - vcp| | - utils| | - halgui| |- libnml (a clean implementation of RCSLIB)| | |- buffer| | |- cms| | |- inifile| | |- linklist| | |- nml| | |- os_intf| | |- posemath| | - rcs| |- module_helper| |- objects| | |- emc| | | |- canterp| |
18、 | |- ini| | | |- iotask| | | |- motion| | | |- nml_intf| | | |- rs274ngc| | | |- sai| | | |- task| | | - usr_intf| | | - axis| | | - extensions| | |- hal| | | |- classicladder| | | |- components| | | |- drivers| | | |- user_comps| | | | |- devices| | | | - vcp| | | - utils| | |- libnml| | | |- buff
19、er| | | |- cms| | | |- inifile| | | |- linklist| | | |- nml| | | |- os_intf| | | |- posemath| | | - rcs| | |- rtapi| | |- rtemc| | | |- kinematics| | | - motion| | |- rthal| | | |- classicladder| | | |- components| | | - utils| | |- rtlibnml| | | - posemath| | - rtobjects| | - hal| | - components| |
20、- po (Translation files for i18n support)| |- rtapi (*.c and *.h for RTAPI) (unified RT API, wraps over RTLinux, RTAI and sim)| | - examples (testing examples for the RTAPI)| | |- extint| | |- fifo| | |- semaphore| | |- shmem| | - timer| - tests|- tcl (tkemc.tcl, mini.tcl - the tcl GUIs)| |- bin| -
21、scripts- tests |- abs.0 |- and-or-not-mux.0 |- basic |- ccomp | |- lathe-comp | |- mill-g90g91g92 | |- mill-line-arc-entry | - mill-zchanges |- counter-encoder.0 |- flipflop.0 |- interp | |- cam-nisley | - flowsnake |- limit3.0 |- limit3.1 |- limit3.2 |- modparam.0 |- overrun |- oword | - sub.0 |- s
22、ave.0 |- save.1 |- source.0 |- stepgen.0 |- stepgen.1 |- stepgen.2 |- threads.0 - timedelay.0Overview of the emc2 install dirs: / (file system root) | | |- etc/ | | | - init.d/ | | | - realtime (realtime start/stop script) | | |- $(prefix) (default: /usr/local) | | (all the following $xxxxdir are co
23、nfigurable through autoconf | | | |- bin/ (known as $bindir, files from EMC2/bin) | | | |- sbin/ (known as $sbindir, ) | | | |- etc/ (known as $sysconfdir, config files and subdirs from configs/) | | | |- lib/ (known as $libdir, lib files *.so from libs/) | | | - share/ | | | - emc/ | | | | | |- doc
24、s/ | | | | | - (All the important and relevant Docs.) | | | |- handbooks/ | | | | | - (PDF versions of handbooks) | | | - nc_files/ | | | - (Sample NC files) | |- $MAN_DIR/ (default: /usr/local/man) | | | |- man1/ | | | | | | | | - man3/ | | | | - $moduledir/ (based on where ./configure finds the RT
25、OS modules)根據(jù)這個結(jié)構(gòu)樹,我們可以清楚的知道每一個文件夾,每一個子文件的作用,包括了接口,硬件抽象層,實時內(nèi)核等等部分。當然,在這里面我們需要深入研究的是linuxcnc-dev/src/emc文件夾中的各個文件,也是該數(shù)控系統(tǒng)的核心所在。我們再次列出linuxcnc-dev/src/emc中的子結(jié)構(gòu)樹:linuxcnc-dev/src/emc中的子結(jié)構(gòu)樹:| |- emc (actual LinuxCNC code)| | |- canterp (interpreter for canonical commands)| | |- ini (inifile related oper
26、ations)| | |- iotask (IO interface, lots of HAL pins)| | |- kinematics (trajectory planner and kinematics)| | |- motion (motion controller, talks through SHM to the rest of EMC)| | |- nml_intf (emc specific NML implementation, all messages sent in emc)| | |- rs274ngc (the rs274 g-code interpreter)|
27、| |- sai| | |- task (core component in emc, dispatches actions to other parts)| | - usr_intf (interfaces for some GUIs, and other interfaces: AXIS, halui, stepconf)| | |- axis| | | |- etc| | | |- extensions| | | - scripts| | - stepconf根據(jù)該結(jié)構(gòu)樹,我們一個一個的再一次進行分析:(1)canterp (interpreter for canonical comma
28、nds,即規(guī)范命令的解釋器)#include / FILE, fopen(), fclose()#include / strcpy()#include / isspace()#include #include #include config.h#include emc/nml_intf/interp_return.hh#include emc/nml_intf/canon.hh#include emc/rs274ngc/interp_base.hh其中包括了語法解析,讀取,執(zhí)行等函數(shù),對刀具信息、主軸轉(zhuǎn)速、開始、停止等信息進行判斷和執(zhí)行工作。(2)ini (inifile related op
29、erations,初始化相關(guān)的文件)同樣,列出該文件夾的結(jié)構(gòu)樹:| |- ini (inifile related operations)| | |- emcIniFile.cc/hh | | |- iniaxis.cc/hh | | |- inihal.cc/hh | | |- initraj.cc/hh | | |- initool.cc /hh (2.1) emcIniFile.cc/hh #include / M_PI.#include emcIniFile.hh該文件定義了一些INI文件中字符的賦值,包括 一個TURE或者FAULSE,單位mm ,m,角度,直線,旋轉(zhuǎn)等等。(2.2)
30、 iniaxis.cc/hh #include #include / NULL#include / atol(), _itoa()#include / strcmp()#include / isdigit()#include #include #include emc.hh#include rcs_print.hh#include emcIniFile.hh#include iniaxis.hh/ these decls#include emcglb.h/ EMC_DEBUG#include emccfg.h/ default values for globals#include inihal
31、.hh該文件主要用到了兩個函數(shù):loadaxis以及iniaxis。前一個函數(shù)loadaixs是對INI文件中的軸類型,軸單元,最大最小位置限值,誤差限值,最大速度,加速度,加加速度等初始化參數(shù)進行讀取并存儲在&axisIniFile中,這些參數(shù)對應(yīng)于INI文件中AXIS一欄中的參數(shù),并將部分參數(shù)賦值給old_inihal_data。除此之外,iniaxis函數(shù)主要是讀取INI文件中TRAJ部分的AXIS軸數(shù),然后調(diào)用loadaxis進行初始化加載。除去兩個主要函數(shù),還有一個精度判斷函數(shù)iniGetFloatPrec以及狀態(tài)函數(shù)(可有可無)。(2.3)initraj.cc/hh該文件主要包含以
32、下幾個函數(shù):loadTraj,用于加載INI文件中TRAJ中的配置參數(shù),然后將讀取的參數(shù)值進行保存,主要賦值給old_inihal_data以及traj_max_velocity等變量,供后續(xù)其他文件調(diào)用。同時該文件的后面還有一個坐標軸返回原點的判斷程序,從而保證TRAJ中的原點坐標。其實,該文件類似于iniaxis.cc/hh。(2.4)inihal.cc/hh#include rcs_print.hh#include emc.hh#include #include hal.h#include rtapi.h#include inihal.hh該文件中主要包含以下幾個函數(shù):ini_hal_i
33、nit,用于定義HAL中的新的管腳,包括了各軸中的INI參數(shù)管腳,以及TRAJ中的INI參數(shù)管腳;ini_hal_init_pins,用于對之前定義好的新管腳進行賦值,主要是將old_inihal_data中的參數(shù)值存儲到*(the_inihal_data-NAME)中去。check_ini_hal_items(),用于對各個管腳的值進行更新檢查。備注:old_inihal_data中的值都是在iniaxis.cc以及initraj.cc中賦值了的。(3) iotask該文件在這里不做詳細介紹,主要是創(chuàng)建“iocontrol”組件,并對一些接口文件進行配置。(4)Kinamitcs該文件夾中包
34、含了不同的運動控制模塊,例如五軸、三軸、六軸等等。除此之外,還包含了插補以及速度控制的軌跡規(guī)劃文件。(4.1)運動控制模塊(4.2)軌跡規(guī)劃模塊TC.C文件主要是基于軌跡規(guī)劃的簡單判別文件,由TP.C調(diào)用。下面我們分別說明該文件中的一些函數(shù)。#include rtapi.h/* rtapi_print_msg */#include posemath.h#include emcpos.h#include tc.h(1)tcGetStartingUnitVector 主要是獲取運動軌跡的起始點的起始單位向量,如果是直線或者攻絲,那么直接計算起始與終止點的位移大小。如果不是,那么就是圓形運動,計算曲
35、率,半徑,起始點等等。(2)tcGetEndingUnitVector 主要是獲取運動軌跡的終止點的終止單位向量,如果是直線,那么直接計算終點坐標減去起點坐標的大小。如果是攻絲,那么計算起點坐標減去終點坐標的大小。對于其他運動,即曲線運動,則根據(jù)轉(zhuǎn)過的角度,計算終點坐標,然后計算曲率半徑,并將數(shù)據(jù)保存到指定位置V中。(3)tcGetPos/tcGetEndpoint 兩個都是通過調(diào)用函數(shù)tcGetPosReal從而得到位置信息。(4) tcGetPosReal 根據(jù)傳入的參數(shù)判斷是計算當前位移值還是目標位移值;其次判斷運動類型,如果是攻絲,判斷是正轉(zhuǎn)還是反轉(zhuǎn)的,再進行坐標值計算(具體算法先省略
36、)。如果是直線運動,因為只是涉及到了xyz,其他軸uvw,abc等只需要進行配合運動即可,或者是XYZ不動,或者只有ABC再動等等。如果是曲線運動,同樣配合計算其他各軸位移。判斷完畢之后,返回各個軸的位移。(5)tcqCreate() 建立TC結(jié)構(gòu)體的新隊列。(6)tcqDelete() 刪除TC結(jié)構(gòu)體的隊列。(7)tcqInit (8)tcqPut()/tcqRemove()/tcqLen()/tcqItem() 數(shù)據(jù)存放,先入先出;tcqLen()數(shù)據(jù)隊列的大?。籺cqItem()讀取數(shù)據(jù)隊列的第N的元素。(9)tcqFull() 判斷堆棧是否已滿,或者快要滿了。TP.C文件主要實現(xiàn)軌跡規(guī)
37、劃。#ifdef RTAPI#define assert(args.) do while(0)#else/ SIM#include #include #include #include #endif#include rtapi.h/* rtapi_print_msg */#include rtapi_string.h /* NULL */#include posemath.h#include tc.h#include tp.h#include rtapi_math.h#include ./motion/motion.h#include hal.h#include ./motion/mot_pr
38、iv.h#include motion_debug.h(1)tpCreate()創(chuàng)建隊列,供后續(xù)調(diào)用。(2)tpClearDIOs() 如果需要改變的數(shù)字IO的存放隊列,該函數(shù)將會清除之前的IO觸發(fā)器隊列供下次使用。(3)tpClear() 某種程度而言,該函數(shù)屬于“軟件初始化”,結(jié)構(gòu)體TP_STRUCT中的參數(shù)將會被保留下來,而隊列將會被清空。(4)tpInit(),初始化TP結(jié)構(gòu)體中的參數(shù)值。(5)tpSetCycleTime(),設(shè)置程序循環(huán)時間。(6)tpSetVmax()設(shè)置最大速度。(7)tpSetVlimit()/ tpSetAmax() 同上,設(shè)置速度限制以及最大速度。(8)t
39、pSetId()/tpGetExecId() 分別設(shè)置下一個運行周期的ID號,或獲取當前的ID號。(9)pSetTermCond(tp, cond) 設(shè)置后續(xù)運動隊列移動的終止條件,返回終止條件和公差。(10)tpSetPos()設(shè)置當前位置以及目標位置。備注:(4-10)所返回的參數(shù)值都是TP結(jié)構(gòu)的成員,可以理解為TP中都是當前運動模式下的參數(shù)值。(11)tpAddRigidTap()/ tpAddLine()/tpAddCircle() 這三個函數(shù)是用于判斷在原有的運動上所需要加入的新的運動模式,根據(jù)下一步的運動模式不同,設(shè)置不同的參數(shù)保存在結(jié)構(gòu)體TC中,可以理解為TC結(jié)構(gòu)體中存入了下一個
40、運動模式時的參數(shù)值。(12)tcRunCycle() 該函數(shù)通過傳入結(jié)構(gòu)體參數(shù)TP以及TC,進行運動段的速度控制,源程序用到的是T形速度控制。根據(jù)判斷速度和加速度的狀態(tài)控制速度變化。最后返回新的速度,以及最終速度變化量(以當前的速度與最大限速進行比較,得到需要加速或者減速的多少)。(13)tpToggleDIOs() 控制數(shù)字或者模擬IO口的開或者斷,保證下一次輸入或者輸出正確。(14)tpRunCycle() 該函數(shù)是運動控制的核心部分。首先進行emcmotStatus的初始化;判斷TC是否空隊列;判斷當前運動是否同步進行,執(zhí)行當前運動,完畢之后刪除,載入下一個運動;判斷下一個運動的可行性,
41、如果出現(xiàn)異常中斷(abording),那么TP隊列中的值全部初始化。判斷所等待的ID號是否與TC中的ID號一致,如果不一致,則輸出錯誤信息,并給所等待的ID賦空值;對于TC值得第一次讀取進行一系列狀態(tài)判斷,保證所有動作符合要求;對于攻絲動作,需要進行特殊處理。即當狀態(tài)tc-motion_type = TC_RIGIDTAP的時候,先保證主軸正轉(zhuǎn);其次判斷攻絲動作所處的狀態(tài):TAPPING,該狀態(tài)表示正在攻絲,如果當前位移量以及超過了或者等于所需要攻絲的長度,那么將狀態(tài)切換到REVERSING,主軸反向,并設(shè)置反向運動的參數(shù),如果當前位移量超過了攻絲長度,那么切換狀態(tài)到FINAL_REVERSA
42、L;主軸最后一個反向,然后回位;判斷下一次的運動狀態(tài),判斷是否TC是第一次被讀取;判斷TC結(jié)構(gòu)體中的同步參數(shù),然后判斷運動中的速度以及加速度是否滿足要求。其中一部分算法屬于軌跡規(guī)劃中的加速度判斷法;在做完上述一些列判斷之后,進行軌跡規(guī)劃的重要部分:primary_before = tcGetPos(tc); tcRunCycle(tp, tc, &primary_vel, &on_final_decel); primary_after = tcGetPos(tc); pmCartCartSub(primary_after.tran, primary_before.tran, &primary_
43、displacement.tran); primary_displacement.a = primary_after.a - primary_before.a; primary_displacement.b = primary_after.b - primary_before.b; primary_displacement.c = primary_after.c - primary_before.c; primary_displacement.u = primary_after.u - primary_before.u; primary_displacement.v = primary_aft
44、er.v - primary_before.v; primary_displacement.w = primary_after.w - primary_before.w;調(diào)用之前的函數(shù),計算當前值,然后運行一個周期,再次獲取新的位置,然后分別計算各軸位移量。下一步計算屬于混合模式下(即將幾段相似的程序進行合并)的運動控制:同樣進行條件判斷,之后計算前后兩段運動的速度,位移等等,最后輸出前后兩端的位移大小,實現(xiàn)合并。(15)最后對一些錯誤信息進行判斷和驗證。保證正確輸出。備注:在tp.c中軌跡規(guī)劃是如何完成的:(1)解釋調(diào)用tpAddLine還是tpAddCircle?主要是依據(jù)MDI或者G代碼
45、的輸入;(2)tpRunCycle在每一個TRAJ_PERIOD周期內(nèi)進行調(diào)用,從而更新currentPos;(3)currentPos最終反饋回HAL對應(yīng)的是axis.X.motor-pos-cmd HAL pins。在tpruncycle中:l 判斷tc隊列是否為空,if(!tc);運動隊列為空就表示已經(jīng)到了程序的終點或者說隊列處于饑餓狀態(tài),需要存入數(shù)據(jù):此時,采取以下動作:(1)初始化一個空的運動隊列;(2)通過tp-goalPos = tp-currentPos and tp-done = 1來終止機器的動作;(3)調(diào)用tpResume(tp)然后等待隊列tc中寫入東西。l 判斷是否有異常終止信息if(tp-aborting);此時,采取以下動作:(1) 將當前的速度設(shè)置為0;(2)通過tp-goalPos = tp-currentPos and tp-done = 1來終止機器的動作;l 判斷是否當前命令行執(zhí)行完畢if (tc-target = tc-progress):此時,采取以下動作:(1) 將當前的命令行從隊列中刪除;(2)將下一個命令載入到隊列中。(4.3)cubic.c三
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初二數(shù)學學習法模板
- 夜間照明專項施工方案
- 鞋面制作課程設(shè)計
- 運輸機器人課程設(shè)計
- 2024年醫(yī)院設(shè)備采購管理制度
- 2025年度智能建筑打樁施工技術(shù)服務(wù)合同4篇
- 2025年度租賃住宅用電安全保障合同樣本4篇
- 2025年消防應(yīng)急照明與疏散指示系統(tǒng)三方合同范文3篇
- 二零二五版離婚協(xié)議書起草與子女撫養(yǎng)權(quán)變更執(zhí)行監(jiān)督協(xié)議書4篇
- 銷售部培訓課程設(shè)計
- 小學道德與法治學科高級(一級)教師職稱考試試題(有答案)
- 申請使用物業(yè)專項維修資金征求業(yè)主意見表
- 河北省承德市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 實用性閱讀與交流任務(wù)群設(shè)計思路與教學建議
- 應(yīng)急柜檢查表
- 通風設(shè)施標準
- 酒店市場營銷教案
- 房屋買賣合同簡單范本 房屋買賣合同簡易范本
- 無抽搐電休克治療規(guī)范
- 環(huán)保有限公司營銷策劃方案
- ROTORK常見故障及處理
評論
0/150
提交評論