罗海据,吴永明
(1.广州数控设备有限公司,广东 广州 510530;2.广东工业大学 机电学院,广东 广州 510006)
在数控加工,运动控制卡,机器人的应用领域,用户通过编写带有G指令的数控加工文件来控制机床,运动部件,机器人的运动.即使是数控机床领域,在JB3208-1999里规定50多个的G代码功能,某些厂家如FANUC系列,SIEMENS等的数控系统也各自定义了40多个的基本G代码,这些厂家的数控系统出了一些基本功能的G代码相同以外,其余的G代码都代表不同的意义.而且由于用户的使用习惯,可能对相同的G代码会有不同理解.另外,对于用户需要增加一些特殊应用,需要增加新的G代码.如果针对每一种系统都开发一套G代码,那就相当消耗时间,所以译码系统应该解决这些问题.目前文献[1,2,3]论述了译码的解释系统通用实现过程,以及G代码分组、实现过程等作了详细的论述.文献[4]分析数控加工指令与特征的对应关系,对加工指令进行分类,利用这种分类将功能函数子模块的计算结果以数据集合的方式输出,促进了功能函数子模块的独立.
每个G代码有各自要实现的功能和特性,它们之间的存在一定的关系如模态、排斥、替代等.数控的译码系统要对用户输入的G代码文件进行翻译、检测,防止出现功能相互冲突的G代码而导致加工异常.另外,当数控系统推出市场往往要顺应用户的要求增加特定功能的G代码,随着G代码的增加,译码系统的规模也将增加,新的模块增加到原来的系统,往往带来不稳定的因素.文章尝试将G代码看作数据,用E-R表描述G代码之间的关系,G代码解释系统只实现这些关系的运算便可以了.如果开发新的G代码系统,或者增加新的G代码,只需要改变或者添加G代码的关系表便可以完成,减少加入原来系统的代码量.
数控的译码功能主要完成对CNC程序文件的读写,对程序进行译码,最终得到机床移动的目标点送给插补器.它一般包括了词法分析,语法分析和语义分析这三部分.
词法分析先一段NC程序从CNC文件读进内存、然后按照CNC的词法规则检测和检查空格、段结束符等.而语法分析要检查G指令表示是否合法和完整、或者存在与语法规则不相符的表达式等.语义分析最终的目的是根据G代码的功能确定机床的运动方式和计算机床的移动终点.然而在计算终点坐标值前需要来检测G代码功能是否存在执行时逻辑冲突,这需要要对每个G代码特性和G代码之间的关系进行分析.另外,对于一段CNC程序,可能要实现多个G指令的功能,就涉及到它们之间的执行顺序问题,所以译码系统要把G代码的功能按一定的逻辑顺序排序.笔者认为整个译码功能的结构如下图1,除了基本的词法分析、语法分析,语义分析包括了计算目标点模块,和一个G代码关系分析模块.经过逻辑分析后,得到本段CNC程序需要执行的G代码,根据这些G代码表示的功能计算机床目标点.
图1
词法、语法分析将CNC程序读入内存以后,就要开始检测G代码所表示的功能之间的关系.一般而言,为了方便用户使用G代码包含一个模态的属性,和所属于哪一组的特性.所谓模态G指令就是当该指令被指令后,此后的每一段程序都需要执行该指令,直到该G指令被其他G指令替代为止.非模态G指令就是只在指令了该G指令的程序段里生效,当该段执行完毕后下一段程序不再执行此功能,例如G04X10.执行暂停功能.基本来讲,同组的G代码执行相同的功能,如移动G代码组包括了,G0快速移动,G1切屑,G2顺时针圆弧加工,G3逆时针圆弧加工,G04执行暂停等.而分组属性方便用户使用.
另外,G代码之间的关系包括了功能上相互间的排斥、替代、转折等关系.当前段的有一个G代码被指令,如果和模态G指令或者同段其他G代码的同时执行使加工出现质量下降,或者机床异常情况,例如出现过切,或者撞刀等情况,认为这些G代码是排斥的,不能同时生效的.例如在CNC程序里指令了钻孔加工的G代码,该代码具有模态性,将该段执行完毕后,在执行下一段CNC程序时,某些信息会被继承下来,例如钻孔轴,回退平面等.如果下一段指令了与该段不同的平面选择G指令,钻孔的进给轴就发生改变,虽然CNC程序在语法上没有错误,然而在实际加工过程中往往出现撞刀的情形,这时候译码系统就要发出报警,或者其他提示的画面来通知用户.
替代是指某些模态指令被指令后,某些模态从属于某一组,可以被同一组的G代码替换执行同组的其他功能.转折是当指令某一G代码,令之前的G代码的功能发生了改变,变成了另一种功能,如极坐标系编程,相对或绝对指令都可以使其算法发生了改变.为了更清晰描述这些关系,这里引用数据库关系描述工具,E-R关系图表,如图2.
图2
分析所有的G代码之后,将这些G代码关系作成表的形式存放起来,如下表1所示:
表1
为了方便关系数据的读取,定义了如下的数据 结构以常数的形式存放.
}GCODEATTRIgCodeAttri[G_CODE_MAX]={{0,1,{1,2,3,4,-1},{-1},{-1}},…};为了方便处理,用-1表示没有与之有关系的G代码,当程序扫描该组的G代码,遇到-1便返回,节约处理时间.
由上面的分析可以知道,译码系统先将一段CNC文件读入内存,直接对文件格式的内存并不方便,文章将这些数据转换成中间数据,然后将坐标移动量和控制量输送插补器.文章设计的中间数据的数据结构如下:
词法分析逐个字母进行分析,并将字母后面的数字字符串转化为数值赋值到相对应于字母对应的地址里.由于中间数据预留了所有组的G代码,按照G代码的组号分别填到G代码数组里.在CNC程序段出现G代码,按照G代码关系表,将后面出现的代替前面的就可以,实现G代码的替代关系.另外,在转化过程中要检测空格,不合法的地址表达式,注释等,如果出错就退出并给出报警信息.
语法分析直接对中间数据进行处理,先按照分析的G代码逻辑表,对G代码进行排斥检查,如果有排斥的G代码则报警并退出,遇到转折关系的G代码则在condition[]设置该G代码的在执行条件,并将计算方法填入CaculateWay[]的函数指针的数组里.另外,得到本段程序需要执行的G代码后,根据要执行的G代码类型,来判断其他的地址,如F、P、Q、X、Y、Z等是否合理,因为这了地址会因为G代码的不同而有不同的含义和取值范围,如果这些地址取值不合理,则报警.
语法分析后得到了中间数据的最终结果,根据参数入口condition[]和计算方法CaculateWay里面的函数指针一一调用相应的参数和函数计算目标点.目前的数控系统一般都包括对了极坐标转换、镜像、缩放、旋转的计算和刀具半径补偿和长度补偿.如果程序指令了固定循环的G代码还要分解刀具移动的路径.这些算法的顺序是固定的,如果用户按照实际应用提出新的要求,那么只需要添加G代码关系和相应的算法就可以.另外,在计算过程中检测是否有溢出、除零、坐标是否有超出软限位等判断,如果有错误则报警退出译码模块.经过计算最终得到机床的移动目标位置,放到与插补接口的数据缓冲区.
文章对数控译码系统进行分析,并根据G指令的特点将G代码的关系以数据表的方式确定,对于开发新的运动控制产品,或者增加的G代码只需要改变数据表就可以,缩短开发时间.该译码系统已经应用到实际的数控系统,实践证明可以满足不同的用户需求,加快产品的研发.
〔1〕张承瑞,单诚,王恒,等.数控G代码解释器的设计与实现[J].山东大学学报(工学版),2002,32(6):564~568.
〔2〕吉华,李彦,肖世广.Linux下G代码解释器的设计与实现[J].计算机应用研究,2006,12:201~202.
〔3〕王心光,傅建中,等.虚拟数控加工中G代码编译器的研究.组合机床和自动化加工技术[J].2005,6:80~81,84.
〔4〕王琦魁,李伟,陈有东,王田苗,等.新型的数控译码模块结构的研究与实现[J].北京航空航天大学学报,2009,35(1):122~125.