平台可移植的数控系统G代码解释器的设计*
2014-07-18庄源昌高罗卿吴新明
庄源昌,高罗卿,吴新明
(1.常州数控技术研究所 研发部,江苏 常州 213164;2.常州轻工职业技术学院 电子电气工程系,江苏 常州 213164;3. 江南现代工业研究院 研发部,江苏 常州 213164)
平台可移植的数控系统G代码解释器的设计*
庄源昌1,高罗卿2,吴新明3
(1.常州数控技术研究所 研发部,江苏 常州 213164;2.常州轻工职业技术学院 电子电气工程系,江苏 常州 213164;3. 江南现代工业研究院 研发部,江苏 常州 213164)
嵌入式数控系统的硬件和软件往往需要定制化服务,针对嵌入式数控系统的平台多样化的要求,设计了一种ARM+运动芯片的嵌入式开放性数控系统的硬件平台,并以Qt/Embedded为软件开发平台,利用多进程编程技术,设计数控系统的G代码解释功能模块,实现了对变量、表达式和宏程序的解析,并通过实验验证了G代码解释模块的可行性。模块界面友好,操作简单,移植方便,有很高的工程应用价值。
Qt/Embedded;ARM;运动芯片;多进程;G代码解释器
0 引言
数控技术是机械加工技术,微电子技术,监控检测技术,计算机技术,自动控制技术等多种学科的集成,对机电工业及国民经济的发展具有十分重要的作用。嵌入式开放式数控系统具有系统结构简单,成本低,方便应用于中小规模应用场合,近年来进入了一个高速发展的阶段。与传统的数控系统[5-7]PC+运动控制卡的结构方案相比较,嵌入式开放式数控系统具有体积小,成本低,功耗低等优点。
Qt/Embedded[2]作为跨平台的图形用户界面工具包,它通过QtAPI与LINUX I/O以及Framebuffer直接交互,拥有较高的运行效率,而且整体采用面向对象编程,拥有良好的体系架构和编程模式。只要用Qt编写过一次代码,那么在其他不同的操作系统平台中,只需重新将其编译一遍即可重复使用,具有广泛适应性和良好的可移植性。
嵌入式开放式数控系统的特点[3]是可以根据实际的需求定制系统的硬件和软件功能,解决传统数控系统中灵活性差和不易扩展的缺陷。在嵌入式开放式数控系统的工程方案选择中,往往需要根据不同的需求应用,选择不同的系统平台,G代码解释器是数控系统的一个核心模块,这就需要一个能够方便的移植于各类系统之间的G代码解释器。
与一般的解释器[5-10]使用Visual Studio或VC++等WINDOWS平台下的开发工具相比,或与有些嵌入式数控系统[3]在UCOS系统平台上开发相比,采用Qt平台开发G代码解释器具有可移植性强的优点,解决了解释器只能在单一平台下使用,代码移植难的问题。在Qt平台上将G代码解释器作为一个独立的进程,利用Qt自身的进程间通讯方式,可以方便的适应多种系统,增加代码的重用性。
1 数控系统软件架构
系统采用ARM11为主处理器,采用上下位分离的模式,下位采用ARM7+运动控制芯片的方式,构建了一个开放式的嵌入式小型数控的硬件平台,上下位采用CAN总线通讯,移植CANopen上层通讯协议。
图1 数控系统软件架构
如图1所示,上位系统以Qt/Embedded为软件开发平台,负责数控系统的GUI界面开发,完成触摸屏的人机交互任务。Qt支持多进程的GUI编程,将系统分离成多个GUI进程,有利于系统模块化开发和维护,系统的各GUI层都通过后台任务管理器调度,系统后台有独立的G代码解释器,G代码解释器接受任务管理器的任务,执行G解释任务,将结果返回给任务管理器,CAN通讯进程则负责上下位实时通讯,完成指令任务。
2 G代码解释器的设计
G代码解释器的主要作用是将加工图形信息,行走速度和其他M辅助信息按一定的规律解释成控制系统能识别的数据格式。
G代码分为不同的组[4],大多数的G代码是模态的,模态G代码不只在当前的程序段中起作用,而且在以后的程序段中一直起作用,直到程序中出现另一个同组的G代码为止,同组的模态G代码控制同一个目标但起不同的作用,它们之间是不相容的。
Group0组的G代码是非模态的,这些G代码只在它们所在的程序段中起作用。标有*号的G代码是上电时的初始状态。对于G01和G00、G90和G91上电时的初始状态由参数决定。例如:
G代码模态分组:
Group1= {G00,G01,G02,G03,G33…};运动组
Group3={G90,G91};编程指令方式
Group6={G20,G21};公英制选择
Group7={G40,G41,G42};刀具半径补偿
Group12={G54,G55,G56…};坐标系选择
G代码非模态分组:
Group0= {G04, G09,G10,G28,G29…};
2.1 G代码解释流程设计
G代码解释模块首先将整个G代码文件读入到解释进程的缓冲中,然后逐行读入G代码,经过词法检查、语法检查,数据提取,中间代码生成,直到全部程序解释完毕。图2所示的是G代码解释的基本流程图。
词法检查主要是判断数据和字符是否是非法的,对不合法的字符进行出错报警。主要有代码指令:如G、M、常数、整型数等;运算符:+、-、*、/、>、<等;界限符:行结束符。检查程序格式是否合法,组词规则等等。
语法检查主要是根据G代码标准,检查语法规则,参数的合法性和有效性,生成语法小短句是否合法,语义的规则有没有冲突等。如模态的检查,同组模态的G指令只能出现一次,地址符后是否是数字还是公式,X、Y等轴的运动参数是否越界等。
中间数据生成主要是依据一定的算法,扫描一行G代码后,将要加工的指令和数据,解释存储在固定结构体中,方便程序使用。
图2 G代码解释流程图
2.2 数据结构
构建G解释器的中间代码数据结构,主要作用是依据解释算法,生成G、M代码的模态及参数,标号和行号的信息,以及控制类的状态和标号等。
typedef struct gcode_struct{
int g_modes[MAX_G_GROUP];
int g_count; //G代码数量
int m_modes[MAX_M_GROUP];
int m_count; //M代码数量
int motion_to_be; //运动指令
int udefg,udefm; //用户定义的G,M代码
double a,b,c,d,e,f,g,h,i,j,k; //参数
double m,p,q,r,s,t,u,v,w,x,y,z,o;//参数
int label; //标号
int lineno; //行号
bool block_delete; //段忽略标示
int control_type[MAX_C_GROUP];
int c_count; //C控制数目
bool condition;
int jmpto_lable;
} Gcode,*Gcode_pointer;
其中,g_modes[MAX_G_GROUP]记录G代码模态组,m_modes[MAX_M_GROUP]记录M模态组,将G、M的数值赋值给相应的数组内,control_type[MAX_C_GROUP],其值为CTRL_GOTO,CTRL_IF,CTRL_WHILE,CTRL_END,CTRL_NULL,CTRL_DO。condition如果控制类型为CTRL_IF或CTRL_WHILE,则为相应的条件。jmpto_lable如果控制标志为CTRL_IF或CTRL_GOTO则为跳转的标号,若控制标志为CTRL_DO或CTRL_END则为其后的数字。
2.3 算法分析
G代码解释器的核心就是G的解释算法,算法将一行G代码循环扫描,提取所需的数据赋值给中间数据结构体。如图3所示G代码算法流程图,先预处理过滤空格符和换行符,然后先逐一扫描是否有“IF”,“WHILE”,“=”,“#”等条件或宏处理字符,有这些字符的时候,先处理宏指令,将变量或值带入到公式中,生成常规的G语句。
然后,逐一字符的扫描关键字符,如“G”,“M”,“I”,“J”等,每个字符后面接着的是数字,将数值赋值给中间结构体相应的变量中去,依此规律,直到循环结束。
例如:G01 X [2* #1+0.5] Z [ #2-40+0.2]这句话含有宏定义,先把宏的参数带入到公式里,将语句转换成G01 X2.5 Z0.2,然后在逐个字符扫描,扫描到有“G”字符,根据数值判断G指令属于哪一个模态组,G01属于Group1,则将数值1赋值g_modes[1],相应的g_count要加1,扫描到有“X”字符,将数值保存到参数x里,供程序调用参数。
图3 G代码算法流程图
3 实例验证
本文在WINDOWS平台下利用QT开发平台,使用QT的Qthread类,以及进程间通讯QMutex、QSemaphore、QsharedMemory类同步进程,将G代码解释器设计为一个独立的进程,规范了进程间通讯协议和共享内存段,供系统平台移植时使用。
然后本文在LINUX系统下的QT开发平台,编译WINDOWS下开发的G代码解释器源代码,获得了在LINUX下的可执行文件,程序具有单独的G代码输入及解释GUI进程,按界面按钮输入G代码语句,按“预览”可以查看G代码的行走轨迹,如图形正确,则解释程序正确。如图4所示,是G代码解释进程运行界面,例如程序输入为:
O0001 ;
#1=30;
G90 G00 X#1 Y#1 ;
G01 X-40 Y0 ;
G02 I40 ;
G03 X0 Y0 R20 ;
G02 X40 Y0 R20 ;
M02 ;
通过“预览”功能,可查看解释图形的正确性,然后系统即可以通过任务管理器,读取G代码解释进程的结果,通过CAN传输处理进程,将运行命令下发到下位机运行,下位机接收运行命令,操作运动控制芯片执行相应的动作。
图4 G代码解释进程
4 总结
本文针对嵌入式开放式数控系统,应用QT开发环境,结合G代码的语言规范和特点,设计了一个平台可移植的G代码解释器,经试验证明:
(1)嵌入式开放式数控系统采用上下位结构,把实时运动控制放在下位执行,上位处理人机交互和发送运行指令,将最大程度降低数控系统的平台依赖性。
(2)根据G解释器的“预览”功能,证明G代码解释器能够识别代码中的变量、表达式、宏程序等,能够达到G规范要求。
(3)G代码解释器通过在WINDOWS平台下开发,然后在LINUX平台下编译,证明了采用QT平台开发的G解释器可以在LINUX、UNIX、MacOS等多平台上编译运行,实现了平台的可移植。
[1] W.Richard Stevens.UNIX Network Progra-mming. 2010.
[2] Jasmin Blanchette.C++ GUI Programming with QT4,Second Edition.2011.
[3] 洪斯宝,徐建明,吴世名.嵌入式数控系统G代码解释模块的设计与实现[J].机械设计与制造,2012(11):37-39.
[4] 赵炎,吴文江.可配置的数控G代码解释器的设计与实现[J].组合机床与自动化加工技术,2013(7):13-15.
[5] 田永中,周建平,梁楚华.开放式数控系统中G代码编译器的设计与研究[J].机械设计与制造,2011(3):154-155.
[6] 张庆,姚锡凡.一种开放式数控系统NC代码解释器设计与实现[J]. 组合机床与自动化加工技术,2010(2):59-61.
[7] 张葆青,闫石,宋海生.开放式数控系统代码解释模块设计[J].机床与液压,2012,2(4):72-74.
[8] 黄鹏.开放式数控系统的关键技术研究[J].煤炭技术,2012(1):26-28.
[9] 洪海涛,于东,陈龙,等.数控代码解释器模块化结构的研究与实现[J].小型微型计算机系统.2013(3):480-485.
[10] 林砺宗,兰刚,宋启盛,等.面向固高数控卡的G代码系统[J].模具技术,2009(1):5-8.
(编辑 李秀敏)
The Design of Cross-platform G-code Interpreter in CNC System
ZHUANG Yuan-chang1, GAO Luo-qing2, WU Xin-ming3
(1.Department of Research and Development, Changzhou Institute of CNC Technology,Changzhou Jiangsu 213164,China; 2.Department of Electrical Engineering,Changzhou Institute of Light Industry Technology, Changzhou Jiangsu 213164 ,China)
The hardware and software of the embedded CNC system often require customization service, to the need of diversification platform of the embedded CNC system, designed the hardware platform of the embedded open CNC system by using of ARM and the motion control ship, and Qt/Embedded as software development platform, The G-code interpreter module of CNC system is designed by using of multi-process programming technology, Implemented on the interpretation of variables, expressions, and macro program, and the feasibility of the G-code interpreter module is verified through experiments. The module is friendly interface, simple operation, easy to transplant, has a high value of engineering application.
Qt/Embedded; ARM; the motion control ship; multi-process; G-code interpreter
1001-2265(2014)07-0103-03
10.13462/j.cnki.mmtamt.2014.07.029
2013-11-08;
2013-12-19
2011年江苏省产学研联合创新资金:智能化高速套管类自动挂钩装备的关键技术研究(BY2011174);常州市科技支撑计划(工业):服务于多台数控机床的智能换刀机器人关键技术研发与产业化(CE2011005)
庄源昌(1983—),男,江苏泗阳人,常州数控技术研究所工程师,硕士,主要从事数控系统,嵌入式系统开发,(E-mail)326611259@qq.com。
TH166;TG65
A