控制与检测
文章编号:1001-2265(2010)10-0048-04
组合机床与自动化加工技术
基于EMC2的数控系统软件架构及通信机制分析
吴晶,史步海
(华南理工大学自动化学院,广州??510640)
*
摘要:EMC2是开源的数控机床控制系统软件。EMC2能移植到实时操作系统(例如ubuntu等)并根据开发者定制完成复杂的机床和机器人实时控制。软件能够在平台上运行稳定,代码成熟。然而由于EMC2软件代码量非常庞大,阅读和消化难度很大。结合作者实际从事的数控系统项目的研究和学习。对整个软件的架构,通信机制,各模块的功能以及大致的工作流程进行深入分析。关键词:EMC2;NML;GUI;任务控制器;运动控制器;I/O控制器中图分类号:TH16;TG65??????文献标识码:A
SoftwareArchitectureAndCommunicationMechanismOfCNCSystemBaseOnEMC2
WUJing,SHIBu??hai
(SchoolofAutomotiveSouthChinaUniversityofTechnology,Guangzhou510640,China)Abstract:EMC2isanopensourceCNCcontrolsystemsoftware.Itcanbemigratedtoreal??timeoperat??ingsystemsuchasubuntu,alsocanbecustomizedaccordingtothedevelopertocompletecomplexreal??timecontrolofmachinetoolsandrobots.Softwarecanrunontheplatformstableandthecodeisverymature.However,duetoaverylargeamountofsoftwarecodeinEMC2,itisverydifficulttoreadanddigest.Combinedwiththenumericalcontrolsystem,Iactuallyengagedintheresearchprojectandlearning.Theentiresoftwarearchitecture,communicationmechanism,themodulefeaturesandgenerallytheworkoftheprocessesaresummarized.Keywords:EMC2;NML;GUI;taskcontroller;motioncontroller;I/Ocontroller
0??引言
近年来国家先后出台政策大力振兴装备制造业,提升和改造装备制造水平。数控系统是衡量一个国家装备制造业水平的重要标志,越来越受到人们的重视。欧洲、美国、日本数控技术先进,科研力量雄厚,推出各自的数控系统体系结构规范及示范性产品。我国在数控系统研究方面起步比较晚,技术基础积累薄弱,很多研发停留在中低端产品阶段。为了提升国家的数控系统研发能力,加快数控产品的国产化进程。对国外高端数控软件在应用过程中进行消化,吸收,进而理解其设计思路,掌握其关键技术是十分有必要的。
家标准与技术研究院(NIST)研究开发的,现在由来自世界各地的工程师和爱好者共同维护。EMC2在原有EMC软件的基础上加入了许多新的特性和功能。本文主要讨论EMC2在RTLinux实时操作系统上实现。
整个系统是由四个主要的模块组成:人机界面(GUI)为用户提供友好的操作平台;任务控制器(emctask)是系统的枢纽,它从用户界面取得操作信息,然后将其分解为对运动控制器和I/O控制器的操作,并且监控运动控制器和I/O控制器完成实际的操作;运动控制器(emcmotion)是一个运行在内核的实时模块,主要完成运动轨迹规划,运动插补,驱动执行机构;I/O控制器(emcio)主要处理紧急启停,冷却装置等其他辅助性输入输出控制。这种模块化、层次化软件设计结构使得开放式数控系统易于扩展,模块化的软件架构能满足各种类型机床的控
1??EMC2软件架构和通信机制
EMC2是一个开源的广泛应用于机床或机器人
运动控制系统的计算机控制软件。最初是由美国国
收稿日期:2010-04-12;修回日期:2010-05-31??*基金项目:广东省教育部产学研项目(B090300060)
作者简介:吴晶(1986??),男,江西萍乡人,华南理工大学自动化学院硕士,研究方向为嵌入式系统设计,智能控制技术,(E-mail)hnlgwujing
@163.com。
48 2010年第10期
制要求。图1是整个系统软件架构和通信机制示意图。
控制与检测
通道基类:RCS_CMD_CHANNEL和RCS_STAT_CHANNEL分别用来创建命令通道和状态通道。RCS库封装相关代码,隐藏了繁琐的进程间通信与同步的实现细节,而给程序员提供了方便的编程接口。它提供两个通用的读写函数read()和write(),实现控制模块间的消息传递。1??2??共享内存
本系统采用的RTLinux提供了mbuff内存管理机制,来实现实时进程与非实时进程间的通信。mbuff是由RTLinux提供的内存管理机制,用来实现内核空间和用户空间的共享。通过使用mbuff提供的mbuff_alloc()的函数申请到内存,mbuff管理这个申请的内存,即完成对该内存的共享。在共享内存中建立如下一个结构体
typedefstruct{
emcmot_cmd_tcommand;//命令emcmot_status_tstatus;//状态
图1??EMC2软件架构和通信机制示意图emcmot_debug_tdebug;//调试信息emcmot_error_t_terror;//错误}emcmot_struct;
任务控制器与图形用户界面之间不需要很高的
通信速率,所以采用了RCS库的NML通信机制。运动控制器对实时性的要求高,需要高速率的通信,否则机床会在加工过程中产生停顿。因此需要在内核地址空间中划分一块共享内存,使用共享内存通信机制来实现运动控制器与任务控制器之间的通信。I/O控制器是一个非实时模块,为了便于设计,它与任务控制器的通信也是采用NML通信机制。1??1??NML通信机制
RCS(Real??TimeControlSystem)是由美国NIST(国家标准和技术研究院)开发的、支持实时系统开发的软件包集合。RCS库是面向多平台实时分布式控制的C++类库。RCS库中提供了CMS(Communi??cationManagementSystem,通信管理系统)和NML(NeutralMessageLanguage,中性消息语言)通信支持。NML是RCS库中提供分布式控制系统之间的通信机制的组件(类)。
消息基类:RCS_CMD_MSG和RCS_STAT_MSG分别是命令消息基类和状态消息基类。它们都包含有两个重要的变量成员:
(1)NMLTYPEtype:每一类消息都具有不同的编号,通过编号来识别不同意义的消息。还可以根据控制需要从该基类派生新的消息类,给新的消息类分配不同的消息编号,同时可以根据需要,添加一些新的变量成员。
(2)intserial_number:这个变量用于实现模块间信息传递的同步。是用于上下模块通信的握手标志。
command主要存储运动控制器的控制命令及其相应的参数,是由任务控制器写入;status包括运动控制器的当前状态,由运动控制器写入,由任务控制器读出进而发送到人机操作界面以完成当前运动状态的显示。
2??人机界面设计
人机界面(HMI)为用户提供与数控系统交互的环境。用户在人机界面中输入要操作执行的命令,这些命令通过命令通道传送到任务控制器,并进而由任务控制器解释和分派到运动控制器或I/O执行;任务、运动与I/O的状态信息和错误信息通过状态和错误通道传回到界面并显示出来。界面程序可以利用Java,C++等语言工具实现,本文采用的是Tcl/Tk脚本编程语言及开发包,在linux下能够快速高效地开发无须编译的界面程序。
人机界面程序具体实现:
(1)编写实现数控操作的编程接口(API),底层接口程序在shcomm.cc中定义了各种函数接口,其主要功能是向NML命令通道写入相应的控制命令,这些函数将被emcsh.cc中用户定义的函数调用。
(2)emcsh.cc是整个界面的解释程序。里面的入口程序main()
voidmain(intargc,char*argv[])
{
????//建立并连接命令渠道和状态渠道,并完
49 控制与检测
成初始化工作
????Tk_Main(argc,argv,Tcl_AppInit);}
Tcl/Tk界面程序的入口函数Tk_Main()首先创建标准Tcl命令的解释器,创建Tk主窗口;然后调用用户自定义的初始化函数Tk_AppInit()来定制一个合乎用户要求Tcl/Tk解释器;最后进入脚本解释循环中。扩展Tcl/Tk解释器Tk_AppInit()的任务是调用Tcl/Tk库函数Tcl_Init(Interp)和Tk_Init(In??terp)对解释器进行标准初始化,然后调用Tcl/Tk库函数Tcl_CreateObjCommand()添加新的Tcl/Tk命令,添加的命令可以在界面程序中调用完成对具体控制事务。
(3)编写具体的Tcl/Tk脚本程序(tkemc.tcl),采用层次结构实现数控系统的用户图形界面。
[9]
组合机床与自动化加工技术
操作转换成对应的NML控制命令。主要处理NML控制命令的生成和数据的转换,然后将所有的NML
控制命令将被追加到命令队列中等待执行。
(3)命令队列
命令队列是用来顺序存储待处理的NML控制命令。在任务控制器中实现了NML_INTERP_LIST类。NML_INTERP_LIST对外提供了添加(append)和提取(get)操作接口,操作参数都是NML控制命令。此外,命令队列中还记录了当前的NML控制命令在G代码中所对应的代码段的行号,以便检查命令执行的顺序和动态显示加工程序的执行过程。
(4)任务接口模块(taskintf)
主控模块处理的控制命令和状态信息都以NML消息为基本格式。但是运动控制器不能直接处理NML控制命令,所以定义taskintf模块完成NML信息与共享内存的转换。
(5)运动接口模块(usrmotintf)
运动控制器与任务控制器之间的信息传送通过mbuff共享内存方式实现。usrmotintf模块则负责完成对mbuff共享内存的创建、销毁和数据读写的操作。同时,为保证读写进程之间的同步,采用接收方和发送方利用消息通信来实现握手方式。
3??任务控制器设计
任务控制器是整个数控系统的大脑,它首先轮询任务控制器和人机界面之间的命令通道,获得执
行命令,依据加工程序控制运动控制器和I/O控制器以完成完整的加工任务。其包括加工G代码解释和执行,加工时工艺顺序控制以及对于错误的检测诊断和处理功能,同时能够读取运动控制器和I/O控制器的状态信息并将其反馈到人机界面。
4??运动控制器设计
运动控制器模块是数控系统的核心,主要完成刀具与工件间的相对运动及控制,包括对轴位置采样、计算轨迹值、插补以及计算给伺服的输出值等控制。由于运动控制器模块对运行速度和时序要求严格,所以运动控制器模块运行于实时环境下。运动控制器的设计与具体硬件相关,因此需要设计驱动程序
[8]
。在EMC2软件中引入了一种新的特性??硬件
抽象层(HAL),HAL屏蔽了上层应用程序与底层硬
件的操作,底层的硬件在HAL都对应成为具体的元件(component)。对元件进行操作相当于对实际硬件
图2??任务控制器功能模块框图
进行操作。
任务控制器控制流程如下:(1)解释器模块
解释器的功能就是将上层界面在AUTO模式下打开的描述加工过程的G代码转换为实际的机床操作序列。任务控制器主控制模块周期性调用解释器模块(rs274ngc.cc)解析G代码并将转换后的操作命令传递给规范加工模块,进行后续处理。
(2)规范加工模块
规范加工模块定义了对加工设备原语级的各种加工操作。该模块的主要功能是将各种基本的加工
50 图3??运动控制器功能模块框图
功能描述和软件结构如下:
2010年第10期
(1)运动控制器主控程序(emcmotController())运动控制器的主控程序是RT??Linux实时线程周期性执行的程序,线程的周期大小将根据配置文件中设定的参数确定。主控程序从共享内存中读取由任务控制器发送命令,从采样设备读取反馈数据,并根据当前的命令完成后续的工作。
(2)运动模式的管理(set_operating_mode())
运动控制器中实现了联动模式(coordinated)和自由模式(free)两种运动模式。在联动模式下,运动控制器可以实现3个轴的空间运动功能;在自由运动模式下时,运动控制器实现了对单轴的控制,包括了点动功能和回零功能。
(3)运动控制相关算法的实现(get_pos_cmds())
运动控制算法是实现运动控制器的重点。直线加减速控制和运动轨迹规划。其中轨迹规划部分主要负责管理运动队列,并完成程序段间的速度连接功能以提高系统的加工效率。
(4)运动控制补偿功能(compute_screw_comp())
补偿功能是通过事先检测出螺距误差和反向间隙,并输入到数控系统中,在实际加工中进行补偿,从而提高数控机床的加工精度。
(5)坐标变换
实现坐标空间轨迹值与关节空间非伺服轴位置值相互的运动学变换,以及非伺服轴位置值转换成伺服轴位置值。
(6)PID控制
该部分实现了具有前馈环节的PID控制,PID的参数是可配置的。PID算法被封装成硬件抽象层中的元件(component)。
(7)设备驱动(output_to_hal())
该部分主要负责运动控制器与硬件设备间的接口。在主控程序与驱动程序间引入了接口模块,可以使运动控制器具有可移植性。在不同的硬件平台间变换时,只需更换相应的设备驱动和接口模块,而无需更改运动控制器的其它部分,实现移植很容易。
图4??
控制与检测
子模块的状态,进行决策,做出相应的控制策略I/O控制器流程如图4所示。
[7]
,
I/O控制器流程
6??结束语
本文结合作者现在正在参与研制的一个数控系统项目,对开源数控系统软件EMC2做了一个详细的介绍,对该数控软件整体架构,层次以及各组成模块的功能,结构做了深入的分析,并讨论了系统模块间的相互通信机制,以及如何快速在平台上采用Tcl/Tk语言构建图形用户界面。并根据实际项目需要,对整个软件进行裁剪定制设计,使之能满足项目具体控制要求。
[参考文献]
[1]TheEnhancedMachineControlDeveloperHandbook.[2]EMCUserManua,lAvailablefrom:http://www.linuxcnc.
org/docs/EMC2_UserManua.lpd.f
[3]TheHAL(HardwareAbstractionLayer)Handbook.[4]AnthonyJ.Barbera.RCS:TheNBSReal??TimeControlSys??
tem.
[5]NIST.IntroductiontoLinuxforReal??TimeControlVersion
2??0??0,2002??12??11T1531.
[6]MahemwL.Moore.ComplexControlSystemDesignandIm??
plementation,1999??11.
[7]TomislavStarove??k.iImplementationOfALinux??BaseCNC
OpenControlSystem.
[8]刘瑞.基于WindowsCE数控系统的运动和PLC控制器
的设计与实现[D].中国科学院沈阳计算机技术研究所,2007(3).
[9]BrentB.Welch,著,崔凯,译.Tcl/Tk编程权威指南[M].
北京:中国电力出版社,2000.
(编辑??赵蓉
51 5??I/O控制器设计
I/O控制器模块是数控系统中处理输入输出设
备的总控制器,主要包括主轴的正反转、冷却液开关、润滑开关以及其他辅助性操作。I/O控制器和任务控制器,以及各I/O模块之间的通信以NML方式,I/O控制器包含很多NML_MODULE,NML_MODU??ELE是NML提供的一个模块基类,每个模块都是按一定的采样周期进行循环,接受从父模块的命令和
)
相关推荐: