分析了数控系统加工代码译码方法的优缺点,在此基础上,提出了一种新的数控加工虚拟仿真系统nc代码编译器的实现算法——解释—编译方法,并对如何在visualc++环境中运用计算机编译原理和面向对象技术来开发数控加工虚拟仿真系统nc代码编译器进行了探讨。
1 引言
随着数控技术在机械制造业中的广泛应用,数控加工虚拟仿真系统也得到迅速发展,广泛应用于数控编程操作的教学和培训,对减少高等院校和培训机构的资金投资,缩短企业的生产准备周期、减少生产成本、提高企业生产效率具有重要意义。而作为数控加工虚拟仿真系统的前置处理部分——nc代码编译器,是沟通和传递数控加工虚拟仿真系统与cad/cam系统其它部分之间信息的桥梁,也得到了迅速发展。 在数控加工虚拟仿真过程中,正确且快速有效地从所输入的加工程序中提取加工信息以及将它们有效地组织仿真系统内部默认的表示形式,是进行动态仿真的前提和仿真过程得以顺利进行的保证。综观国内外数控加工虚拟仿真系统nc代码编译技术的发展情况,国外在这方面的研究比较成熟,而国内尽管已有很大发展并达到相当水平,但存在一些不足之处:
(1)通用性不够,如某些数控系统的nc代码编译器只适用于某一系统的代码编译;
(2)在如何处理计算机内存资源利用率和运行速度两者的关系上有待于进一步研究;
(3)所处理的nc代码有限,尤其是国内大多数nc代码编译器只能实现对部分常用c代码(如goo—g04等)、m代码等基本代码进行翻译处理,而对一些重要的代码(如刀具补偿代码)、固定循环和子程序的处理却很少;
(4)对nc代码程序的语言错误检查力度不够,多数nc代码编译器只是显示错误出现的行号而已。
在nc代码翻译器的研究与实现过程中,如果能改善上述缺陷,即提高通用性、完善代码处理功能,真正实现数控加工虚拟仿真对加工信息的优化,则能进一步提高虚拟仿真的真实性,并为提高数控加工的生产效率、缩短生产准备周期、减少生产成本、企业实现以生产时间、加工成本、资源*化配置利用来生产出高质量的产品奠定坚实的基础。因此,本文作者将致力于实现具有一定通用性的nc代码翻译器的关键技术的研究,使数控加工虚拟仿真系统能够满足cad/cam系统向集成化、智能化、网络化发展的需要。
2 编译系统采用的译码方法
传统的数控系统代码编译方法有解释、编译和目标码编译等三种方法。这三种编译方法各有其优缺点,前两种的缺点是浪费计算机内存资源,执行程序时程序段与程序段之间可能存在停顿,影响零件加工精度;而且这两种译码方式都存在一个缺点,即在加工同一种类的不同零件时,程序每运行一次都需要重新对程序进行编译,都要占用一定的加工时间。而采用目标码进行编译时,虽然加工同类零件时只需运行一次译码程序,提高了数控加工程序运行速度,且目标码形式单一,读取速度快,可大大提高加工程序反复运行的效率;但是当数控加工程序较长时,编译产生的目标码所占据的内存是比较大的,而且用户如果要在此基础上扩展其功能,则必须*了解其代码的设计原则;所以这种译码方法的通用性和移植性较差。笔者在此基础上,根据时间重叠流水处理原理,提出了采用解释—编译方式对数控加工代码进行译码的方法,其工作流程如图1所示。
图1解释-编译的译码方法的流程图
该解释-编译的译码方法的运行过程是编译程序要进行两次扫描,且扫描的对象不同,*次扫描的对象是数控加工程序中的各种地址符,此过程进行词法、语法和简单的语义分析,并累计程序的程序段个数;扫描的同时提取数控加工程序中主要加工信息,如g00、g01、g02、g03等,并按先后顺序将加工信息存放到编译结果缓冲区m_curvelist尺寸链表,且设置插补类型标志位:enum locustype{point,line,cwarc,anticwarc} locustp,以供第二次扫描时使用。若存在错误则退出编译系统并提示出错信息,同时清空缓冲区m_cu~ehst尺寸链表。若*次扫描检查无错则进行第二次扫描。此时,第二次扫描的对象是编译结果缓冲区中各插补标志位,通过识别各个插补标志位从编译结果缓冲区m_curvelist尺寸链表中读取刀位数据信息,并由此刀位数据信息来驱动相应插补模块完成数控加工过程的动态仿真;很显然,第二次扫描的时间会比*次扫描时间短,且需要的存储空间比*次扫描时需要的存储空间少。
这种分次对不同对象进行扫描的解释—编译的译码方法,一方面克服了解释方式和编译方式浪费计算机内存资源的缺点;另一方面又克服了时间顺序处理方式由于在两个程序段的输出之间存在的时间间隔,导致电机的时转时停,而造成工件的加工质量下降的缺点。同时该解释—编译方式由于两次扫描的对象不同,且第二次扫描的内容没有*次扫描的复杂。很显然,这种方法一方面提高了计算机内存资源的利用率,另一方面缩短了编译的时间,大大提高了编译软件的工作效率。
3 数控加工程序译码算法的实现
数控加工虚拟仿真系统承担着两大任务:一是对数控加工程序进行扫描并作出词法、语法和语义识别,并将识别结果输出告知用户;二是经过扫描识别确定加工程序无误后,提取驱动机床移动部件的加工信息进行加工仿真。而数控加工虚拟仿真系统编译器主要用于数控加工程序正确性的检验和提取驱动加工的刀位信息。因此,在visual c++环境下开发数控加工程序编译器,其主要任务是完成对零件程序的扫描,并对词法、语法进行识别,将识别结果以链表的形式存入缓存区。图2所示为笔者所采用的译码方法对nc代码程序进行词法、语法识别的流程图。
图2 nc代码词法、语法识别算法流程图
3.1 数控加工程序的读取
数控加工虚拟仿真系统读取软盘或硬盘中以*.txt格式存放的数控加工程序。为此,仿真系统首先调用open函数打开一个文本格式的加工程序文件,由read函数按照先后顺序将nc程序逐段读入cstring类的m_strfileall对象中;再将相应的地址存入cstringlist类的m_filelinelist链表中。循环进行这个过程,直到文件结束。这样,cstringlist类型的m_filelinelist链表中将按先后顺序逐行记录整个nc程序的信息。
3.2 nc代码词法检查
词法检查所要完成的主要任务是对零件的加工程序中的各地址符进行检查,尤其是g功能字和m功能字的检查;鉴别它们是否符合数控系统的g、m功能库。若发现不合词法规则时,则指出错误所在;若词法检查无误,则进入下一步语法分析检查。否则,退出编译系统。为此,该编译器主要按照下面步骤进行:
(1)建立g、m功能库。在cskdoc类中定义g、m功能规则链表cstringlistm_wrodrulelist;//存放数控系统g、m功能规则库。
(2)建立bool cskdoc::istherechar(cstringstrline,tchar c)函数,用于识别n、g、m、x、y、z、i、j、k、r、u、v、w、s、t、f等地址符。
(3)建立lexicalparser(const cstringlist & linewdls,int nlinenumber)函数用于进行词法检查。
3.3 nc代码语法检查
数控加工程序经过编译系统词法检查无误后,接下来就是要对其进行语法格式检查,以判断nc程序是否符合数控系统的语法规则;如:g90和g91两个功能字在同一文件中不能同时存在;同一模态组的功能字不能在同一程序段中同时出现;g00功能字和f功能字不能在同一程序段中同时出现;g00、g01、g02/g03等g功能字是否缺少正确匹配的尺寸字等等。为此,编译系统建立以下函数:
首先,在skdoc类中定义获得程序段中各字顺序的处理函数getwordorder(const cstringlist & 1wlist)。
然后,在skdoc类中定义语法检查函数syntaxparser()。
若零件的数控加工程序语法检查无误,则编译系统同时从nc代码程序段链表m_filelinelist缓冲区及时提取主功能信息如g00、g01、g02、g03等的刀位信息并存人驱动仿真系统的轨迹链表m_curvelist缓冲区;若存在语法错误时,则退出编译系统同时清空轨迹链表m_curvelist缓冲区。
4 结论
数控加工虚拟仿真系统主要用于高等院校和培训机构进行数控编程与机床操作的教学环节。其目的一方面是为了加深加固学员对数控编程知识的理解,另一方面是为了减少昂贵设备的投资。因此,数控加工虚拟仿真系统除了能真实地模拟数控加工过程,一方面要考虑识别尽可能多的数控系统代码,另一方面还必须考虑仿真系统编译代码的速度,提高计算机内存资源的利用率,这对于提高数控加工仿真系统的真实性和计算机资源利用率具有非常重要意义。本文作者通过对目前数控仿真系统编译器技术的发展现状和各种译码方法的优缺点进行分析,提出了一种新的数控加工虚拟仿真系统nc代码译码方法——解释—编译方法。这种方法不但减少了系统资源的浪费,而且缩短了编译的时间,提高了整个编译系统的运行效率。在本文中,只解决了数控加工虚拟仿真系统的一个基础问题——编译问题,为数控加工虚拟仿真系统的进一步研制奠定坚实基础。
针对德国BURKERT电磁阀几点检修
低温试验箱出现超压报警的解决方法
在使用全自动污水提升装置之前先来看看本篇吧
燃气轮机除尘滤芯是一种高效的过滤材料
电力监控系统详细介绍
数控加工虚拟仿真系统NC代码编译器探讨
Ventis Pro5无线气体检测仪和它的三种可燃气传感器
药品稳定性试验箱:作用、特点、使用及保养
不锈钢实验台的日常维护
自动控制絮凝剂的投加 |JENSPRIMA杰普在线流动电流分析仪应用于自来水厂
低噪音空气发生器的操作步骤及特点
数字扭力扳手怎么调扭力
DHG-9023A电热恒温鼓风干燥箱结构特点及工作原理
温升试验装置仪器系统参数设置
自动式油炸机生产线优势
JADEVER JWI-700C电子秤校正方法
数控高速镗床厂家为你解析,镗床到底是什么
浅析降膜蒸发器和浓缩蒸发器的区别:
直管粘度计的快速检测是非常重要的
德国西门子沧州PLC模块一级代理