人民网
人民网>>传媒>>人民网奖学金>>哈尔滨工业大学>>哈工大2016

加工代码语义识别关键技术研究

李进进 袁一菲 曾重元
2017年01月12日16:27 | 来源:人民网研究院
小字号

摘 要: 为了实现重要零部件的仿真加工,需要先对加工代码中的重要信息进行语义识别。利用VC++编程语言,研究如何识别、提取加工代码中的数据信息。算法研究表明:采用动态链表的数据管理方式,利用自顶向下的识别方法,对数据缓冲区进行刷新与提取,可实现加工代码的语义识别。采用自顶向下的识别方法,可增强程序封装的鲁棒性,采用刷新数据缓冲区的方法,可补全加工代码中的续效指令。

关键词: 仿真加工;加工代码;语义识别;续效指令

中图法分类号: TG543 文献标识码: A

Research on key technologies of semantic recognition for NC code

Abstract: In order to realize the important parts of the simulation process, need to identify the important information in the NC code. Using VC++ language to study how to identify and extract the data in the NC code. Algorithm research shows: Using top - down identification method to refresh and extract the data buffer can realize the semantic recognition of NC code by the dynamic list. Using top - down recognition method, the robustness of the program can be enhanced. The method of refreshing data buffer can be used to fill up the continuous effect instruction.

Key words: simulation process; NC code; semantic recognition; the continuous effect instruction.

针对德国工业4.0与中国制造2025中的智能数字化工场,全面提升加工制造精度成为一项新的挑战。机械加工不仅要提高加工精度,更要降低加工成本,因此在加工之前,仿真加工变的尤为重要。仿真加工就是将应用于加工控制中心的加工代码运行在计算机建立的虚拟机床环境中,模仿现实机床的加工运动。因此如何利用计算机读取加工代码以及加工代码的语义识别是仿真加工的前提,编译程序实现加工代码的语义识别具有重大的研究意义和实用性。

根据编译原理[1]cholesky的文法规则,加工代码是典型上下文无关的正则文法,针对正则文法,传统的加工代码采用贝尔实验室提出的lex-yacc编译工具进行语义识别。但是由于仿真加工需要在三维软件(例如UG)中执行,lex-yacc编译工具与三维软件的衔接存在着一定的问题,可能会出现外部函数无法解析的错误,为了提高仿真程序的鲁棒性,本文利用面向对象的C++程序语言,提出了一套完整的加工代码语义识别程序算法,完成加工代码程序字的识别、关键信息的提取以及补全续效指令的工作。

1加工代码的介绍

数控加工代码中所用的各种代码指令如坐标尺寸值、坐标系命名、数控准备机能指令、辅助动作指令、主运动和进给速度指令、刀具指令以及程序和程序格式等方面,相关国际组织已制定了一系列国际标准。目前被各机床厂家广泛采用的是ISO 6983国际标准。

1.1加工代码的结构

数控加工代码是由主程序和可被主程序调用的子程序组成,子程序可以多级嵌套。无论主程序和子程序都是由若干个按照规定格式书写的“程序段”组成。每个程序段由按照一定顺序和规定排列的“程序字”也称为“功能字”,简称“字”组成。字由表示地址的英文字母(或特殊文字)和数字组成,是表示某种功能的代码符号,这些代码符号就是前文所述的指令代码。例如G01、X351、F3000等三个字分别表示直线插补代码指令、X向尺寸字351mm和进给速度指令3000mm/min。

1.2 程序段格式

程序段格式有多种,如固定顺序格式、分隔符顺序格式、字地址格式等,现在最常用的是字地址格式,字地址格式如下:NxxxxGxxX±xxxx.xxxY±xxxx.xxxFxxSxxTxxMxxLF。每个程序段的开头是程序段的序号,以字母N和若干位数字表示;接着一般是准备功能指令,由字母G和两位数字组成;而后是坐标运动尺寸,如X、Y、Z等代码指令运动坐标尺寸;在工艺性指令中,F代码为进给速度指令,S代码为主轴转速指令,T代码为刀具号指令,M代码为辅助机能指令;LF(Line Feed,换行)为程序段结束符号。

上述程序段中,用地址码来指明指令数据的意义。程序段中字的数目是可变的,因此程序段的长度也就是可变的,所以称这种形式的程序段为字地址可变程序段格式[2]。

1.3 程序段中“功能字”的意义

(1)程序段序号

它是程序段中最前面的字,由字母N和其后三位或四位数字组成。用来表示程序执行的顺序,用作程序段的显示和检索。有的数控系统也可以没有程序段号。

(2)准备功能字

准备功能字也称G功能或G指令,由字母G和其后面二位数字组成。G功能是基本的数控指令代码,用于指定数控装置在程序段内准备某种功能。

(3)坐标字

坐标字也称为尺寸字,用来给定机床各坐标轴的位移量和方向。坐标字由坐标的地址代码、正负号、绝对值或增量值表示的数值等三部分组成。坐标的地址代码为:X、Y、Z、U、V、W、P、Q、R、I、J、K、A、B、C、D、E等,坐标的数值由插补指令决定;数值部分可以是正值也可以是负值,数值部分是正值时“+”号可以省略;数值的位数由数控系统规定。

