论文部分内容阅读
摘 要:针对数控仿真软件如何能对用户填写的数控代码具有简单的语法与词法纠错功能进行了简单的介绍和探索。
关键词:数控仿真 语法纠错 词法纠错 指令纠错
当前数控仿真软件主要运用于职业学校数控教学以及广大从事数控行业的人员进行自学与提高,其教学功能的重要性不言而喻,那么开发数控仿真软件不仅要具有仿真功能,还需要具有对用户输入数控代码的简单纠错功能,提高用户
的学习效率,现将本人开发软件时对这部分的设想做一个简单介绍。
数控加工程序以*.cld文本文件的形式存放在硬盘中,读入内存后才能进行处理。程序打开一个文本文件,使用读取语句依次读入一行NC程序到设置的Cstring字符串数组类的对象中,这个字符串数组规定为由10个字符串组成。每行以碰到回车符号为结束。然后把这个字符串数组对象中的信息进行解释,并储存到一个结构体对象中。这里有2种方法处理数据,一种方法是直接反复循环,直到把文件读取完毕。整个数控程序就被读入到CSrtingList类的对象中了,NC程序的每一行就成为了此对象中的一个元素。然后对整个NC程序进行词法和语法检查,译码解释程序成为图形模拟的计算机程序。但是这种方法对内存的要求比较高,容易使程序运行变慢。而第二种方法是每读取一行数控程序就直接进行语法和词法的检查。如果出错就直接报错,没有错误就继续读取下一行数控程序。如此循环,直到把程序完成为止。
1.数控程序的词法检查
数控程序词法检查时以一个程序段为解释单位,一次解释一个程序段。首先,数控程序都是按照严格的格式书写的,每个G代码、M代码、F代码、S代码、T代码都有严格的书写格式。这里做的第一步就是检查程序的格式是否正确,采取的方法是在检查类中为每一个G代码和M代码都定义一个严格的格式规则。 G00的格式是G00X…Z….就规定G00后面一定要跟上X和其后的数值以及Z和其后的数值,G01的格式是G01X…Z….F…就规定G01后面一定要跟上X和其后的数值以及Z和其后的数值还有F地址字和其后的数值。G02/G03的格式是G02(G03)X…Z….R…就规定G00后面一定要跟上X和其后的数值以及Z和其后的数值和地址字R和其后的数值。至于其他G代码规则也是如此规定,就不一一详述,M代码也一样比如M03格式为M03 S…..。后面一定要跟上S地址字以及其后的数值。对每一种代码都作了严格规定后,如果出现上述表中没有的G代码或M代码,程序就会识别错误并立即报错。如果出现了已规定的代码而其后的地址数值不对也报错。如果没有检查出错误即进入下一步检查,下一步骤将检查我们输入的错误。如在程序中使用了未定义的地址符号“E”,,为此把数控程序中常用的N、G、M、F、S、T、X、Z等代码建立了一个字符集库,依次检查数控程序字符字是不是N、M、G、F、S、T、X、Z…..中的一个。如果是就继续进行,如果不是,调用报错函数报 “字符使用错误”。所以当我们遇到数控程序不会用到的代码字时就会报错。另外,其实每种数控程序中大部分代码其后都跟有数值,如X100、 Z100等等,他们代表该点在此坐标名称下的坐标值,由于数控机床所加工的工件大小是有规定的,刀架的运行也是有一定范围的。所以对X、Z代码后的数值也限定了范围,如X设置在-10到500之间,Z设置在-300到200之间,如果超出这个范围,即报 “超过机床允许范围”错误。比如我们输入时把X200输入成为X-200,把Z-150输入成为Z1500等等错误都可以检查出来。以上三种检查方法可以发现我们大部分的因粗心而出现的输写错误。
2.数控程序的语法检查
语法检查主要检查数控代码语法是否符合规则。数控代码中主要有以下几方面的语法错误:
2.1.我们把具有相近类型的G代码分成一个组,比如G00、G01、G02、G03、G32就属于一个组。同组代码不能在一个程序段中同时出现。所以定义一个方法,该方法读取一行数控代码时如果有2个同组G代码出现就报错,M代码也是一样,可以实现把刚才定义的方法加上同一行出现2个M代码时会报错的功能。在此,先把需要识别的G代码或M代码分为几个组,把不能同时在一行出现的代码放置在一个组中,识别时如果在一行中出现了2个同组的代码即系统报错。
2.2.G代码中一般要求字母要大写,设置检查程序有识别大小写功能,如出现小写字母即报错。
2.3.指令的某些参数必须要明确指定。这里涉及到一些指令的格式问题,比如G00 X100 Z100 代码,G00 后必须有X和Z的坐标值。对于此处,其实和前面的词法检查同时进行,在前面设计的词法检查代码格式链表中为每个G、M、F、S、T代码编写好详细的代码规则,识别时会判别这些规则,出现和规则不同的情况即程序报错。
2.4.程序开始有程序开始字符,结束有程序结束字符。检查程序时最先检查的就是程序是否由%开头,如果有则继续向下检查,如果没有则系统报错“请输入程序名称”。整个程序识别到M30或M02指令时,先不做响应,继续识别下一程序段。如果下一段为空则在对话框中输出“程序检查完毕”,如下一段不为空则报“结束符号使用错误”。如果识别代码时没有碰到M02或M30即碰到为空的程序段,就会报“程序没有结束符号”。
由于语法错误非常的复杂,本程序只进行这些初步检查。其他深入的检查方法将在后续版本中逐渐实现。希望能对大家有所帮助。
参考文献:
[1]李 峰 数控仿真系统译码模块的开发 现代制造工程 2004(12)
[2]郭培全,王红岩.数控机床编程与应用.机械工业出版社.2000
[3]肖忠跃,周燕辉,刘朝晖 数控车削仿真系统NC程序编译器的研究与开发 井冈山学院学报 第30卷 第2期 2009 年2月
作者简介:
夏伯融(1978.11-),男,湖北武汉人,讲师,硕士研究生,现从事数控技术及机电技术研究与教学工作。
关键词:数控仿真 语法纠错 词法纠错 指令纠错
当前数控仿真软件主要运用于职业学校数控教学以及广大从事数控行业的人员进行自学与提高,其教学功能的重要性不言而喻,那么开发数控仿真软件不仅要具有仿真功能,还需要具有对用户输入数控代码的简单纠错功能,提高用户
的学习效率,现将本人开发软件时对这部分的设想做一个简单介绍。
数控加工程序以*.cld文本文件的形式存放在硬盘中,读入内存后才能进行处理。程序打开一个文本文件,使用读取语句依次读入一行NC程序到设置的Cstring字符串数组类的对象中,这个字符串数组规定为由10个字符串组成。每行以碰到回车符号为结束。然后把这个字符串数组对象中的信息进行解释,并储存到一个结构体对象中。这里有2种方法处理数据,一种方法是直接反复循环,直到把文件读取完毕。整个数控程序就被读入到CSrtingList类的对象中了,NC程序的每一行就成为了此对象中的一个元素。然后对整个NC程序进行词法和语法检查,译码解释程序成为图形模拟的计算机程序。但是这种方法对内存的要求比较高,容易使程序运行变慢。而第二种方法是每读取一行数控程序就直接进行语法和词法的检查。如果出错就直接报错,没有错误就继续读取下一行数控程序。如此循环,直到把程序完成为止。
1.数控程序的词法检查
数控程序词法检查时以一个程序段为解释单位,一次解释一个程序段。首先,数控程序都是按照严格的格式书写的,每个G代码、M代码、F代码、S代码、T代码都有严格的书写格式。这里做的第一步就是检查程序的格式是否正确,采取的方法是在检查类中为每一个G代码和M代码都定义一个严格的格式规则。 G00的格式是G00X…Z….就规定G00后面一定要跟上X和其后的数值以及Z和其后的数值,G01的格式是G01X…Z….F…就规定G01后面一定要跟上X和其后的数值以及Z和其后的数值还有F地址字和其后的数值。G02/G03的格式是G02(G03)X…Z….R…就规定G00后面一定要跟上X和其后的数值以及Z和其后的数值和地址字R和其后的数值。至于其他G代码规则也是如此规定,就不一一详述,M代码也一样比如M03格式为M03 S…..。后面一定要跟上S地址字以及其后的数值。对每一种代码都作了严格规定后,如果出现上述表中没有的G代码或M代码,程序就会识别错误并立即报错。如果出现了已规定的代码而其后的地址数值不对也报错。如果没有检查出错误即进入下一步检查,下一步骤将检查我们输入的错误。如在程序中使用了未定义的地址符号“E”,,为此把数控程序中常用的N、G、M、F、S、T、X、Z等代码建立了一个字符集库,依次检查数控程序字符字是不是N、M、G、F、S、T、X、Z…..中的一个。如果是就继续进行,如果不是,调用报错函数报 “字符使用错误”。所以当我们遇到数控程序不会用到的代码字时就会报错。另外,其实每种数控程序中大部分代码其后都跟有数值,如X100、 Z100等等,他们代表该点在此坐标名称下的坐标值,由于数控机床所加工的工件大小是有规定的,刀架的运行也是有一定范围的。所以对X、Z代码后的数值也限定了范围,如X设置在-10到500之间,Z设置在-300到200之间,如果超出这个范围,即报 “超过机床允许范围”错误。比如我们输入时把X200输入成为X-200,把Z-150输入成为Z1500等等错误都可以检查出来。以上三种检查方法可以发现我们大部分的因粗心而出现的输写错误。
2.数控程序的语法检查
语法检查主要检查数控代码语法是否符合规则。数控代码中主要有以下几方面的语法错误:
2.1.我们把具有相近类型的G代码分成一个组,比如G00、G01、G02、G03、G32就属于一个组。同组代码不能在一个程序段中同时出现。所以定义一个方法,该方法读取一行数控代码时如果有2个同组G代码出现就报错,M代码也是一样,可以实现把刚才定义的方法加上同一行出现2个M代码时会报错的功能。在此,先把需要识别的G代码或M代码分为几个组,把不能同时在一行出现的代码放置在一个组中,识别时如果在一行中出现了2个同组的代码即系统报错。
2.2.G代码中一般要求字母要大写,设置检查程序有识别大小写功能,如出现小写字母即报错。
2.3.指令的某些参数必须要明确指定。这里涉及到一些指令的格式问题,比如G00 X100 Z100 代码,G00 后必须有X和Z的坐标值。对于此处,其实和前面的词法检查同时进行,在前面设计的词法检查代码格式链表中为每个G、M、F、S、T代码编写好详细的代码规则,识别时会判别这些规则,出现和规则不同的情况即程序报错。
2.4.程序开始有程序开始字符,结束有程序结束字符。检查程序时最先检查的就是程序是否由%开头,如果有则继续向下检查,如果没有则系统报错“请输入程序名称”。整个程序识别到M30或M02指令时,先不做响应,继续识别下一程序段。如果下一段为空则在对话框中输出“程序检查完毕”,如下一段不为空则报“结束符号使用错误”。如果识别代码时没有碰到M02或M30即碰到为空的程序段,就会报“程序没有结束符号”。
由于语法错误非常的复杂,本程序只进行这些初步检查。其他深入的检查方法将在后续版本中逐渐实现。希望能对大家有所帮助。
参考文献:
[1]李 峰 数控仿真系统译码模块的开发 现代制造工程 2004(12)
[2]郭培全,王红岩.数控机床编程与应用.机械工业出版社.2000
[3]肖忠跃,周燕辉,刘朝晖 数控车削仿真系统NC程序编译器的研究与开发 井冈山学院学报 第30卷 第2期 2009 年2月
作者简介:
夏伯融(1978.11-),男,湖北武汉人,讲师,硕士研究生,现从事数控技术及机电技术研究与教学工作。