CN104281096B - 数控代码编译器的构造方法 - Google Patents
数控代码编译器的构造方法 Download PDFInfo
- Publication number
- CN104281096B CN104281096B CN201310284869.9A CN201310284869A CN104281096B CN 104281096 B CN104281096 B CN 104281096B CN 201310284869 A CN201310284869 A CN 201310284869A CN 104281096 B CN104281096 B CN 104281096B
- Authority
- CN
- China
- Prior art keywords
- code
- numerical control
- program
- compiler
- intermediate language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/18—Numerical control [NC], i.e. automatically operating machines, in particular machine tools, e.g. in a manufacturing environment, so as to execute positioning, movement or co-ordinated operations by means of programme data in numerical form
- G05B19/4093—Numerical control [NC], i.e. automatically operating machines, in particular machine tools, e.g. in a manufacturing environment, so as to execute positioning, movement or co-ordinated operations by means of programme data in numerical form characterised by part programming, e.g. entry of geometrical information as taken from a technical drawing, combining this with machining and material information to obtain control information, named part programme, for the NC machine
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Geometry (AREA)
- Human Computer Interaction (AREA)
- Manufacturing & Machinery (AREA)
- General Physics & Mathematics (AREA)
- Automation & Control Theory (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种数控代码编译器的构造方法,包括以下步骤:定义数控指令的中间语言格式;根据G代码、M代码格式,制定对应数控指令的词法规则和语法规则;编写数控代码编译器框架程序,编译G代码、M代码生成中间语言,将中间语言保存到目标文件中。本发明通过采用中间语言和ANTLR语言识别工具,数控代码一次编译可以多次使用,减少了程序运行时的计算工作量;在程序实际执行前完成编译,可以提前发现代码中的错误,避免了程序执行过程中发现错误造成的零件报销;通过定义语法规则、词法规则文件,可自动生成语法分析算法、词法分析算法,不需要开发人员编写;对于不同的代码规则,只需要修改规则文件,重新编译即可。
Description
技术领域
本发明涉及一种代码编译方法,具体地说,涉及一种编译器的构造方法。
背景技术
目前,数控机床通过执行数控代码完成对零件的加工,用户利用G代码、M代码控制机床的运动,执行辅助操作。数控内核程序无法直接读取数控代码对零件进行加工,必须先由预处理程序模块对零件加工程序进行预处理和译码转化为相应的加工指令,让数控系统进行零件的加工,这一部分通常叫做数控代码编译器。数控代码编译器作为数控系统核心模块之一,需要处理大量的数据,其运行效率直接影响整个系统运行的稳定性。
常用的数据预处理方法有两种:解释方法和编译方法。解释方法对零件加工程序逐条进行译码,在插补中断的同时,解释程序预先解释下一条程序,等本条程序插补完成后,再将下一条预先解释好的程序的结果放到插补模块中。如果对一个程序段的解释过程较慢而使机床具有一定的等待时间,那么加工出来的工件就会出现明显的粗糙度,且加工效率低,不易处理各程序段间的转接,易形成加工停顿与过切,程序在中间部分出现的错误将使尚未加工完成的零件报废。编译方法预先对要加工的零件加工程序全部编译,将结果放入缓冲区中,当开始加工时,直接启动插补程序,从缓冲区中取出编译好的零件程序,进行计算并控制程序加工。但是,这种加工方法需要较大的内存。
现有的数控系统,加工程序每次执行都需要重新编译,增加数控系统运行时的计算工作量;代码程序较大时,需要较大内存,影响数控系统的总体性能;程序执行时才会发现代码中的错误,对模具加工程序、雕刻程序等大型数控程序,执行过程中才发现错误会造成零件报销;不同的数控系统使用的数控代码规则不是完全相同,在不同的数控系统中需要重复编写语法分析算法、词法分析算法。
发明内容
本发明的目的在于提供一种数控代码编译器的构造方法,采用中间语言和ANTLR语言识别工具,实现数控代码的一次编译多次使用,减少运行时的计算工作量;在程序执行前发现数控代码中的错误,避免了程序执行过程中发现错误造成的零件报销。
为了实现上述目的,本发明所采用的技术方案如下:
一种数控代码编译器的构造方法,包括以下步骤:定义数控指令的中间语言格式;根据G代码、M代码格式,制定对应数控指令的词法规则和语法规则;编写数控代码编译器框架程序,编译G代码、M代码生成中间语言,将中间语言保存到目标文件中。
进一步,中间语言采用连续的字节流,通过定义固定数据长度进行分割。
进一步,采用ANTLR语言识别工具。
进一步,ANTLR通过语法描述自动构造自定义语言。
进一步,ANTLR根据用户提供的语法文件自动生成相应的词法分析器、语法分析器和树分析器。
进一步,框架程序调用ANTLR生成的词法分析算法、语法分析算法,编译G代码、M代码生成中间语言。
进一步,ANTLR的词法分析和语法分析用同一个文件说明。
进一步,词法分析时,将G准备字分为两类:一类是无参数的G指令,类型为G_SINGLE的模态指令;另一类是有参数的G指令,类型为G_MULTI的运动指令。
进一步,词法规则中用坐标字(COORD)统一表示坐标的符号,用参数字(PARAM)统一表示参数的符号。
进一步,词法规则中定义数控代码中的数据只处理整数(INTEGER)和浮点数(FLOAT)。
与现有技术相比,本发明通过采用中间语言和ANTLR语言识别工具,数控代码一次编译可以多次使用,减少了程序运行时的计算工作量;在程序实际执行前完成编译,可以提前发现代码中的错误,避免了程序执行过程中发现错误造成的零件报销;通过定义语法规则、词法规则文件,可自动生成语法分析算法、词法分析算法,不需要开发人员编写;对于不同的代码规则,只需要修改规则文件,重新编译即可,不需要重写编写语法分析算法、词法分析算法,能实现在不同的数控系统中的快速应用。
附图说明
图1为本发明的数控代码编译器对数控代码的处理流程示意图。
具体实施方式
下面结合附图和具体实施例对本发明数控代码编译器的构造方法作进一步说明。
本发明公开了一种数控代码编译器的构造方法,包括以下步骤:
首先,根据实际数控系统需求,定义数控指令的中间语言格式。
中间代码是源程序的一种内部表示,或称中间语言。中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现中间代码,即为中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。中间语言有多种形式,常见的有逆波兰记号、四元式、三元式和树。
本发明中间语言采用连续的字节流,通过定义固定数据长度进行分割。中间语言的基本格式为:(N PreG*T?SM?ST?F?U?PreM*MoveG?PostM*)+
其中,各符号含义如下:
*:表示零个或多个。
?:表示零个或一个。
+:表示一个或多个。
N:所在源代码行号。
PreG:为运动指令前执行的G指令,一个块中可以包含零个或多个。
T:为刀具设置指令,通常在运动指令执行前完成,一个块中可以包含零或一个。
SM:为主轴速度设置指令,一个块中可以包含零个或一个。
ST:为刀具速度设置指令,一个块中可以包含零个或一个。
F:为主轴速度设置指令,一个块中可以包含零个或一个。
PreM:为运动指令前或同时执行的M指令,一个块中可以包含零或多个。
MoveG:为运动指令或固定循环,一个块中可以包含零或一个。
PostM:为运动指令完成后执行的M指令,一个块中可以包含零或多个。
下面将具体描述了中间语言的编码格式,如下表1至表5所示。
表1代码N的编码格式
编码 | 数据 | 说明 |
0x4E | 4byte | 源代码行号 |
表2代码G的编码格式
编码 | 数据 | 说明 |
0x10 | 1byte类型 | Group00,类型: |
1byte参数个数 | 0:G04延时 | |
(1byte字8byte值)*n | 1:G53机床坐标系直接编程 | |
2:G92设置工件坐标系 | ||
0x11 | 1byte类型 | Group01,类型: |
1byte参数个数 | 0:G00快速定位 | |
(1byte字8byte值)*n | 1:G01直线插补 | |
2:G02顺时针圆弧插补 |
3:G03逆时针圆弧插补 | ||
0x12 | 1byte类型 | 回参考点,类型: |
1byte参数个数 | 0:G27IP_ | |
(1byte字8byte值)*n | 1:G28IP_ | |
2:G29IP_ | ||
3:G30P IP_ | ||
0x1F | 1nibble分组 | 模式操作 |
1nibble选项 |
表3代码M的编码格式
编码 | 数据 | 说明 |
0x20 | 1nibble分组 | 辅助功能,前置 |
1nibble选项 | ||
0x21 | 1nibble分组 | 辅助功能,后置 |
1nibble选项 |
表4代码S的编码格式
编码 | 数据 | 说明 |
0x53 | 4byte最小单位的倍数 | 设置主轴速度 |
表5代码T的编码格式
编码 | 数据 | 说明 |
0x54 | 1byte刀具号 | 设置刀具编号和刀补编号 |
1byte刀补号 |
G代码、M代码中的字顺序与执行顺序可以不一致,中间语言按程序的执行顺序排列,节省了负责的逻辑判断。通过中间语言,可以在程序执行前就发现代码中的错误,避免了程序执行过程中发现错误造成的零件报销。对于多次执行的数控程序,采用中间语言,编译系统只需要编译一次,即可多次执行,节省了每次编译的过程,减少了程序运行时的计算工作量。
然后,根据G代码、M代码格式,制定对应数控指令的词法规则和语法规则。
本发明中采用ANTLR语言识别工具,ANTLR通过语法描述自动构造自定义语言,ANTLR根据用户提供的语法文件自动生成相应的词法分析器、语法分析器和树分析器。ANTLR的词法分析和语法分析用同一个文件说明,可以很大程度上的减少编译系统的开发。用户只需根据不同的数控代码自定义语法文件,ANTLR会自动生成词法分析算法和语法分析算法供用户调用。此外,如果在语法规则中指定抽象语法树的规则,在生成语法分析器的同时,ANTLR还能够生成抽象语法树;最终使用树分析器遍历抽象语法树,完成语义分析和中间代码生成。
采用ANTLR语言识别工具自动生成语法分析算法、词法分析算法,不需要开发人员编写复杂的语法分析算法、词法分析算法。对于不同的代码规则,只需要修改规则文件,重新编译即可,不需要重写编写语法分析算法、词法分析算法,能实现在不同的数控系统中的快速应用。
本发明中,数控代码的词法规则定义为:
词法规则中用坐标字(COORD)统一X、Y、Z等表示坐标的符号,用参数字(PARAM)表示I、J、K等表示参数的符号。数控代码中的数据只处理整数(INTEGER)和浮点数(FLOAT)。EOB(End Of Block)表示块结束,WS(White Space)表示空白字符,COMMENT表示注释。
在词法分析时,将G准备字分为两类:一类是无参数的G指令,类型为G_SINGLE,例如G90、G91等模态指令;另一类是有参数的G指令,类型为G_MULTI,例如G01、G02等运动指令。
本发明中,数控程序的语法规则定义为:
最后,编写数控代码编译器框架程序,框架程序调用ANTLR生成的词法分析算法、语法分析算法,编译G代码、M代码生成中间语言,将中间语言保存到目标文件中。G代码、M代码通过编译生成的中间语言,可供数控程序的前瞻处理模块、执行模块、图形化显示模块使用。前瞻处理模块、执行模块、图形化显示模块需要调用G代码、M代码信息时,只需打开目标文件,读入中间语言,不需要重新对G代码、M代码进行编译处理。在一次执行过程中,前瞻处理、执行处理和图形化显示可以共享同一编译结果。
请参阅图1,采用本发明的数控代码编译器对数控代码的处理流程如下:
当系统加载一个数控(NC,Numerical Control)程序时,首先,检查是否存在与数控源程序对应的目标文件,如果目标文件已经存在,并且文件的修改日期晚于源文件的修改日期,则加载目标文件;否则,说明源文件在编译之前发生了变动,则依次调用语法解析模块、词法解析模块对数控程序进行编译,如果解析失败,生成错误信息退出程序;如果成功生成中间语言,并将中间语言存入目标文件,退出程序。
本发明的数控代码编译器通过采用中间语言和ANTLR语言识别工具,数控代码一次编译可以多次使用,减少了程序运行时的计算工作量;在程序实际执行前完成编译,可以提前发现代码中的错误,避免了程序执行过程中发现错误造成的零件报销;通过定义语法规则、词法规则文件,可自动生成语法分析算法、词法分析算法,不需要开发人员编写;对于不同的代码规则,只需要修改规则文件,重新编译即可,不需要重写编写语法分析算法、词法分析算法,能实现在不同的数控系统中的快速应用。
以上详细描述了本发明的较佳具体实施例,应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本技术领域中技术人员依本发明构思在现有技术基础上通过逻辑分析、推理或者根据有限的实验可以得到的技术方案,均应该在由本权利要求书所确定的保护范围之中。
Claims (11)
1.一种数控代码编译器对数控代码处理的方法,其特征在于,包括以下步骤:
加载数控代码程序;
检查是否存在与所述数控代码程序对应的目标文件,如果存在,并且该目标文件的修改日期晚于源文件的修改日期,则加载目标文件;否则,则依次对数控代码程序进行编译;
所述对数控代码程序进行编译,具体步骤如下:
依次调用语法解析模块、词法解析模块对所述数控代码程序进行编译,如果通过以上解析模块解析失败,则生成错误信息,并且退出程序;如果解析成功,并且生成中间语言,并将中间语言存入目标文件中,然后退出程序。
2.根据权利要求1所述的数控代码编译器对数控代码处理的方法,其特征在于:
所述解析成功,并且生成中间语言,并将中间语言存入目标文件的步骤,具体如下:
根据实际数控系统需求,定义数控指令的中间语言格式;
根据G代码、M代码格式,制定对应数控指令的词法规则和语法规则;
编写数控代码编译器框架程序,编译G代码、M代码生成中间语言,将中间语言保存到目标文件中;所述中间语言用于供数控程序的前瞻处理模块、执行模块、图形化显示模块使用。
3.如权利要求2所述的数控代码编译器对数控代码处理的方法,其特征在于:中间语言采用连续的字节流,通过定义固定数据长度进行分割。
4.如权利要求2所述的数控代码编译器对数控代码处理的方法,其特征在于:采用ANTLR语言识别工具。
5.如权利要求4所述的数控代码编译器对数控代码处理的方法,其特征在于:ANTLR通过语法描述自动构造自定义语言。
6.如权利要求5所述的数控代码编译器对数控代码处理的方法,其特征在于:ANTLR根据用户提供的语法文件自动生成相应的词法分析器、语法分析器和树分析器。
7.如权利要求6所述的数控代码编译器对数控代码处理的方法,其特征在于:框架程序调用ANTLR生成的词法分析算法、语法分析算法,编译G代码、M代码生成中间语言。
8.如权利要求6所述的数控代码编译器对数控代码处理的方法,其特征在于:ANTLR的词法分析和语法分析用同一个文件说明。
9.如权利要求8所述的数控代码编译器对数控代码处理的方法,其特征在于:词法分析时,将G准备字分为两类:一类是无参数的G指令,类型为G_SINGLE的模态指令;另一类是有参数的G指令,类型为G_MULTI的运动指令。
10.如权利要求2所述的数控代码编译器对数控代码处理的方法,其特征在于:词法规则中用坐标字(COORD)统一表示坐标的符号,用参数字(PARAM)统一表示参数的符号。
11.如权利要求2所述的数控代码编译器对数控代码处理的方法,其特征在于:词法规则中定义数控代码中的数据只处理整数(INTEGER)和浮点数(FLOAT)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310284869.9A CN104281096B (zh) | 2013-07-08 | 2013-07-08 | 数控代码编译器的构造方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310284869.9A CN104281096B (zh) | 2013-07-08 | 2013-07-08 | 数控代码编译器的构造方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104281096A CN104281096A (zh) | 2015-01-14 |
CN104281096B true CN104281096B (zh) | 2017-10-13 |
Family
ID=52256090
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310284869.9A Expired - Fee Related CN104281096B (zh) | 2013-07-08 | 2013-07-08 | 数控代码编译器的构造方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104281096B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224633A (zh) * | 2015-09-24 | 2016-01-06 | 北京锐安科技有限公司 | 基于SQL语言的solr查询方法及装置 |
CN106681275B (zh) * | 2015-11-05 | 2019-04-09 | 中国科学院沈阳计算技术研究所有限公司 | 一种数控加工程序段的前瞻预取方法 |
US10169324B2 (en) | 2016-12-08 | 2019-01-01 | Entit Software Llc | Universal lexical analyzers |
CN109542941A (zh) * | 2018-11-26 | 2019-03-29 | 上海新炬网络技术有限公司 | 基于antlr的实时流式计算方法 |
CN114365095A (zh) * | 2019-11-04 | 2022-04-15 | 码睿科技(北京)有限公司 | 用于评估软件开发者的代码贡献的系统和方法 |
CN111639501A (zh) * | 2020-05-04 | 2020-09-08 | 国网浙江省电力有限公司 | 基于amsl的电网业务微服务组合方法 |
CN111767055A (zh) * | 2020-06-16 | 2020-10-13 | 合肥本源量子计算科技有限责任公司 | 一种量子程序的编译方法及装置 |
CN114675831B (zh) * | 2022-03-09 | 2023-10-31 | 韩济澎 | 一种编程语言的编译系统及方法 |
CN115145584A (zh) * | 2022-07-15 | 2022-10-04 | 杭州博盾习言科技有限公司 | 语法分析器的生成方法、数据处理方法、介质、设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100480916C (zh) * | 2005-12-19 | 2009-04-22 | 深圳信息职业技术学院 | 一种基于数控代码编译器建立数控系统软件的方法 |
CN102521291B (zh) * | 2011-11-29 | 2014-02-19 | 浙江大学 | 一种基于antlr的lin网络描述文件ldf的导入方法 |
US9063535B2 (en) * | 2011-12-22 | 2015-06-23 | Fanuc Robotics America Corporation | Numerical control program execution by robot |
CN102880468B (zh) * | 2012-09-12 | 2015-07-08 | 浙江大学 | 一种用于ecu程序开发的代码智能提示方法及其系统 |
CN103064391B (zh) * | 2012-12-28 | 2015-11-18 | 广州数控设备有限公司 | 基于TCP/IP协议及Linux网络编程的数控系统远程DNC控制方法 |
-
2013
- 2013-07-08 CN CN201310284869.9A patent/CN104281096B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN104281096A (zh) | 2015-01-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104281096B (zh) | 数控代码编译器的构造方法 | |
CN107710086B (zh) | 平移模块、处理模块及控制系统 | |
CN109254776B (zh) | 多语言代码编译方法及编译器 | |
CN109976760A (zh) | 一种图形语言的交叉编译方法及交叉编译器 | |
Liu et al. | An intelligent NC program processor for CNC system of machine tool | |
CN103123590A (zh) | 指令表il程序到c语言程序的编译方法 | |
CN106648681A (zh) | 一种可编程语言编译装载系统及方法 | |
EP2557500A2 (en) | Embedded multi-processor parallel processing system and operating method for same | |
CN101968767A (zh) | 基于宏程序的代码调试及仿真的方法和装置 | |
CN109213061A (zh) | 程序制作装置 | |
CN116540986A (zh) | 一种基于Web端的文本类编程语言代码编辑器构建方法 | |
CN104865899A (zh) | 一种自动单边补偿的数控加工方法 | |
US11320800B2 (en) | Optimization device | |
CN103838616A (zh) | 基于树型程序分支的计算机程序即时编译方法 | |
Guo et al. | A universal NC program processor design and prototype implementation for CNC systems | |
CN104238438A (zh) | 一种plc通用平台及其设计方法 | |
CN102540964B (zh) | 单电机驱动多轴的数控系统加工程序解释器实现方法 | |
CN1936746A (zh) | 基于arm的嵌入式数控系统g代码解释器 | |
CN108845804A (zh) | 一种基于cycle循环的数控代码解释器的设计方法 | |
Bayrak et al. | Comparison of a transformed Matlab/Simulink model into the programming language CFC on different IEC 61131-3 PLC environments | |
Lai | A design of general compiler for NC code in embedded NC system | |
JP2008204023A (ja) | プログラマブルコントローラシステム、プログラマブルコントローラのデバッグ方法 | |
Martinova et al. | Development of a Universal Software Application for Programming Canned Cycles on CNC Turning and Milling Machine Tools | |
CN113326048B (zh) | 浮点数计算精度处理方法、系统、介质及设备 | |
JP7450565B2 (ja) | コンパイル方法、開発支援装置および制御システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171013 Termination date: 20210708 |
|
CF01 | Termination of patent right due to non-payment of annual fee |