(4)进给功能字

进给功能也称F功能,表示刀具相对于工件的运动速度。进给功能字由字母F和其后的几位数字组成。

(5)主轴转速功能字

主轴转速功能也称S功能,用以设定主轴速度。它由字母S和其后的几位数字组成。

(6)刀具功能字

刀具功能也称T功能,它在更换刀具时,用来制定刀具号和刀具补偿号。刀具功能由字母T和其后的几位数字组成。

(7)辅助功能字

辅助功能也称M功能,用它指定主轴的启停、冷却液开关等规定好的辅助功能。它由字母M和其后的两位数字组成。

(8)程序段结束符

程序段的末尾必须有一个程序段结束符号,在ISO标准中的程序段结束符号为LF(Line Feed,换行)。为简化,程序段结束符有的系统用“*”、“;”或其他符号表示。

1.4 加工代码的特点

加工代码分为模态指令(又称续效指令)和非模态指令(又称一次性指令)两类。其中模态代码在程序段中写一次后,在接着的一些程序段中如没有写入新的同组代码,则继续起作用,而且不用写就能执行前面的代码功能,例如坐标字指令。非模态指令只在写入的一个程序段中起作用。

2 加工代码的语义识别

针对加工代码的结构和特点,将加工代码的语义识别分为以下三个过程,预处理阶段、语义识别阶段、续效指令补全阶段。语义识别的算法流程图如图1所示。

2.1 预处理阶段

预处理阶段是将加工代码文件(txt文本)读入至计算机内存中,用单向链动态表结构进行组织管理,用链表的每个结点对应一个程序段。单向链表的结点包括两个域:数据域用来存储数据元素的信息;指针域用来存储直接后继的存储地址。

采用结构体变量作为链表中的结点,具体结构如下:

struct pre_control

{char program[50];

int n;

pre_control *next; };

其中成员program用来存放读入文件的每一行程序段,整形变量n用来存放该段加工代码实际的字符数,指针next指向下一个链表结点,最后一个结点的指针为“Null”。

2.2 语义识别阶段

语义识别阶段是采用for循环和switch选择语句实现对加工代码的字地址(N、G、X、Y、Z、A、B、F、S、T、M)进行识别,提取字地址后的数字信息,将数字信息保存至相应的寄存器中。

switch选择语句用于实现一段加工代码字地址的识别[3],该程序的伪代码如下:

switch(程序段字符)

{ case'N':

{

提取字地址N后的相关数据;

};break;

case'G':

{

提取字地址G后的相关数据;

};break;

case'X':

{

提取字地址X后的相关数据;

};break;

.

.

.

default: break;}

本文采用for循环函数提取坐标字后的数据信息,并将获取到的数据信息存储至数据缓冲区中。该函数的伪代码如下:

for(字符串指针i;字符串指针i所指的字符不是空格符或者回车换行符;字符串指针自加1)

{ 将该字符存储至数据缓冲区;

字符指针自加1; }

图1 加工代码语义识别算法流程图

2.3 续效指令补全阶段

西北工业大学南雁[4]提出了一种续效指令补全的方法,在对新开辟的尺寸字信息结点进行初始化时,将结点中诸如X、Y、Z、G等各组续效指令赋于它们定义域以外的值,即赋给它们奇异的初始值。如给G赋值为100等,然后从后向前对各个数据进行扫描,对各续效指令来说,凡值不等于初始值的两结点之间的续效指令值应等于前一个结点相应的指令值。

这种方法会降低程序的运行速度,因此本文提出一种创新型续效指令补全方法,采用逐行刷新数据缓冲区的方式,每当读完一行数据,用此数据刷新缓冲区内容,这时续效指令数据信息还存储于缓冲区,此时从缓冲区中提取全部的指令数据存入相应程序字的数值信息数据链表中,便可实现续效指令的补全。下面是四轴加工中心数据缓冲区的结构。

struct nc_word

{char N[6];

char G[3];

char X[8];

char Y[8];

char Z[8];

char B[8];

nc_word *next;};

3. 算法仿真验证

下面以某航空发动机叶片排气圆弧处的部分加工代码为例,进行加工代码的语义识别。实现了N、G、X、Y、Z指令的识别以及续效指令的补全。图2为txt文本中的部分加工代码,图3为经过语义识别及续效指令处理后的数值信息。

4.论

(1)本文对加工代码的语义识别进行了研究。编写VC++语言程序算法,实现了加工代码的语义识别,提高了程序封装的鲁棒性。

(2)对于续效指令的补全,本文也提出了创新型方法,大大提高了程序的运行速度。

参考文献

[1] 王生原,董渊等.编译原理[M].北京:清华大学出版社,2015.

[2] 韩振宇,付云忠.机床数控技术[M].哈尔滨:哈尔滨工业大学出版社,2013.

[3] 谭浩强. C++程序设计[M](第二版).北京:清华大学出版社,2011.

[4] 南雁. 基于虚拟数控加工的NC代码翻译[D].西北工业大学,2003.

(责编:温静、赵光霞)

分享让更多人看到

传媒推荐
  • @媒体人,新闻报道别任性
  • 网站运营者 这些"红线"不能踩!
  • 一图纵览中国网络视听行业
返回顶部