通用数控代码解析方法

文档序号:6280445阅读:255来源:国知局
专利名称:通用数控代码解析方法
技术领域
本发明涉及数控(即NC)代码的词法、语法检错及解析方法,并提供定制手段,使 基于此方法的解析器具有可拓展性。 二
背景技术
虚拟加工和加工仿真系统由于可以避免或减少实际生产中的"试切"环节,在企业 中得到了越来越广泛的应用。虚拟加工/加工仿真作为实际加工过程在计算机中的本质 映射,其过程也应由实际NC代码控制。因此,NC代码解析是这类系统的一个核心技 术。
无论是手工编程,还是计算机自动编程,NC代码都可能存在词法错误、语法错误 和逻辑错误。NC代码解析器应能对代码的正确性进行检验,并向用户报告错误发生的 位置及其类型。在此基础上,解析器生成虚拟加工系统可以识别的刀位文件,用以驱 动加工的可视化仿真过程。现在数控系统种类繁多,它们在编程规则和代码对应功能 上都存在一定的差别,与国际标准不完全一致。由于同一用户所使用的数控系统可能 不止一种,解析器必须具有通用性和开放性。
株式会社森精机制作所申请的用于分析数控加工中的数控程序的方法和装置专利, 提出一种用于分析NC代码加工方法的装置,并用数据库存取加工信息。但是此装置 不具有通用性(专利申请号96180191.3,公开号CN1214001A)。
肖田元等提出了一种通用NC代码解析方法(肖田元,韩向利,王新龙.通用NC 代码翻译技术.系统仿真学报,1998,10(5): 1 7),其存在如下欠缺(1)限于理论上的 探讨,实际系统仅能实现少数几种常用数控系统的解析。(2)缺乏对NC子程序处理的 研究。(3)未提供切实有效的与用户交互的数控系统定制接口。


