数控 nc代码驱动机床运动实现加工的自动化 ,能够大大提高加工性能。但不正确的 nc代码会造成过切或欠切加工出废品 ,也可能发生零件与刀具、 刀具与夹具、 刀具与工作台之间的干涉碰撞 ,这显然十分危险。因此 ,迫切需要一种虚拟的仿真加工平台来检验 nc代码的正确性 ,nc代码编译器是组成数控虚拟仿真平台的核心部分之一。
国内外的 nc代码翻译技术已经比较成熟[ 1, 2 ]。针对数控代码标准的多样性 ,文献 [ 3 ]中提出独立的“nc代码规则库 ” 和“处理引擎 ” 的概念 ,并通过 tcl ( tool commandlanguage)来实现 ebnf定义的 nc程序语法规则 ,提高了 nc代码编译器的通用性[ 4 ]。本系统采用高级语言 java开发 ,具有良好的平台无关性 ,通过 ebnf定义 nc程序语法规则 ,并以 ant lr为底层分析工具 ,开发出一个通用性、 开放性强 ,效率高的 nc代码编译器。
1 nc代码编译器的技术基础
1 . 1 数控程序的组成及特点
一个完整的数控加工程序由若干程序段组成 ,而数控程序段又由若干条数控指令按照一定的结构构成。数控程序结构如图 1所示。
图 1中各个标号的含义如下: 1— 起始符; 2— 程序名; 3—程序主体; 4— 程序结束语; 5— 功能字; 6— 程序段。目前数控程序段常采用字地址程序段格式 ,上述功能代码 g、 m、 s即为“ 字地址 ” 。每个“ 字 ” 由“ 字地址 ” 和其后面的数字 (有的带有符号 )组成。g、 m及 f、 s、 t指令描述数控机床的运动方式、 加工类型、 主轴状态、 冷却液的开关、 进给速率、 主轴转速的设置和刀具的选择等。x、 y、 z、i、 j、 k为坐标指令字 ,分别描述刀心位置及加工轨迹中圆弧的圆心坐标等。数控程序段为典型的上下文无关文法 ,而且语法规则简单、 数量较少 ,可以通过 ebnf定义其语法规则。
1 . 2 ant lr技术简介
ant lr[ 5 ]能够简化编译器的构建。ant lr是 ll ( k)文法的语法分析器生成器 ,其生成的目标程序非常直观且易于调试 ,文法表述能力相对强于 lex/yacc。ant lr通过让用户自定义词法分析器和语法分析器的规则 ,来生成相应词法分析器和语法分析器的程序。利用生成的词法分析器 ,先将输入的字符流转换成由短语组成的流 ,再作为语法分析器的输入 ,从而得出终的结果 — — — 语法树。有了语法树便可以根据实际的应用要求求得执行结果。生成的分析器是以类的形式出现 (一个分析器就是一个类 ,所有功能都封装在类中 ) ,能方便地嵌入到应用程序中。
ant lr总体框架如图 2所示。在使用 antlr时 ,要先创建一个称为语法文件的文本文件 (. g文件 ) , 将自定义的词法分析器和语法分析器的规则全部写在里面。antlr就是通过读取分析语法文件中的规则来生成词法分析器与语法分析器的。antlr语法文件的工作过程如下:首先 ,定义词法分析器 lexer类 ,在类中定义各种 token;然后 ,定义语法分析器parser类 ,在类中使用 ebnf语法 ,递归定义各种句子 , parser类负责把读入的 token串匹配成句子 ,翻译出 ast(抽象语法树 ) ;后 ,定义用于处理 ast的 treeparser类 ,根据 parser类分析出来的 ast(抽象语法树 )进行动作。antlr语法文件具体组成部分及规则解析参见文献 [ 6 ]。
2 nc代码编译器体系结构
nc代码编译器的首要作业归纳起来有两个:检错和翻译。检错 ,即依照该数控系统的编程规则和有关数控加工的知识 ,对 nc代码进行词法剖析、 语法剖析、 语义剖析 ,然后检查出该 nc代码的词法过错、 语法过错、 逻辑过错 (其间包含数据不合理 ,加工状况不合理等 )。通过检错期间 ,若 nc代码未被查出过错 ,则进入翻译期间。翻译 ,即从nc代码中提取操控机床部件运动的有关指令动作和状况信息 ,将运动的数据依照位移和速度的改变划分红一系列时刻片段[ 7 ],计算出各时刻片段的机床各坐标的位移 ,如:各种零件轮廓信息(起点、 结尾、 直线或圆弧等 )、 加工速度信息 ( f代码 )和其他辅助信息 (m, s, t代码等 )等 ,然后驱动机床模型的运动 ,完成 nc代码驱动的加工进程仿真。
根据以上对 nc代码编译器主要工作的分析 ,设计本系统体系结构如图 2所示。
3 nc代码编译器的研究与设计
根据面向对象的软件设计方法 ,该编译器可细分为词法分析、 语法与语义分析、 信息提取三个模块。
3 . 1 词法分析模块
词法分析的主要功能是将输入的 nc程序由字符串序列分解为单词序列[8 ]。词法分析的任务包括两个方面:检查数控程序内是否有非法字符;对数控程序的源代码进行格式整理。
数控程序中出现非法字符主要指以下两种情况:第一种情况为含有系统无法识别的字符。在本编译系统中 ,系统可识别的字符集为 { g, x, y, z, h, d, f, o, n, i , j, k,m, s, t,r. , ; , % } ,阿拉伯数字 0~99,若数控程序内出现“a” 等字符集所不包含的字符时 ,则认为数控程序含有非法字符。第二种情况是由系统可识别字符集组成的系统无法识别的字符串。这种错误一般是由于用户的误操作造成的 ,包括以下两种: 1)没有相应的数控功能与字符串相匹配 ,如“7100” ,“m890” ,“mfo 1” 等均属于这种情况; 2)数值格式输入有误 ,如 150正确的表达应为“150 . ” ,但若用户在中间输入空格则变成“1 5 0 . ” ,这种情况在本编译系统中也被视为是数值格式输入错误的一种。
对数控程序的源代码进行格式整理的主要任务是删除数控程序中的空白字符、 回车符、 程序注释等非加工信息字符 ,并将数控程序转换成便于代码编译程序进行处理的内部格式。在 ant lr定义的. g语法文件中通过下面的代码来实现词法分析器的功能。
ant lr中 的 规 则 分 为 公 有 型 ( public ) 和 保 护 型(p r otected)两类。上述 d igit规则定义了一个数字 ,其为p r otected类型 ,该规则不能单独使用 ,只能嵌套到其他规则中。该规则被 numer i c规则调用 ,定义任意整数。ws规则中的“ $settype ( token . skip) ” 是代码调用一个 ant lr的内置函数 ,告诉词法分析器 ,前面定义的这四种字符都一律跳过。完成该文件后 ,运行 ant lr便可以生成相应的词法分析器 ,然后通过以下的循环可以依次将 nc文件的短语读出来。
3 . 2 语法分析和语义分析模块
数控语法分析模块的任务是在词法分析基础上将数控加通过线程及 java 3d 对动画效果、 交互式操作、 形体组合、复杂的应用程序的支持等来实现仿真 (模型显示于界面右部 ) ,并可通过按钮和菜单对仿真的过程进行控制。图 6为系统运行实例。
本文由 伯特利数控文章 整理发表,文章来自网络仅参考学习,本站不承担任何法律责任。
加工中心专业制造
