版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-作者xxxx-日期xxxxLINUXCNC源程序原理说明【精品文档】opLINUXCNC源程序学习源程序的树结构如下: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 la
2、dder IO)| |- demo_step_cl (sample stepper 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 (si
3、mulated motion and IO)| |- stepper (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 (ex
4、tra files for Ubuntu 5.10)| | |- etc| | | |- udev| | | | - 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| | | |- udev| |
5、| | - scripts| | | - xdg| | | - menus| | | - applications-merged| | - usr| | - share| | |- applications| | |- desktop-directories| | - pixmaps| |- extras-Ubuntu-7.10 (extra files for building on Ubuntu 7.10)| | |- etc| | | |- udev| | | - xdg| | | - menus| | | - applications-merged| | - usr| | - shar
6、e| | |- applications| | |- desktop-directories| | - pixmaps| |- extras-Ubuntu-8.04 (extra files for building on Ubuntu 8.04 Hardy Heron)| | |- etc| | | - xdg| | | - menus| | | - applications-merged| | - usr| | - share| | |- applications| | |- desktop-directories| | - pixmaps| |- extras-sim-Ubuntu-5.
7、10 (extra files for sim package for Ubuntu 5.10)| | |- etc| | | - xdg| | | - menus| | | - applications-merged| | - usr| | - share| | |- applications| | |- desktop-directories| | - pixmaps| - extras-sim-Ubuntu-6.06 (extra files for sim package for Ubuntu 6.06 Dapper Drake)| |- etc| | - xdg| | - menus
8、| | - 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)| |- man (man pages)| | |- man1| | |- man3| | - man9| - src (API and source notes should be in
9、 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 documentation)| |- gui (.lyx files, images, etc. for GUI documentation)| |- hal (.lyx files,
10、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|- nc_files (Sample NC files)|- rtlib (kernel mode object files, only after a successfull compile)
11、|- scripts(bash scripts like linuxcnc, realtime, rip-environment, etc.)|- share| |- axis| | |- images| | - tcl| |- emc| - locale| |- de| | - LC_MESSAGES| |- es| | - LC_MESSAGES| |- fr| | - LC_MESSAGES| |- hu| | - LC_MESSAGES| |- it| | - LC_MESSAGES| |- pt_BR| | - LC_MESSAGES| |- ro| | - LC_MESSAGES|
12、 |- 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 dependency tree)| | |- emc (actual LinuxCNC code)| | |- canterp (interpreter for canonical commands)|
13、 | |- 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 EMC)| | |- nml_intf (emc specific NML implementation, all messages sent in emc)| | |- rs274ngc (
14、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| | | |- etc| | | |- extensions| | | - scripts| | - stepconf| |- hal (the Hardware Abstraction
15、 Layer, provides a unified interface across all hardware)| | |- classicladder| | | - projects_examples| | |- components| | |- drivers| | | |- m5i20| | | | |- bit| | | | - hostmot5_src| | | |- mesa-hostmot2| | | | |- doc| | | | - firmware| | | | |- 5i20| | | | | - SOURCE| | | | - 7i43| | | | |- CPLD|
16、 | | | | - SOURCE| | | | - SOURCE| | | |- mesa7i43-firmware| | | | |- gpio| | | | | - source| | | | |- hostmot2| | | | | - src| | | | - source| | | |- mesa_5i2x| | | | - firmware| | | |- pluto_servo_firmware| | | - pluto_step_firmware| | |- user_comps| | | |- devices| | | - vcp| | - utils| | - halgu
17、i| |- libnml (a clean implementation of RCSLIB)| | |- buffer| | |- cms| | |- inifile| | |- linklist| | |- nml| | |- os_intf| | |- posemath| | - rcs| |- module_helper| |- objects| | |- emc| | | |- canterp| | | |- ini| | | |- iotask| | | |- motion| | | |- nml_intf| | | |- rs274ngc| | | |- sai| | | |-
18、task| | | - usr_intf| | | - axis| | | - extensions| | |- hal| | | |- classicladder| | | |- components| | | |- drivers| | | |- user_comps| | | | |- devices| | | | - vcp| | | - utils| | |- libnml| | | |- buffer| | | |- cms| | | |- inifile| | | |- linklist| | | |- nml| | | |- os_intf| | | |- posemath|
19、| | - rcs| | |- rtapi| | |- rtemc| | | |- kinematics| | | - motion| | |- rthal| | | |- classicladder| | | |- components| | | - utils| | |- rtlibnml| | | - posemath| | - rtobjects| | - hal| | - components| |- po (Translation files for i18n support)| |- rtapi (*.c and *.h for RTAPI) (unified RT API, w
20、raps 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| - scripts- tests |- basic |- ccomp | |- lathe-comp | |- mill-g90g91g92 | |- mill-line-arc-entry
21、| - mill-zchanges |- interp | |- cam-nisley | - flowsnake |- overrun |- owordOverview of the emc2 install dirs: / (file system root) | | |- etc/ | | | | | - realtime (realtime start/stop script) | | |- $(prefix) (default: /usr/local) | | (all the following $xxxxdir are configurable through autoconf
22、| | | |- 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/ | | | | | |- docs/ | | | | | - (All the impo
23、rtant 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 RTOS modules)根据这个结构树,我们可以清楚的知道
24、每一个文件夹,每一个子文件的作用,包括了接口,硬件抽象层,实时内核等等部分。当然,在这里面我们需要深入研究的是linuxcnc-dev/src/emc文件夹中的各个文件,也是该数控系统的核心所在。我们再次列出linuxcnc-dev/src/emc中的子结构树:linuxcnc-dev/src/emc中的子结构树:| |- emc (actual LinuxCNC code)| | |- canterp (interpreter for canonical commands)| | |- ini (inifile related operations)| | |- iotask (IO int
25、erface, 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)| | |- sai| | |- task (core co
26、mponent in emc, dispatches actions to other parts)| | - usr_intf (interfaces for some GUIs, and other interfaces: AXIS, halui, stepconf)| | |- axis| | | |- etc| | | |- extensions| | | - scripts| | - stepconf根据该结构树,我们一个一个的再一次进行分析:(1)canterp (interpreter for canonical commands,即规范命令的解释器)#include / FIL
27、E, 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其中包括了语法解析,读取,执行等函数,对刀具信息、主轴转速、开始、停止等信息进行判断和执行工作。(2)ini (inifile related operations,初始化相关的文件)同样,列出该文件夹的
28、结构树:| |- ini (inifile related operations)| | |- /hh | | |- /hh | | |- /hh | | |- /hh | | |- /hh (2.1) /hh #include / M_PI.#include emcIniFile.hh该文件定义了一些INI文件中字符的赋值,包括 一个TURE或者FAULSE,单位mm ,m,角度,直线,旋转等等。(2.2) /hh #include #include / NULL#include / atol(), _itoa()#include / strcmp()#include / isdigit()
29、#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.hh该文件主要用到了两个函数:loadaxis以及iniaxis。前一个函数loadaixs是对INI文件中的轴类型,轴单元,最大最小位置限值,误差限值,最大速度,加速度,加加速度等初始化参数进行读取并存储
30、在&axisIniFile中,这些参数对应于INI文件中AXIS一栏中的参数,并将部分参数赋值给old_inihal_data。除此之外,iniaxis函数主要是读取INI文件中TRAJ部分的AXIS轴数,然后调用loadaxis进行初始化加载。除去两个主要函数,还有一个精度判断函数iniGetFloatPrec以及状态函数(可有可无)。()initraj.cc/hh该文件主要包含以下几个函数:loadTraj,用于加载INI文件中TRAJ中的配置参数,然后将读取的参数值进行保存,主要赋值给old_inihal_data以及traj_max_velocity等变量,供后续其他文件调用。同时该文
31、件的后面还有一个坐标轴返回原点的判断程序,从而保证TRAJ中的原点坐标。其实,该文件类似于/hh。()inihal.cc/hh#include rcs_print.hh#include emc.hh#include #include hal.h#include rtapi.h#include inihal.hh该文件中主要包含以下几个函数:ini_hal_init,用于定义HAL中的新的管脚,包括了各轴中的INI参数管脚,以及TRAJ中的INI参数管脚;ini_hal_init_pins,用于对之前定义好的新管脚进行赋值,主要是将old_inihal_data中的参数值存储到*(the_ini
32、hal_data-NAME)中去。check_ini_hal_items(),用于对各个管脚的值进行更新检查。备注:old_inihal_data中的值都是在以及中赋值了的。(3) iotask该文件在这里不做详细介绍,主要是创建“iocontrol”组件,并对一些接口文件进行配置。(4)Kinamitcs该文件夹中包含了不同的运动控制模块,例如五轴、三轴、六轴等等。除此之外,还包含了插补以及速度控制的轨迹规划文件。()运动控制模块()轨迹规划模块文件主要是基于轨迹规划的简单判别文件,由调用。下面我们分别说明该文件中的一些函数。#include rtapi.h/* rtapi_print_ms
33、g */#include posemath.h#include emcpos.h#include tc.h(1)tcGetStartingUnitVector 主要是获取运动轨迹的起始点的起始单位向量,如果是直线或者攻丝,那么直接计算起始与终止点的位移大小。如果不是,那么就是圆形运动,计算曲率,半径,起始点等等。(2)tcGetEndingUnitVector 主要是获取运动轨迹的终止点的终止单位向量,如果是直线,那么直接计算终点坐标减去起点坐标的大小。如果是攻丝,那么计算起点坐标减去终点坐标的大小。对于其他运动,即曲线运动,则根据转过的角度,计算终点坐标,然后计算曲率半径,并将数据保存到指定
34、位置V中。(3)tcGetPos/tcGetEndpoint 两个都是通过调用函数tcGetPosReal从而得到位置信息。(4) tcGetPosReal 根据传入的参数判断是计算当前位移值还是目标位移值;其次判断运动类型,如果是攻丝,判断是正转还是反转的,再进行坐标值计算(具体算法先省略)。如果是直线运动,因为只是涉及到了xyz,其他轴uvw,abc等只需要进行配合运动即可,或者是XYZ不动,或者只有ABC再动等等。如果是曲线运动,同样配合计算其他各轴位移。判断完毕之后,返回各个轴的位移。(5)tcqCreate() 建立TC结构体的新队列。(6)tcqDelete() 删除TC结构体的队
35、列。(7)tcqInit (8)tcqPut()/tcqRemove()/tcqLen()/tcqItem() 数据存放,先入先出;tcqLen()数据队列的大小;tcqItem()读取数据队列的第N的元素。(9)tcqFull() 判断堆栈是否已满,或者快要满了。文件主要实现轨迹规划。#ifdef RTAPI#define assert(args.) do while(0)#else/ SIM#include #include #include #include #endif#include rtapi.h/* rtapi_print_msg */#include rtapi_string.
36、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_priv.h#include motion_debug.h(1)tpCreate()创建队列,供后续调用。(2)tpClearDIOs() 如果需要改变的数字IO的存放队列,该函数将会清除之前的IO触发器队列供下次使用。(3)tpClear() 某种程度而言,该函数属于“软件初始化”,结构体TP_STRUCT中的参数将
37、会被保留下来,而队列将会被清空。(4)tpInit(),初始化TP结构体中的参数值。(5)tpSetCycleTime(),设置程序循环时间。(6)tpSetVmax()设置最大速度。(7)tpSetVlimit()/ tpSetAmax() 同上,设置速度限制以及最大速度。(8)tpSetId()/tpGetExecId() 分别设置下一个运行周期的ID号,或获取当前的ID号。(9)pSetTermCond(tp, cond) 设置后续运动队列移动的终止条件,返回终止条件和公差。(10)tpSetPos()设置当前位置以及目标位置。备注:(4-10)所返回的参数值都是TP结构的成员,可以理解
38、为TP中都是当前运动模式下的参数值。(11)tpAddRigidTap()/ tpAddLine()/tpAddCircle() 这三个函数是用于判断在原有的运动上所需要加入的新的运动模式,根据下一步的运动模式不同,设置不同的参数保存在结构体TC中,可以理解为TC结构体中存入了下一个运动模式时的参数值。(12)tcRunCycle() 该函数通过传入结构体参数TP以及TC,进行运动段的速度控制,源程序用到的是T形速度控制。根据判断速度和加速度的状态控制速度变化。最后返回新的速度,以及最终速度变化量(以当前的速度与最大限速进行比较,得到需要加速或者减速的多少)。(13)tpToggleDIOs(
39、) 控制数字或者模拟IO口的开或者断,保证下一次输入或者输出正确。(14)tpRunCycle() 该函数是运动控制的核心部分。首先进行emcmotStatus的初始化;判断TC是否空队列;判断当前运动是否同步进行,执行当前运动,完毕之后删除,载入下一个运动;判断下一个运动的可行性,如果出现异常中断(abording),那么TP队列中的值全部初始化。判断所等待的ID号是否与TC中的ID号一致,如果不一致,则输出错误信息,并给所等待的ID赋空值;对于TC值得第一次读取进行一系列状态判断,保证所有动作符合要求;对于攻丝动作,需要进行特殊处理。即当状态tc-motion_type = TC_RIGI
40、DTAP的时候,先保证主轴正转;其次判断攻丝动作所处的状态:TAPPING,该状态表示正在攻丝,如果当前位移量以及超过了或者等于所需要攻丝的长度,那么将状态切换到REVERSING,主轴反向,并设置反向运动的参数,如果当前位移量超过了攻丝长度,那么切换状态到FINAL_REVERSAL;主轴最后一个反向,然后回位;判断下一次的运动状态,判断是否TC是第一次被读取;判断TC结构体中的同步参数,然后判断运动中的速度以及加速度是否满足要求。其中一部分算法属于轨迹规划中的加速度判断法;在做完上述一些列判断之后,进行轨迹规划的重要部分:primary_before = tcGetPos(tc); tcR
41、unCycle(tp, tc, &primary_vel, &on_final_decel); primary_after = tcGetPos(tc); pmCartCartSub(primary_after.tran, primary_before.tran, &primary_displacement.tran); primary_displacement.a = primary_after.a - primary_before.a; primary_displacement.b = primary_after.b - primary_before.b; primary_displace
42、ment.c = primary_after.c - primary_before.c; primary_displacement.u = primary_after.u - primary_before.u; primary_displacement.v = primary_after.v - primary_before.v; primary_displacement.w = primary_after.w - primary_before.w;调用之前的函数,计算当前值,然后运行一个周期,再次获取新的位置,然后分别计算各轴位移量。下一步计算属于混合模式下(即将几段相似的程序进行合并)的运
43、动控制:同样进行条件判断,之后计算前后两段运动的速度,位移等等,最后输出前后两端的位移大小,实现合并。(15)最后对一些错误信息进行判断和验证。保证正确输出。备注:在中轨迹规划是如何完成的:(1)解释调用tpAddLine还是tpAddCircle?主要是依据MDI或者G代码的输入;(2)tpRunCycle在每一个TRAJ_PERIOD周期内进行调用,从而更新currentPos;(3)currentPos最终反馈回HAL对应的是axis.X.motor-pos-cmd HAL pins。在tpruncycle中:l 判断tc队列是否为空,if(!tc);运动队列为空就表示已经到了程序的终点
44、或者说队列处于饥饿状态,需要存入数据:此时,采取以下动作:(1)初始化一个空的运动队列;(2)通过tp-goalPos = tp-currentPos and tp-done = 1来终止机器的动作;(3)调用tpResume(tp)然后等待队列tc中写入东西。l 判断是否有异常终止信息if(tp-aborting);此时,采取以下动作:(1) 将当前的速度设置为0;(2)通过tp-goalPos = tp-currentPos and tp-done = 1来终止机器的动作;l 判断是否当前命令行执行完毕if (tc-target = tc-progress):此时,采取以下动作:(1) 将
45、当前的命令行从队列中删除;(2)将下一个命令载入到队列中。()三次样条插值(5)MotionMotion部分主要是()command.c#include #include #include posemath.h#include rtapi.h#include hal.h#include motion.h#include motion_debug.h#include motion_struct.h#include emcmotglb.h#include mot_priv.h#include rtapi_math.h#include motion_types.h该函数主要是通过用户空间获取命令,执行不同的动作,这些命令结构体为emcmotCommand-command,而全部动作值都保存为EMCMOT_COMMAND在中。如果想要进行添加新的信号参数,你就需要做以下的工作:(1)在中添加新的配置或者轴参数foo。(2)在中添加EMCMOT_SET_FOO命令,在cmd_code_t中。(3)在command_t struct中添加一个类a field(4)在中加一个大的选择开关从而控制EMCMOT_SET_FOO comm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肉品市场综合整顿方案样本(2篇)
- 进社区路演活动方案样本(3篇)
- 教师节策划方案样本(4篇)
- 幼儿园重阳节关爱老人活动策划方案例文(2篇)
- 煤矿关闭退出后环境恢复治理方案(3篇)
- SONBS-多功能会议系统设计方案说明书
- 小学听评课活动方案模版(3篇)
- 教体系统广场舞大赛活动方案例文(5篇)
- 单位清明节活动方案模版(3篇)
- 社区平安畅通街道创建方案范例(3篇)
- 形势与政策(吉林大学)智慧树知到答案2024年吉林大学
- 《我们所了解的环境污染》教学设计
- 非财务人员财务预算培训PPT讲座资料课件
- 英语谜语大全及答案100条
- 【精选】感恩主题班会“感谢一路有你”主题班会教案精选
- ApacheShardingSphere架构及规划PPT课件
- 三年级上册美术 我的自画像册
- 《哈尔的移动城堡》(PPT课件)
- 船上油污应急计划
- 初中理化生数地仪器配备标准
- (完整版)国际体力活动量表IPAQ中文版短卷和长卷及评分标准5页
评论
0/150
提交评论