文章编号:1001-2265(2010)10-0048-04
收稿日期:2010-04-12;修回日期:2010-05-31 *基金项目:广东省教育部产学研项目(B090300060)
作者简介:吴晶(1986)),男,江西萍乡人,华南理工大学自动化学院硕士,研究方向为嵌入式系统设计,智能控制技术,(E-m ail)hn l g w u ji ng
@ m 。
基于E MC2的数控系统软件架构及通信机制分析
*
吴晶,史步海
(华南理工大学自动化学院,广州 510640)
摘要:E MC2是开源的数控机床控制系统软件。E MC2能移植到实时操作系统(例如ubuntu 等)并根据开发者定制完成复杂的机床和机器人实时控制。软件能够在平台上运行稳定,代码成熟。然而由于E MC2软件代码量非常庞大,阅读和消化难度很大。结合作者实际从事的数控系统项目的研究和学习。对整个软
件的架构,通信机制,各模块的功能以及大致的工作流程进行深入分析。关键词:E M C2;NM L ;GU I ;任务控制器;运动控制器;I/O 控制器中图分类号:TH 16;TG65 文献标识码:A
Soft ware A rchitecture And Comm unicati o n M ec hanis m O f CNC Syste m Ba On E MC 2
WU Jing ,SH I Bu -hai
(Sc hoo l ofAuto m o tive South Ch i n a Un iversity of Techno logy ,Guangzhou 510640,China)Abst ract :E MC 2is an open sour ce C NC contr o l syste m soft w are .It can be migr ated t o real -ti m e oper a-t ing syste m such as ubunt u ,also can be customized accor ding to t he developer to complete complex real -ti m e contr ol ofmachine too ls and r obo ts .Sof t war e can r un on t he platf or m stable and t he code is ver y mat ur e .How ever ,due to a ver y lar ge a mount of sof t war e code in E MC 2,it is very dif fic ult to r ead and digest .Co mbined w ith t he nu merical contr ol syste m ,I act ually engaged in t he rear ch pr oject and lear ning .The entire sof t w are architectur e ,co m munication mechanis m ,t he module f eat ur es and gener ally t he wor k of t he pr ocess are su m marized .K ey w ords :E MC 2;NML ;GU I ;task contr oller ;motion contr oller ;I/O contr oller
0 引言
近年来国家先后出台政策大力振兴装备制造业,提升和改造装备制造水平。数控系统是衡量一个国家装备制造业水平的重要标志,越来越受到人们的重视。欧洲、美国、日本数控技术先进,科研力量雄厚,推出各自的数控系统体系结构规范及示范性产品。我国在数控系统研究方面起步比较晚,技术基础积累薄弱,很多研发停留在中低端产品阶段。为了提升国家的数控系统研发能力,加快数控产品的国产化进程。对国外高端数控软件在应用过程中进行消化,吸收,进而理解其设计思路,掌握其关键技术是十分有必要的。
1 EMC2软件架构和通信机制
E MC2是一个开源的广泛应用于机床或机器人
运动控制系统的计算机控制软件。最初是由美国国
家标准与技术研究院(N I ST )研究开发的,现在由来自世界各地的工程师和爱好者共同维护。E MC2在原有E MC 软件的基础上加入了许多新的特性和功能。本文主要讨论E MC2在RTL i n ux 实时操作系统上实现。
整个系统是由四个主要的模块组成:人机界面(GU I)为用户提供友好的操作平台;任务控制器(e m ctask)是系统的枢纽,它从用户界面取得操作信息,然后将其分解为对运动控制器和I/O 控制器的操作,
并且监控运动控制器和I/O 控制器完成实际的操作;运动控制器(e m c m o tion)是一个运行在内核的实时模块,主要完成运动轨迹规划,运动插补,驱动执行机构;I/O 控制器(e m cio)主要处理紧急启停,冷却装置等其他辅助性输入输出控制。这种模块化、层次化软件设计结构使得开放式数控系统易于扩展,模块化的软件架构能满足各种类型机床的控
#
48#
制要求。图1是整个系统软件架构和通信机制示意
图。
图1 E M C2软件架构和通信机制示意图任务控制器与图形用户界面之间不需要很高的
通信速率,所以采用了RCS 库的NML 通信机制。运动控制器对实时性的要求高,需要高速率的通信,否则机床会在加工过程中产生停顿。因此需要在内核地址空间中划分一块共享内存,使用共享内存通信机制来实现运动控制器与任务控制器之间的通信。I/O 控制器是一个非实时模块,为了便于设计,它与任务控制器的通信也是采用NML 通信机制。111 NM L 通信机制
RCS (Rea-l T i m e Contro l Syste m )是由美国N I ST
(国家标准和技术研究院)开发的、支持实时系统开发的软件包集合。RCS 库是面向多平台实时分布式控制的C++类库。RCS 库中提供了C M S(Co mm un-i ca ti o n M anage m ent Syste m,通信管理系统)和NM L (N eutralM essage Language ,中性消息语言)通信支持。NM L 是RCS 库中提供分布式控制系统之间的通信机制的组件(类)。
消息基类:RCS _C MD _M SG 和RCS _STAT _M SG 分别是命令消息基类和状态消息基类。它们都包含有两个重要的变量成员:
(1)NMLTYPE type :每一类消息都具有不同的编号,通过编号来识别不同意义的消息。还可以根据控制需要从该基类派生新的消息类,给新的消息类分配不同的消息编号,同时可以根据需要,添加一些新的变量成员。
(2)i n t rial_num ber :这个变量用于实现模块间信息传递的同步。是用于上下模块通信的握手标志。
通道基类:RCS_C MD _C HANNEL 和RCS_STAT_C HANNEL 分别用来创建命令通道和状态通道。RCS 库封装相关代码,隐藏了繁琐的进程间通信与同步的实现细节,而给程序员提供了方便的编程接口。它提供两个通用的读写函数read ()和w rite(),实现控制模块间的消息传递。112 共享内存
本系统采用的RTL i n ux 提供了mbu ff 内存管理机制,来实现实时进程与非实时进程间的通信。mbuff 是由RTL i n ux 提供的内存管理机制,用来实现内核空间和用户空间的共享。通过使用m buff 提供的m buff_alloc()的函数申请到内存,m buff 管理这个申请的内存,即完成对该内存的共享。在共享内存中建立如下一个结构体
t ypedef struct{
emcmo t_c md_t comm and ;//命令emcmo t_sta t us_t stat us ;//状态
emcmo t_debug_t debug ;//调试信息emcmo t_error_t_terror ;//错误}e m c m ot_struct ;
co mm and 主要存储运动控制器的控制命令及其相应的参数,是由任务控制器写入;status 包括运动控制器的当前状态,由运动控制器写入,由任务控制器读出进而发送到人机操作界面以完成当前运动状
态的显示。
2 人机界面设计
人机界面(HM I)为用户提供与数控系统交互的环境。用户在人机界面中输入要操作执行的命令,这些命令通过命令通道传送到任务控制器,并进而由任务控制器解释和分派到运动控制器或I/O 执行;任务、运动与I /O 的状态信息和错误信息通过状态和错误通道传回到界面并显示出来。界面程序可以利用Java ,C ++等语言工具实现,本文采用的是Tc l/Tk 脚本编程语言及开发包,在li n ux 下能够快速高效地开发无须编译的界面程序。
人机界面程序具体实现:
(1)编写实现数控操作的编程接口(API),底层接口程序在 中定义了各种函数接口,其主要功能是向NM L 命令通道写入相应的控制命令,这些函数将被e 中用户定义的函数调用。
(2)e m csh 是整个界面的解释程序。里面的入口程序m ai n ()
vo i d m ain(i n t argc ,char*argv[])
{
//建立并连接命令渠道和状态渠道,并完
#
49#
成初始化工作
Tk_M a i n (ar gc ,ar gv ,T cl_AppI n it);}
Tcl/Tk 界面程序的入口函数Tk_M a i n ()首先创建标准Tcl 命令的解释器,创建Tk 主窗口;然后调用用户自定义的初始化函数Tk_A ppI n it ()来定制一个合乎用户要求T cl/Tk 解释器;最后进入脚本解释循环中。扩展Tcl/Tk 解释器Tk_AppI n it ()的任务是调用Tc l/Tk 库函数Tcl_I n it (I nterp)和Tk _I n it (I n -ter p)对解释器进行标准初始化,然后调用Tc l/Tk 库函数Tc l_C reate Obj C o mm and ()添加新的Tcl/Tk 命令,添加的命令可以在界面程序中调用完成对具体控制事务[9]
。
(3)编写具体的Tc l/Tk 脚本程序(tke m c .tcl),采用层次结构实现数控系统的用户图形界面。
3 任务控制器设计
任务控制器是整个数控系统的大脑,它首先轮询任务控制器和人机界面之间的命令通道,获得执
行命令,依据加工程序控制运动控制器和I /O 控制器以完成完整的加工任务。其包括加工G 代码解释和执行,加工时工艺顺序控制以及对于错误的检测诊断和处理功能,同时能够读取运动控制器和I/O
控制器的状态信息并将其反馈到人机界面。
图2 任务控制器功能模块框图
任务控制器控制流程如下:(1)解释器模块
解释器的功能就是将上层界面在AUTO 模式下打开的描述加工过程的G 代码转换为实际的机床操作序列。任务控制器主控制模块周期性调用解释器模块(rs274ngc )解析G 代码并将转换后的操作命令传递给规范加工模块,进行后续处理。
(2)规范加工模块
规范加工模块定义了对加工设备原语级的各种加工操作。该模块的主要功能是将各种基本的加工
操作转换成对应的NML 控制命令。主要处理NML 控制命令的生成和数据的转换,然后将所有的NML
控制命令将被追加到命令队列中等待执行。
(3)命令队列
命令队列是用来顺序存储待处理的NM L 控制命令。在任务控制器中实现了NM L _I N TERP_LIST 类。NML _I N TERP _L I ST 对外提供了添加(append)和提取(get)操作接口,操作参数都是NM L 控制命令。此外,命令队列中还记录了当前的NM L 控制命令在G 代码中所对应的代码段的行号,以便检查命令执行的顺序和动态显示加工程序的执行过程。
(4)任务接口模块(task i n tf)
主控模块处理的控制命令和状态信息都以NML 消息为基本格式。但是运动控制器不能直接处理NML 控制命令,所以定义taski n tf 模块完成NML 信息与共享内存的转换。
(5)运动接口模块(usr m otintf)
运动控制器与任务控制器之间的信息传送通过mbuff 共享内存方式实现。usr m o ti n tf 模块则负责完成对m buff 共享内存的创建、销毁和数据读写的操作。同时,为保证读写进程之间的同步,采用接收方和发送方利用消息通信来实现握手方式。
4 运动控制器设计
运动控制器模块是数控系统的核心,主要完成刀具与工件间的相对运动及控制,包括对轴位置采样、计算轨迹值、插补以及计算给伺服的输出值等控制。由于运动控制器模块对运行速度和时序要求严格,所以运动控制器模块运行于实时环境下。运动控制器的设计与具体硬件相关,因此需要设计驱动程序
[8]
。在E M C2软件中引入了一种新的特性-硬件
抽象层(HAL),HAL 屏蔽了上层应用程序与底层硬件的操作,底层的硬件在HAL 都对应成为具体的元件(co mponent)。对元件进行操作相当于对实际硬件
进行操作。
图3 运动控制器功能模块框图
功能描述和软件结构如下:
#
50#
(1)运动控制器主控程序(e m c m ot C ontro ller())
运动控制器的主控程序是RT-L i n ux实时线程周期性执行的程序,线程的周期大小将根据配置文件中设定的参数确定。主控程序从共享内存中读取由任务控制器发送命令,从采样设备读取反馈数据,并根据当前的命令完成后续的工作。
(2)运动模式的管理(t_operati n g_m ode())
运动控制器中实现了联动模式(coord i n ated)和自由模式(free)两种运动模式。在联动模式下,运动控制器可以实现3个轴的空间运动功能;在自由运动模式下时,运动控制器实现了对单轴的控制,包括了点动功能和回零功能。
(3)运动控制相关算法的实现(get_pos_c m ds ())
运动控制算法是实现运动控制器的重点。直线加减速控制和运动轨迹规划。其中轨迹规划部分主要负责管理运动队列,并完成程序段间的速度连接功能以提高系统的加工效率。
(4)运动控制补偿功能(co m pute_scre w_co m p ())
补偿功能是通过事先检测出螺距误差和反向间隙,并输入到数控系统中,在实际加工中进行补偿,从而提高数控机床的加工精度。
(5)坐标变换
实现坐标空间轨迹值与关节空间非伺服轴位置值相互的运动学变换,以及非伺服轴位置值转换成伺服轴位置值。
(6)PI D控制
该部分实现了具有前馈环节的PI D控制,PI D的参数是可配置的。PI D算法被封装成硬件抽象层中的元件(co m ponent)。
(7)设备驱动(output_to_hal())
该部分主要负责运动控制器与硬件设备间的接口。在主控程序与驱动程序间引入了接口模块,可以使运动控制器具有可移植性。在不同的硬件平台间变换时,只需更换相应的设备驱动和接口模块,而无需更改运动控制器的其它部分,实现移植很容易。5I/O控制器设计
I/O控制器模块是数控系统中处理输入输出设备的总控制器,主要包括主轴的正反转、冷却液开关、润滑开关以及其他辅助性操作。I/O控制器和任务控制器,以及各I/O模块之间的通信以NM L方式, I/O控制器包含很多NML_MODULE,NML_MODU-ELE是NM L提供的一个模块基类,每个模块都是按一定的采样周期进行循环,接受从父模块的命令和子模块的状态,进行决策,做出相应的控制策略[7], I/O控制器流程如图4
所示。
图4I/O控制器流程
6结束语
本文结合作者现在正在参与研制的一个数控系统项目,对开源数控系统软件E M C2做了一个详细的介绍,对该数控软件整体架构,层次以及各组成模块的功能,结构做了深入的分析,并讨论了系统模块间的相互通信机制,以及如何快速在平台上采用Tc l/Tk语言构建图形用户界面。并根据实际项目需要,对整个软件进行裁剪定制设计,使之能满足项目具体控制要求。
[参考文献]
[1]T he Enhanced M ach i ne Contro lD eve l oper H andbook.
[2]E M C U r M anua,l A vail able from:www.li nuxcnc.
org/docs/E M C2_U rM anua.l pd.f
[3]T he HA L(H ard w are A bstracti on L ayer)H andbook.
[4]A nt hony J.Barbera.RCS:T he NBS R ea-l T i m e Control Sys-
te m.
[5]N IST.Introduction to L i nux f o r R ea-l T i m e Contro l V ersi on
21010,2002-12-11T1531.
[6]M ahemw L.M oore.Com plex Contro l Syste m Des i gn and I m-
ple m entati on,1999111.
[7]T om islav StaroveÍk.i I m ple m entati on O f A L i nux-Ba CNC
O pen Control Sy stem.
[8]刘瑞.基于W i ndows CE数控系统的运动和PLC控制器
的设计与实现[D].中国科学院沈阳计算机技术研究所,2007(3).
[9]B rent B.W e l ch,著,崔凯,译.T cl/T k编程权威指南[M].
北京:中国电力出版社,2000.(编辑赵蓉)
#
51
#