发明内容
本发明的目的在于提供一种具有通用性和开放性的数控代码解析方法,涉及词法、 语法检错及解析方法,并提供定制手段,使基于此方法的解析器具有可拓展性。
实现本发明目的的技术方案为 一种通用数控代码解析方法,包括以下步骤
第一步,査询规则数据库,即规则数据库用以存贮数控系统的编程规则,该规则 数据库包括机床信息表、NC规则表、自定义数据类型表、子程序规则表、未定义字符 表、G代码表、M代码表及程序号规则表;如果机床信息表中没有所要处理的特定数控 系统型号,进行数控系统定制,数控系统定制使得用户在规则数据库中加入该特定数 控系统的编程规则,以扩展功能;
第二步,NC代码导入,即把NC代码从磁盘文件读入计算机内存中,以链表的形式 存贮,每一个程序段是链表的一个结点;程序段是NC代码的一行语句,由一个或多个 程序字组成,程序字通常由地址符及其后面的数字和符号组成;建立当前程序段指针, 使其指向链表的第一个结点,即NC代码的第一个程序段;当前程序段指针指向的程序 段称为当前程序段;
第三步,词法分析,即词法分析检查程序段中是否有不合法字符,对于每一个程 序段中的字符,检査其是否包含在未定义字符表中;如果字符包含在未定义字符表中, 即发生词法错误,将错误类型及错误位置记录在错误链表中,此处错误类型为非法字 符,错误位置为程序段的行号,将错误标志置为l;错误链表是用以记录错误的数据结 构,每一个错误是链表中的一个结点;错误标志是个布尔型变量,其初始值为0,表示 NC代码无错误,当其值为1时,表示NC代码有错误;
第四步,语法分析,即语法分析检査当前程序段是否符合语法规则,语法规则包 括开始符和结束符规则,程序号规则,程序段规则,子程序调用规则;基于规则数据 库的NC规则表,自定义数据类型表,子程序规则表,程序号规则表,建立与当前程序 段相对应的正则表达式;用正则表达式匹配当前程序段,如果不成功,即发生语法错 误,将错误的类型和位置记录入错误链表中,错误类型与所违背的语法规则相对应, 错误位置为程序段的行号,将错误标志置为l;判断错误标志的值,如果其为l,更新 当前程序段;
第四步,判断当前程序段是否子程序调用,査询规则数据库的子程序调用规则表, 如果程序段的地址符与子程序调用规则表的标识字符相同,当前程序段是否子程序调 用,进行NC子程序处理流程;首先需要搜索子程序的位置,然后跳转到子程序进行检 错、解析处理,子程序处理完毕返回后,更新当前程序段;
第五步,代码解析;代码解析基于规则数据库的G代码表和M代码表进行,G代码 表存lfcG代码的功能描述信息,M代码表存贮M代码的功能描述信息;根据G代码和M 代码的功能描述,按时间片离散方法对NC代码进行解析;该时间片离散方法是根据固 定的时间间隔,把刀具的轨迹离散成微小的直线段的一种解析方法;NC代码解析后得 到若干刀位数据,刀位数据是在相应时间片里刀具在各坐标上的位移;把刀位数据写 入刀位文件,此文件用来驱动虚拟加工和加工仿真过程;
第六步,更新当前程序段,如果代码链表的下一个结点,即下一个程序段不是程
序结束符,将当前程序段指针指向下一个程序段,进行词法分析。
本发明通用数控代码解析方法中的数控系统定制是以下三个步骤来建立数控系统
规则
第一步,设定程序号规则、部分程序段规则和子程序调用规则;用户输入的项目 与规则数据库中的相应数据表记录对应;机床信息设定包括机床名称、生产厂商、数 控型号及加工方式;未定义字符设置包括非法字母数字和非法符号;NC规则设定包括 程序开始符、结束符,程序段结束符及地址符序列;程序号规则有两种, 一种是字母 或符号加数字, 一种是字母加数字加"-",需要在两者间选择一个,其它的设定还包 括标识字符、位数值、最小位数和最大位数,其中标识字符即是上述程序号规则中的 字母;子程序调用规则主要有两种,其一为字母加调用次数再加程序号,其二为字母 加程序号加L加调用次数,需要在二者中选择一个,其它的设定还有最大调用次数和 标识字符;
第二步,设定地址符后数字的数据类型,通过一个树形视图,列出所有地址符, 从中选择一个地址符,设置其后面数字的类型;已定义的数据类型通过读取规则数据 库的自定义数据类型表的数据类型ID的值在下拉列表框列出,用户从中选择一个作为 地址符的数据类型;若现有数据类型不能满足要求,则需建立新的数据类型,即设定 数据类型ID、数据最小值、数据最大值、整数位数、小数位数,是否需要输出0,及 正数前是否有+号;设定的数据类型存贮到规则数据库的自定义数据类型表中;
第三步,设定G代码、M代码同功能描述之间对应关系,即对于常用的功能,由对 话框列出其功能描述,用户在其后添加对应的功能代码完成设置;对于其他特殊的功
能描述,则需要用户同时输入功能描述及其对应的功能代码来作设置;设置的信息存
C到规则数据库的G代码表和M代码表中。
本发明通用数控代码解析方法中,由正则表达式描述语法规则并进行NC代码语
法分析,其步骤如下,
第一步,建立与语法规则对应正则表达式,语法规则包括开始符和结束符规则、
程序号规则、程序段规则、子程序调用规则;其中程序段规则建立步骤如下
(1) 读取地址符序列,从规则数据库的NC规则表读出地址符序列,存贮在一个字 符串变量中;
(2) 建立当前字符指针,将当前字符指针指向地址符序列第一个字符,当前字符指 针指向的地址符称为当前地址符;
(3) 建立正则表达式,对于当前地址符,从NC规则表中查询其后面数字的数据类 型ID,再根据数据类型ID在自定义数据类型表中查询关于此数字的具体规定,包括 数据最小值、数据最大值、整数位数、小数位数,是否需要输出0,及正数前是否有+ 号;根据查询结果,建立对应于此地址符的正则表达式并加入程序段的正则表达式;
(4) 更新当前地址符,将当前字符指针指向地址符序列的下一个字符,使其成为当 前地址符;
(5) 判断当前地址符是否地址符序列的最后一个字符,如果当前地址符不是地址符 序列的最后一个字符,建立正则表达式;否则,把该地址符加入程序段正则表达式;
第二步,在建立正则表达式的基础上,进行语法分析歩骤如下所示
(1) 建立当前程序段指针,将当前程序段指针指向内存中程序段链表的第一个结 点,即NC代码第一个程序段,当前程序段指针指向的程序段称为当前程序段;
(2) 正则表达式匹配,用相应正则表达式匹配当前程序段,如果匹配不成功,即发 生语法错误,将程序段行号及错误类型记录入错误链表,并将错误标志置为l;
(3) 程序字分析,依次读取当前程序段的各程序字,如果是G代码或M代码,査 询其在G代码表或M代码表中是否有相应的记录,如果无记录,则发生语法错误,将 程序段的行号及错误类型记录入错误链表,并将错误标志置为l;如果是N代码,判 断代码后的数字是否大于上一个程序段N代码后的数字,如果不大于,则发生语法错
误,将程序段的行号及错误类型记录入错误链表,并将错误标志置为l;
(4)更新当前程序段,如果当前程序段不是链表尾,将当前程序段指针指向链表的 下一个结点,即将下一个程序段设为当前程序段,进行正则表达式匹配。
本发明通用数控代码解析方法中,采用时间片离散方法对刀具轨迹进行插补,时 间片定为动画仿真中显示一帧场景的时间,圆弧插补采用弦线逼近方法,即以XY平 面第一象限,其计算步骤如下
第一歩,由进给速度vmm/min计算在一个时间片Tms中刀具的进给量fmm,
<formula>complex formula see original document page 12</formula>60x1000 60000
第二步,由finm和圆弧半径Rmm,计算一个时间片Tms中刀具进给运动对应的 圆心角S弧度,
艮卩(5二2arcsin丄;
第三步,根据圆弧起点S和终点E的坐标和圆弧半径Rmm,计算圆弧的圆心角0 弧度,
<formula>complex formula see original document page 12</formula>
第四步,计算加工圆弧所需的步数n,
艮卩"=[^/5],符号「]表示取大于等于符号中数字的最小整数; 第五歩,计算第i仿真步的位移,
<formula>complex formula see original document page 12</formula>
<formula>complex formula see original document page 12</formula>为圆弧的起始角; <formula>complex formula see original document page 12</formula>
上述步骤得到的是NC代码的刀位数据,刀位数据是在相应时间片里刀具在各坐
标上的位移;把刀位数据写入刀位文件,此文件用来驱动虚拟加工和加工仿真过程。
本发明通用数控代码解析方法的子程序处理流程的步骤如下
第一步,记录主程序当前程序段位置,将主程序当前程序段位置指针压入调用堆 栈,主程序是相对于子程序而言的,当NC代码中有子程序时,与子程序相对的NC代 码的主体部分称为主程序;调用堆栈是一个堆栈数据结构,用于存贮调用处的地址指
针及调用次数N,对于主程序,调用次数N无意义,设计此数据结构方便了子程序嵌套 调用的处理;
第二步,记录子程序调用次数N,从程序调用语句得到子程序的调用次数,将其赋 给子程序调用次数N;子程序的调用可能是多次,设置此变量用以控制对子程序的处理 次数;
第三步,判断调用次数N,如果调用次数N等于O,从调用堆栈弹出上一级程序调 用位置及调用次数N,判断是否主程序;
第四步,初始化当前程序段,搜索子程序开始位置,并将其赋给当前程序段指针; 在主程序和子程序中,当前程序段指针指向的程序段均称为当前程序段;
第五步,判断子程序是否结束,如果子程序结束,将调用次数N减1,进行判断调 用次数N;
第六步,词法、语法分析,同主程序一样,词法分析和语法分析是基于规则数据 库的;其中,语法分析要先建立与语法规则相对应的正则表达式,再由正则表达式匹 配程序段;如果发生词法或语法错误,将程序段的行号及错误类型记录入错误链表, 并将错误标志置为1;
第七步,判断程序段是否子程序调用,如果程序段是子程序调用,将当前程序段 位置指针及调用次数N压入调用堆栈,进行记录子程序调用次数N;
第八歩,判断错误标志,如果错误标志为0,将程序段解析为刀位数据,代码解析 基于规则数据库的G代码表和M代码表进行,采用时间片离散方法,NC代码解析后得 到若干个刀位数据,刀位数据是在相应时间片里刀具在各坐标上的位移;把刀位数据 写入刀位文件,用来驱动虚拟加工和加工仿真过程;
第九步,更新当前程序段,将当前程序段指针指向下一个程序段,即将下一个程 序段设置为当前程序段,判断子程序是否结束;
第十步,判断是否主程序,如果是主程序,退出子程序处理歩骤;否则,更新当 前程序段。
本发明与现有的技术相比,其显著的优点为基于NC规则数据库,并提供数控 系统定制方法,使本发明具有通用性和开放性;基于正则表达式对NC代码进行语法
检查,实现简单,效率高;基于时间片离散方法进行代码解析,生成刀位文件,用以 驱动加工仿真过程;提出了子程序的处理方法,适用于处理子程序嵌套调用等复杂情 形。实践表明,该解析器可以精确地对常用数控系统NC代码进行词法、语法检错; 解析NC代码生成刀位文件,用以驱动虚拟加工的可视化仿真过程;灵活地进行定制, 实现对解析器的功能扩展,取得了良好的效果。


图1是本发明通用数控代码解析方法的流程图。 图2是本发明通用数控代码解析方法的规则数据库表结构。 图3是本发明通用数控代码解析方法的圆弧插补原理图。 图4是本发明通用数控代码解析方法的子程序处理流程图。

具体实施例方式
下面结合附图对本发明作进一步详细描述。
(一) 一种通用的NC代码解析方法,如图1所示,依次进行以下步骤-第一歩,査询规则数据库;规则数据库用以存贮数控系统的编程规则,它包括机 床信息表,NC规则表,自定义数据类型表,子程序规则表,未定义字符表,G代码表,
M代码表及程序号规则表;如果机床信息表中没有所要处理的特定数控系统型号,进
行数控系统定制,数控系统定制提供一个步骤,使得用户可以在规则数据库中加入该
特定数控系统的编程规则,扩展本发明的功能;
第二歩,NC代码导入;把NC代码从磁盘文件读入计算机内存中,以链表的形式存 贮,每一个程序段是链表的一个结点;程序段是NC代码的一行语句,由一个或多个程 序字组成,程序字通常由地址符(定义了一定功能的字母或符号)及其后面的数字和 符号组成;建立当前程序段指针,使其指向链表的第一个结点,即NC代码的第一个程 序段;当前程序段指针指向的程序段称为当前程序段;
第三步,词法分析;词法分析检查程序段中是否有不合法字符,对于每一个程序 段中的字符,检査其是否包含在未定义字符表中;如果字符包含在未定义字符表中, 即发生词法错误,将错误类型及错误位置记录在错误链表中,此处错误类型为非法字 符,错误位置为程序段的行号,将错误标志置为l;错误链表是用以记录错误的数据结构,每一个错误是链表中的一个结点;错误标志是个布尔型变量,其初始值为0,表示 NC代码无错误,当其值为1时,表示NC代码有错误;
第四歩,语法分析;语法分析检查当前程序段是否符合语法规则,语法规则包括 开始符和结束符规则,程序号规则,程序段规则,子程序调用规则;基于规则数据库 的NC规则表,自定义数据类型表,子程序规则表,程序号规则表,建立与当前程序段 相对应的正则表达式;用正则表达式匹配当前程序段,如果不成功,即发生语法错误, 将错误的类型和位置记录入错误链表中,错误类型与所违背的语法规则相对应,错误 位置为程序段的行号,将错误标志置为l;判断错误标志的值,如果其为l,更新当前 程序段;
第五歩,判断当前程序段是否子程序调用;查询规则数据库的子程序调用规则表, 如果程序段的地址符与子程序调用规则表的标识字符相同,当前程序段是否子程序调 用,进行NC子程序处理流程;首先需要搜索子程序的位置,然后跳转到子程序进行检 错、解析处理,子程序处理完毕返回后,更新当前程序段;
第六步,代码解析;代码解析基于规则数据库的G代码表和M代码表进行,G代码 表存贮G代码的功能描述信息,M代码表存贮M代码的功能描述信息;根据G代码和M 代码的功能描述,按时间片离散方法对NC代码进行解析,时间片离散方法是根据固定 的时间间隔,把刀具的轨迹离散成微小的直线段的一种解析方法;NC代码解析后得到 若干刀位数据,刀位数据是在相应时间片里刀具在各坐标上的位移;把刀位数据写入 刀位文件,此文件用来驱动虚拟加工和加工仿真过程;
第七歩,更新当前程序段;如果代码链表的下一个结点,即下一个程序段不是程 序结束符,将当前程序段指针指向下一个程序段,进行词法分析。
对于以上步骤,需要说明的是,如果在词法、语法分析中有错,在以后的处理中, 就不再对NC代码进行解析,只对NC代码进行分析并生成错误报告。之后,用户根据 错误报告对NC代码进行编辑修正。然后再次进行分析检错,重复这个过程直到代码中 没有错误为止,没有词法、语法错误的NC代码可以导出到存贮器,替代原文件。
(二)本发明的规则数据库用于存贮不同数控系统的编程规则。 一般NC代码主要 由程序开始符、程序号、程序体、程序结束符等组成。程序号是程序的编号,数控系
统据以区别存储器中不同的数控程序。程序体包含数控程序的具体内容,由多个程序
段组成。程序段是由一个或多个程序字按一定顺序构成。程序字是数控指令,用以描
述加工过程的各种运动特征和操作。程序字通常由地址符(定义了一定功能的字母或
符号)及其后面的数字和符号组成。典型的程序字包括各种准备功能的G代码和辅助
功能的M代码。功能复杂的NC代码可能包含主程序和子程序。子程序也是由程序号和
程序体组成。子程序由主程序调用,其自身也可以嵌套调用子程序。
在对数控系统编程规则分析的基础上,我们设计规则数据库表结构如图2所示,
以支持对不同数控系统NC代码的检错和解析。其中,未定义字符表用于词法分析,对
NC代码中的字符的合法性进行检验。NC规则表定义了 NC代码的语法规则,程序字中
地址符后数字的类型在自定义数据类型表中规定。程序号规则表和子程序规则表分别
存贮程序号规则及子程序调用规则。M代码表和G代码表用于进一步定义这些功能代码
中的可用数字,并与其功能相对应。
机床信息表由机床名称,生产厂商,加工方式,数控型号四个字段组成。机床名
称是主键,数控型号是外键。
NC规则表由数控型号,程序开始符,程序结束符,G代码的数据类型ID, M代码 的数据类型ID, T代码的数据类型ID, D代码的数据类型ID, S代码的数据类型ID, F 代码的数据类型ID, P代码的数据类型ID,尺寸字代码的数据类型ID, L代码的数据 类型ID及地址符序列13个字段组成。数控型号是主键。
自定义数据类型表由数据类型ID,数据最小值,数据最大值,整数位数,小数位 数,是否需要输出0,及正数前是否有+号共计7个字段组成。数据类型ID为主键。
子程序规则表由数控型号,最大调用次数,标识字符3个字段组成。数控型号为 主键。
未定义字符表由数控型号,未定义字母数字,未定义符号3个字段组成。数控型 号为主键。
G代码表和M代码表都是由数控型号,代码数字,功能描述3个字段组成。数控型 号和代码数字是主键。
程序号规则表由数控型号,标识字符,数字还是范围,具体位数,最小位数及最
大位数6个字段组成。其中数控型号是主键。
(三)由于数控系统种类繁多, 一个NC解析器不可能也没必要穷尽所有这些数控 系统,它只需对常用的系统提供检错和解析功能。当解析器不能满足用户需要时,用 户通过定制,实现对系统的功能扩展。
NC系统定制的实质是在规则数据库中建立与新数控系统相对应的规则的过程,即 在用户和规则数据库间提供一个友好易用的人机交互界面,使普通用户在提示信息帮 助下,方便、快捷地建立新数控系统的规则。在定制模块中,用户填写的内容自动进 行合法性检验。如果不合乎规范,系统会提示用户重新填写。我们分三个步骤建立数 控系统规则-
第一步,设定程序号规则、部分程序段规则和子程序调用规则;用户输入的项目 与规则数据库中的相应数据表记录对应;机床信息设定包括机床名称,生产厂商,数 控型号及加工方式;未定义字符设置包括非法字母数字和非法符号;NC规则设定包括 程序开始符、结束符,程序段结束符及地址符序列;程序号规则有两种, 一种是字母 或符号加数字, 一种是字母加数字加",需要在两者间选择一个,其它的设定还包 括标识字符,位数值、最小位数和最大位数,其中标识字符即是上述程序号规则中的 字母;子程序调用规则主要有两种,其一为字母(一般是字母P)加调用次数再加程序 号,其二为字母(一般是字母P)加程序号加L加调用次数,需要在二者中选择一个, 其它的设定还有最大调用次数和标识字符;
第二步,设定地址符后数字的数据类型。通过一个树形视图,列出所有地址符。 从中选择一个地址符,设置其后面数字的类型。已定义的数据类型通过读取规则数据 库的自定义数据类型表的数据类型ID的值在下拉列表框列出,用户可以从中选择一个 作为地址符的数据类型。若现有数据类型不能满足要求,则需建立新的数据类型,即 设定数据类型ID,数据最小值,数据最大值,整数位数,小数位数,是否需要输出0, 及正数前是否有+号;设定的数据类型存贮到规则数据库的自定义数据类型表中;
第三步,设定G代码、M代码同功能描述之间对应关系。对于常用的功能,由对话
框列出其功能描述,用户在其后添加对应的功能代码完成设置;对于其它特殊的功能 描述,则需要用户同时输入功能描述及其对应的功能代码来作设置;设置的信息存贮
到规则数据库的G代码表和M代码表中。
(四) 词法分析
词法分析检査NC代码中是否使用了非法字符。不同类型数控系统所使用的字符有 所不同。我们对所有数控系统所用字符取并集,作为目标集合,总结如下-<字母> ::=A Z
〈数字> ::=0| 1| 2| 3| 4| 5| 6| 8| 9|
〈符号> ::=+ I - I ; I 1| : | 〈 | > |%i (|) | = | /1. | #| LF| ER | SP| DEL! EM | 由于不合法字符相对较少,对于特定数控系统,我们在数据库中存储其非法字符 集。词法分析过程在将NC代码读入内存的过程中进行,依次判断各个字符的合法性(如 果是非法字符,在错误列表中存贮其行号和错误类型)。此外,词法分析过程还滤掉空 格与注释行,为后续的语法分析作准备。
(五) 语法分析
语法分析的任务是按照语法规则对NC代码进行语言检査。NC代码的不同组成部分 对应不同的规则,主要是程序段规则。子程序调用规则作为一种特殊的程序段规则单 独作处理。此外还有程序号规则,NC代码开始符和结束符规则等。
正则表达式(regular e邓ression)是由普通字符以及元字符组成的文字模式, 它将某个字符模式与所搜索的字符串进行匹配,可以用来检查一个串是否含有某种子 串、将匹配的子串作替换或者从某个串中取出符合某个条件的子串等。由于正则表达 式具有使用灵活、功能强大、耗费资源小、效率高等优点,我们选用正则表达式进行 语法规则的检査。
如前所述,我们将不同数控系统的相关规则存贮在数据库表中。而在语法分析时, 我们实际使用正则表达式进行规则匹配。因此,在进行语法分析时,需要根据数据库 中的记录动态建立相应的语法规则。对于NC代码开始符规则和结束符规则的建立,因 其较简单,不再详述。下面讨论其它几种规则的建立方法。
(a)程序号规则
程序号规则有两种 一种是大写字母或符号加数字, 一种是大写字母加数字加"-"。 以第一种程序号规则为例。正则表达式"0\\d{4}"匹配字母0加4位数字的程序号,式中的字母0和数字4由数据库中读出。 (b)程序段规则
程序段规则的建立相对来说比较复杂,需考虑程序段中的合法地址符及顺序、地 址符后数字的有效性等因素。基于数据库中NC规则表和自定义数据类型表,程序段规 则建立的步骤如下-
第一步,读取地址符序列;从规则数据库的NC规则表读出地址符序列,存贮在一 个字符串变量中;
第二步,建立当前字符指针;将当前字符指针指向地址符序列第一个字符,当前 字符指针指向的地址符称为当前地址符;
第三步,建立正则表达式;对于当前地址符,从NC规则表中查询其后面数字的数 据类型ID,再根据数据类型ID在自定义数据类型表中査询关于此数字的具体规定,包 括数据最小值,数据最大值,整数位数,小数位数,是否需要输出0,及正数前是否有 +号;根据査询结果,建立对应于此地址符的正则表达式并加入程序段的正则表达式;
第四歩,更新当前地址符;将当前字符指针指向地址符序列的下一个字符,使其 成为当前地址符;
第五步,判断当前地址符是否地址符序列的最后一个字符;如果当前地址符不是 地址符序列的最后一个字符,建立正则表达式;否则,把该地址符加入程序段正则表 达式。
(c)子程序调用规则
子程序调用规则主要有两种,其一为特定大写字母(一般是p)加调用次数再加程
序号,其二为特定大写字母(一般是P)加程序号加L加调用次数。这些信息存忙在子 程序规则表中。子程序调用正则表达式建立较简单。例如指定字母为P,调用次数最大 为99,子程序号为00101。则对于第一种规则,正则表达式为"P\\d{6}",而对于第 二种,正则表达式为"P\\d{4}L\\d{2}"。
建立语法规则后,即可进行语法分析。在内存中,NC代码是以链表的形式存贮的,
每一行对应链表的一个结点。语法分析步骤如下所示
(1)建立当前程序段指针;将当前程序段指针指向内存中程序段链表的第一个结
点,即NC代码第一个程序段,当前程序段指针指向的程序段称为当前程序段;
(2) 正则表达式匹配;用相应正则表达式匹配当前程序段,如果匹配不成功,即 发生语法错误,将程序段行号及错误类型记录入错误链表,并将错误标志置为l;
(3) 程序字分析;依次读取当前程序段的各程序字,如果是G代码或M代码,查 询其在G代码表或M代码表中是否有相应的记录,如果无记录,则发生语法错误,将 程序段的行号及错误类型记录入错误链表,并将错误标志置为l;如果是N代码,判断 代码后的数字是否大于上一个程序段N代码后的数字,如果不大于,则发生语法错误, 将程序段的行号及错误类型记录入错误链表,并将错误标志置为1;
(4) 更新当前程序段;如果当前程序段不是链表尾,将当前程序段指针指向链表 的下一个结点,即将下一个程序段设为当前程序段,进行正则表达式匹配。
从上述步骤可以看出,在语法检查时,除进行正则表达式的匹配外,还对G代码 和M代码作了特殊的处理。这是因为对于G代码和M代码,即使其符合规则要求,但
若在数控系统中没有定义,仍不能为数控机床控制器所识别,也属于语法错误之列。
此外,对于有N地址符的情况,还要判断其段号是否递增。
(六)代码解析是通用NC代码解析器一个重要的功能,用以生成虚拟加工系统可 以识别的刀位文件。刀位文件是刀具在六个坐标上的位移,它进一步驱动虚拟机床的 加工操作,将工件的加工过程以可视化的方式展示出来,以此达到全面验证NC代码正 确性的目的。NC代码对机床状态和操作的控制主要由G代码和M代码实现,不同数控 系统的G代码和M代码与功能对应关系并不相同,我们将此信息存贮在G代码表和M 代码表中。代码解析时,根据对这两个表的查询结果进行解析。
刀位文件数据通过对程序字分析处理得到,程序字描述了刀具的运动方式和起、 终点位置坐标等信息,而刀位文件数据(实际驱动机床数据)却是刀具在六个坐标上 的位移。换言之,驱动机床的数据只能是直线运动的数据。为此,要对刀具运动进行 插补,用多段微小的直线段代替实际的刀具轨迹。
可视化加工仿真过程由计算机动画实现,即以一定的速率一帧帧渲染仿真的场景。 因为人的眼睛有视觉暂留的特性,于是用户就可以观察到"连续"的加工仿真过程。 为此,我们采用时间片离散方法对刀具轨迹进行插补,时间片定为动画仿真中显示一帧场景的时间。这样,刀位文件中每一仿真步的数据就是在相应时间片里刀具在各坐 标上的位移。术语"仿真步"指与时间片相对应的仿真步骤。
直线插补较为简单,按进给速度和时间片长度即可计算出每一仿真步刀具的位移。 圆弧插补相对比较复杂。在NC代码中,圆心坐标和半径二者一般只给出一个。因此, 首先需要由圆心坐标计算出半径,或由半径计算出圆心坐标。在此基础上,进一步计 算每个时间片的位移。对于圆弧插补通常有切线逼近和弦线逼近两种插补运算方法。 由于前者会带来较大的误差,我们选用弦线逼近方法。下面以XY平面第一象限为例, 介绍逆时针圆弧插补计算的步骤,如图3所示。XY平面的其它象限,及其它平面的计 算方法与此类似。
第一步,由进给速度v (mm/min)计算在一个时间片T(ms)中刀具的进给量f (mm),
即,<formula>formula see original document page 21</formula>第二步,由f(ram)和圆弧半径R(mm),计算一个时间片T(ms)中刀具进给运动对应 的圆心角S (弧度),
即,<formula>formula see original document page 21</formula>
第三步,根据圆弧起点s和终点E的坐标和圆弧半径R(誦),计算圆弧的圆心角e
(弧度),
艮P: ^2腦in^^)2+dXs)2 (A和凡分别是圆弧起点S的横坐
标和纵坐标,1£.和:^分别是圆弧起点s的横坐标和纵坐标); 第四步,计算加工圆弧所需的步数n,
即<formula>formula see original document page 21</formula>(符号「]表示取大于等于符号中数字的最小整数); 第五步,计算第i仿真步的位移,
即,<formula>formula see original document page 21</formula>("为圆弧的起始角);
上述步骤得到的是NC代码的刀位数据,刀位数据是在相应时间片里刀具在各坐标
上的位移;把刀位数据写入刀位文件,此文件即可用来驱动虚拟加工和加工仿真过程。
(七)子程序是NC代码的重要组成部分,通过子程序的使用,简化了NC代码的 编程工作,提高了效率。子程序同主程序一样,在内存中也是以链表形式存放,这种 数据结构方便了对子程序的位置搜索。在遇到子程序调用时,流程转入子程序处理流 程。首先需要搜索子程序的位置,然后跳转到子程序进行检错、解析处理,待子程序 处理完毕返回,再接着进行原代码的处理直到结束。子程序中也可能嵌套子程序,其 处理和主程序对子程序的调用相类似。
由主程序调用子程序,需要存贮主程序的调用位置,以便在返回时继续主程序的 处理。子程序可能被多次调用,因此设置了一个指示调用次数的变量N。 N的初值是调 用语句指定的子程序调用次数。子程序每次被处理,N自减l。当N等于0时,子程序 处理完毕返回上一级调用程序段。对于子程序嵌套调用子程序,除了要存贮调用位置, 还要存贮子程序的调用次数N。
为了方便子程序调用的处理,程序设计一个堆栈数据结构,用于存贮调用处的地 址指针及调用次数N,称为调用堆栈。需要指出,调用次数N仅在调用程序是子程序时 有意义。每次子程序调用时,将调用处地址指针及调用次数N压入调用堆栈中。子程 序处理结束后,将调用堆栈中数据弹出,恢复调用现场。如果其上一级代码为子程序, 则继续留在子程序处理流程;否则,退出并返回NC代码(主程序)处理流程。
子程序处理流程如图4所示,其计算步骤如下
第一步,记录主程序当前程序段位置;将主程序当前程序段位置指针压入调用堆
栈,主程序是相对于子程序而言的,当NC代码中有子程序时,与子程序相对的NC代
码的主体部分称为主程序;调用堆栈是一个堆栈数据结构,用于存C调用处的地址指 针及调用次数N,对于主程序,调用次数N无意义,设计此数据结构方便了子程序嵌套 调用的处理;
第二步,记录子程序调用次数N;从程序调用语句得到子程序的调用次数,将其赋 给子程序调用次数N;子程序的调用可能是多次,设置此变量用以控制对子程序的处理 次数;
第三步,判断调用次数N;如果调用次数N等于O,从调用堆栈弹出上一级程序调用位置及调用次数N,判断是否主程序。
第四步,初始化当前程序段;搜索子程序开始位置,并将其赋给当前程序段指针; 在主程序和子程序中,当前程序段指针指向的程序段均称为当前程序段;
第五步,判断子程序是否结束;如果子程序结束,将调用次数N减1,进行判断调 用次数N;
第六步,词法、语法分析;同主程序一样,词法分析和语法分析是基于规则数据 库的;其中,语法分析要先建立与语法规则相对应的正则表达式,再由正则表达式匹 配程序段;如果发生词法或语法错误,将程序段的行号及错误类型记录入错误链表, 并将错误标志置为1;
第七歩,判断程序段是否子程序调用;如果程序段是子程序调用,将当前程序段 位置指针及调用次数N压入调用堆栈,进行记录子程序调用次数N;
第八步,判断错误标志;如果错误标志为0,将程序段解析为刀位数据,代码解析 基于规则数据库的G代码表和M代码表进行,采用时间片离散方法,NC代码解析后得 到若干个刀位数据,刀位数据是在相应时间片里刀具在各坐标上的位移;把刀位数据 写入刀位文件,用来驱动虚拟加工和加工仿真过程;
第九步,更新当前程序段;将当前程序段指针指向下一个程序段,即将下一个程 序段设置为当前程序段,判断子程序是否结束;
第十步,判断是否主程序;如果是主程序,退出子程序处理步骤;否则,更新当 前程序段。
权利要求
1. 一种通用数控代码解析方法,其特征在于包括以下步骤第一步,查询规则数据库,即规则数据库用以存贮数控系统的编程规则,该规则数据库包括机床信息表、NC规则表、自定义数据类型表、子程序规则表、未定义字符表、G代码表、M代码表及程序号规则表;如果机床信息表中没有所要处理的特定数控系统型号,进行数控系统定制,数控系统定制使得用户在规则数据库中加入该特定数控系统的编程规则,以扩展功能;第二步,NC代码导入,即把NC代码从磁盘文件读入计算机内存中,以链表的形式存贮,每一个程序段是链表的一个结点;程序段是NC代码的一行语句,由一个或多个程序字组成,程序字通常由地址符及其后面的数字和符号组成;建立当前程序段指针,使其指向链表的第一个结点,即NC代码的第一个程序段;当前程序段指针指向的程序段称为当前程序段;第三步,词法分析,即词法分析检查程序段中是否有不合法字符,对于每一个程序段中的字符,检查其是否包含在未定义字符表中;如果字符包含在未定义字符表中,即发生词法错误,将错误类型及错误位置记录在错误链表中,此处错误类型为非法字符,错误位置为程序段的行号,将错误标志置为1;错误链表是用以记录错误的数据结构,每一个错误是链表中的一个结点;错误标志是个布尔型变量,其初始值为0,表示NC代码无错误,当其值为1时,表示NC代码有错误;第四步,语法分析,即语法分析检查当前程序段是否符合语法规则,语法规则包括开始符和结束符规则,程序号规则,程序段规则,子程序调用规则;基于规则数据库的NC规则表,自定义数据类型表,子程序规则表,程序号规则表,建立与当前程序段相对应的正则表达式;用正则表达式匹配当前程序段,如果不成功,即发生语法错误,将错误的类型和位置记录入错误链表中,错误类型与所违背的语法规则相对应,错误位置为程序段的行号,将错误标志置为1;判断错误标志的值,如果其为1,更新当前程序段;第五步,判断当前程序段是否子程序调用,查询规则数据库的子程序调用规则表,如果程序段的地址符与子程序调用规则表的标识字符相同,当前程序段是否子程序调用,进行NC子程序处理流程;首先需要搜索子程序的位置,然后跳转到子程序进行检错、解析处理,子程序处理完毕返回后,更新当前程序段;第六步,代码解析;代码解析基于规则数据库的G代码表和M代码表进行,G代码表存贮G代码的功能描述信息,M代码表存贮M代码的功能描述信息;根据G代码和M代码的功能描述,按时间片离散方法对NC代码进行解析;该时间片离散方法是根据固定的时间间隔,把刀具的轨迹离散成微小的直线段的一种解析方法;NC代码解析后得到若干刀位数据,刀位数据是在相应时间片里刀具在各坐标上的位移;把刀位数据写入刀位文件,此文件用来驱动虚拟加工和加工仿真过程;第七步,更新当前程序段,如果代码链表的下一个结点,即下一个程序段不是程序结束符,将当前程序段指针指向下一个程序段,进行词法分析。
2、根据权利要求1所述的通用数控代码解析方法,其特征在于数控系统定制是以下三个步骤来建立数控系统规则第一步,设定程序号规则、部分程序段规则和子程序调用规则;用户输入的项目 与规则数据库中的相应数据表记录对应;机床信息设定包括机床名称、生产厂商、数 控型号及加工方式;未定义字符设置包括非法字母数字和非法符号;NC规则设定包括 程序开始符、结束符,程序段结束符及地址符序列;程序号规则有两种, 一种是字母 或符号加数字, 一种是字母加数字加",需要在两者间选择一个,其它的设定还包 括标识字符、位数值、最小位数和最大位数,其中标识字符即是上述程序号规则中的 字母;子程序调用规则主要有两种,其一为字母加调用次数再加程序号,其二为字母 加程序号加L加调用次数,需要在二者中选择一个,其它的设定还有最大调用次数和 标识字符;第二步,设定地址符后数字的数据类型,通过一个树形视图,列出所有地址符, 从中选择一个地址符,设置其后面数字的类型;已定义的数据类型通过读取规则数据 库的自定义数据类型表的数据类型ID的值在下拉列表框列出,用户从中选择一个作为 地址符的数据类型;若现有数据类型不能满足要求,则需建立新的数据类型,即设定 数据类型ID、数据最小值、数据最大值、整数位数、小数位数,是否需要输出0,及正数前是否有+号;设定的数据类型存贮到规则数据库的自定义数据类型表中;第三步,设定G代码、M代码同功能描述之间对应关系,即对于常用的功能,由对 话框列出其功能描述,用户在其后添加对应的功能代码完成设置;对于其他特殊的功 能描述,则需要用户同时输入功能描述及其对应的功能代码来作设置;设置的信息存贮到规则数据库的G代码表和M代码表中。
3、根据权利要求1所述的通用数控代码解析方法,其特征在于由正则表达式描 述语法规则并进行NC代码语法分析,其步骤如下,第一步,建立与语法规则对应正则表达式,语法规则包括开始符和结束符规则、 程序号规则、程序段规则、子程序调用规则;其中程序段规则建立步骤如下(1) 读取地址符序列,从规则数据库的NC规则表读出地址符序列,存贮在一个字 符串变量中;(2) 建立当前字符指针,将当前字符指针指向地址符序列第一个字符,当前字符指 针指向的地址符称为当前地址符;(3) 建立正则表达式,对于当前地址符,从NC规则表中査询其后面数字的数据类 型ID,再根据数据类型ID在自定义数据类型表中査询关于此数字的具体规定,包括 数据最小值、数据最大值、整数位数、小数位数,是否需要输出0,及正数前是否有+ 号;根据査询结果,建立对应于此地址符的正则表达式并加入程序段的正则表达式;(4) 更新当前地址符,将当前字符指针指向地址符序列的下一个字符,使其成为当 前地址符;(5) 判断当前地址符是否地址符序列的最后一个字符,如果当前地址符不是地址符 序列的最后一个字符,建立正则表达式;否则,把该地址符加入程序段正则表达式;第二步,在建立正则表达式的基础上,进行语法分析歩骤如下所示(1) 建立当前程序段指针,将当前程序段指针指向内存中程序段链表的第一个结 点,即NC代码第一个程序段,当前程序段指针指向的程序段称为当前程序段;(2) 正则表达式匹配,用相应正则表达式匹配当前程序段,如果匹配不成功,即发 生语法错误,将程序段行号及错误类型记录入错误链表,并将错误标志置为l;(3) 程序字分析,依次读取当前程序段的各程序字,如果是G代码或M代码,査 询其在G代码表或M代码表中是否有相应的记录,如果无记录,则发生语法错误,将 程序段的行号及错误类型记录入错误链表,并将错误标志置为l;如果是N代码,判 断代码后的数字是否大于上一个程序段N代码后的数字,如果不大于,则发生语法错 误,将程序段的行号及错误类型记录入错误链表,并将错误标志置为h(4) 更新当前程序段,如果当前程序段不是链表尾,将当前程序段指针指向链表的 下一个结点,即将下一个程序段设为当前程序段,进行正则表达式匹配。
4、根据权利要求1所述的通用数控代码解析方法,其特征在于采用时间片离散方法对刀具轨迹进行插补,时间片定为动画仿真中显示一帧场景的时间,圆弧插补采用弦线逼近方法,即以XY平面第一象限,其计算步骤如下-第一步,由进给速度vmm/min计算在一个时间片Tms中刀具的进给量fmm,即<formula>see original document page 5</formula> 第二步,由fmm和圆弧半径Rmm,计算一个时间片Tms中刀具进给运动对应的圆心角S弧度,即<formula>see original document page 5</formula>第三步,根据圆弧起点S和终点E的坐标和圆弧半径Rmm,计算圆弧的圆心角6 弧度,即<formula>see original document page 5</formula>; 第四步,计算加工圆弧所需的步数n,即"=「0/5,,符号「,表示取大于等于符号中数字的最小整数; 第五步,计算第i仿真步的位移,即<formula>see original document page 5</formula α为圆弧的起始角;上述步骤得到的是NC代码的刀位数据,刀位数据是在相应时间片里刀具在各坐标上的位移;把刀位数据写入刀位文件,此文件用来驱动虚拟加工和加工仿真过程。
5、根据权利要求1所述的通用数控代码解析方法,其特征在于子程序处理流程 的步骤如下第一步,记录主程序当前程序段位置,将主程序当前程序段位置指针压入调用堆 栈,主程序是相对于子程序而言的,当NC代码中有子程序时,与子程序相对的NC代 码的主体部分称为主程序;调用堆栈是一个堆栈数据结构,用于存贮调用处的地址指 针及调用次数N,对于主程序,调用次数N无意义,设计此数据结构方便了子程序嵌套 调用的处理;第二步,记录子程序调用次数N,从程序调用语句得到子程序的调用次数,将其赋 给子程序调用次数N;子程序的调用可能是多次,设置此变量用以控制对子程序的处理 次数;第三步,判断调用次数N,如果调用次数N等于O,从调用堆栈弹出上一级程序调 用位置及调用次数N,判断是否主程序;第四步,初始化当前程序段,搜索子程序开始位置,并将其赋给当前程序段指针; 在主程序和子程序中,当前程序段指针指向的程序段均称为当前程序段;第五歩,判断子程序是否结束,如果子程序结束,将调用次数N减1,进行判断调 用次数N;第六步,词法、语法分析,同主程序一样,词法分析和语法分析是基于规则数据 库的;其中,语法分析要先建立与语法规则相对应的正则表达式,再由正则表达式匹 配程序段;如果发生词法或语法错误,将程序段的行号及错误类型记录入错误链表, 并将错误标志置为1;第七步,判断程序段是否子程序调用,如果程序段是子程序调用,将当前程序段 位置指针及调用次数N压入调用堆栈,进行记录子程序调用次数N;第八歩,判断错误标志,如果错误标志为0,将程序段解析为刀位数据,代码解析 基于规则数据库的G代码表和M代码表进行,采用时间片离散方法,NC代码解析后得 到若干个刀位数据,刀位数据是在相应时间片里刀具在各坐标上的位移;把刀位数据写入刀位文件,用来驱动虚拟加工和加工仿真过程;第九步,更新当前程序段,将当前程序段指针指向下一个程序段,即将下一个程 序段设置为当前程序段,判断子程序是否结束;第十步,判断是否主程序,如果是主程序,退出子程序处理步骤;否则,更新当 前程序段。
全文摘要
本发明公开了一种通用数控代码解析方法。它涉及NC代码的检错、解析方法,并提供定制手段,用以拓展基于此方法的解析器的功能。基于规则数据库,对NC代码进行词法、语法分析。如果有错,解析器会出错误报告,指示出错误的类型和位置。用户对NC代码进行修改,然后再进行检错,重复这个过程直到代码中没有错误为止。采用时间片离散方法对NC代码进行解析,生成刀位文件,用以驱动虚拟加工过程。对于系统不支持的数控系统,用户通过定制界面分三个步骤在规则数据库中增加新系统的规则。此方法具有通用性和开放性,可拓宽虚拟加工系统和加工仿真软件的应用领域,进而增强企业在市场中的竞争力。
文档编号G05B19/18GK101206467SQ20061016133
公开日2008年6月25日 申请日期2006年12月22日 优先权日2006年12月22日
发明者佳 刘, 刘婷婷, 张友良, 徐建国, 汪惠芬 申请人:南京理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1