全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于工控机的G代码编译程序设计刘冲 杨代华 张晓婷(中国地质大学(武汉)机电学院,湖北 武汉 430074)摘要:对数控编译程序的功能进行了分析与说明,提出了一种在工控机平台上设计编译程序的方法。设计实现了一个基于工控机的G代码编译程序,并通过实践对其可行性进行了验证。关键词:工控机;G代码;编译程序;数控系统IPC-based Design of G-code Compiler Liu Chong, Yang Dai-Hua, Zhang Xiao-Ting(Faulty of Machinery and Electronic, China University of Geosciences, Wuhan 430074)Abstract: The functions of NC compiler are analyzed and introduced. A method to design G-code compiler based on IPC (Industrial Computer) is advanced. An IPC-based G-code compiler is designed and implemented, and its feasibility is verified in practice. Keywords: Industrial Computer-based; G-code; Compiler; Numerical Control System数控代码的译码是数控系统中一个关键的部分,对CPU而言,它的工作量甚至比真正的插补还要大,特别是运动轨迹计算和F值计算部分,涉及到运算精度及实时性,是难度最大的一部分1。对数控代码进行译码的方式主要有两种:解释和编译2。解释是对代码进行逐行的译码,速度较慢,结构简单,对代码边解释边执行;编译是先将加工代码转换为一定格式的数据流,再由控制系统直接进行对其读取,执行速度快,结构复杂。传统数控系统由于受软件(包括编程语言选择、算法实现、计算精度等)和硬件(包括CPU运行速度、程序存储器和数据存储器的空间等)的限制,较难实现对数控代码真正意义的编译,大多数采用的是解释方式来进行译码,其译码效果十分受限。考虑到本项目设计是基于现代数控系统,硬件采用的是工控机系统,操作系统是Windows平台,程序采用了编译的方式完成对数控代码的译码。1. 数控编译程序的功能在数控系统的整体结构中,编译程序是一个独立的模块,它主要完成加工前对代码的处理,实现对代码正确性的检查验证、译码输出等操作;其输入的是数控G代码文件,输出的是可被运动控制卡提供的函数调用的参数数据流。编译程序主要完成以下功能:(1)词法、语法检查主要任务包括对数控代码进行组词规则、程序格式、是否关键字、字符是否合法等规则的检查,识别出代码中的各个基本语法单位,删除无用的空白字符、与输入介质相关的非实质性字符、注释等。(2)语义分析语义分析是对数控代码的逻辑合理性、正确性进行分析,需要对各个参数的合法性和有效性进行检查,并尽可能地实现智能化地检查错误,如是否超出行程、加工路线是否干涉等。完整的语义分析在编译系统中是相当复杂的。(3)中间代码生成中间代码为了能够在译码时以统一的格式进行处理而设计的一种代码格式。它是根据输入的数控代码生成的,只在程序中提供给其它函数使用,不会输出到目标代码,只是一种中间的数据交换。(4)译码译码主要完成对代码各个功能的解释,并将中间代码生成目标代码格式的数据流。其输出格式与目标代码相同,但只保存在内存中。(5)输出目标数据为方便其它程序调用译码结果,应将编译完成的数据输出到硬盘或其它存储介质中,输出时可以以文本文件或其它数据流格式输出。2. 数控编译程序的实现方法在对数控代码译码之前,必须先对其进行词法、语法和语义的检查,只有检查无误的代码才能进行译码,否则将返回出错信息,并提示用户进行修改。通过上述的检查后,为便于译码程序调用,需将数控代码转成统一的中间代码格式。译码程序直接对中间代码进行处理,并输出为统一的目标数据格式。程序的流程图如图1所示。 2.1 词法、语法分析程序的实现待处理的G代码一般都是以文件格式存储的,这不便于在程序中的处理使用,更好的方法是将其读入内存。为实现上功能,程序中设计了一个类CGAttribute,用于将G代码读入到内存中,以便于对代码进行处理。该类除完成代码的读入外,还将代码以关键字分类(如G、F、X、Y等)的方式分隔存储,这种分类给后面的处理带来了很大方便。由于本系统是基于工控机开发的,机器内存高达256M,所以不必担心文件过长而引起内存不足,处理时可将代码一次全部读入。对代码进行词法、语法检查时,程序会根据设定的规则对代码进行处理。首先要去除其中无效字符,如注释信息、程序段中的空格、N指令等。然后再按G代码的组词规则对其进行逐个检查,包括代码中的字符是否合法、代码的参数是否合理等。图1 程序总体流程图检查时是通过逐行读取的方式进行的,该过程完成了对代码的一次遍历。若某行中含有不符合规则的代码,则其行号、出错的信息代号记录,并在检查结束后将所有的出错信息反馈给用户,若有错主程序将停止后面的语义分析等操作。2.2 语义分析程序的实现一个编译器的功能强大与否在于它检查出来的错误的多少3。语义分析是对代码的逻辑合理性进行的判断,要想检查出更多的错误,规则的设计是十分关键和重要的。经分析G代码语言后,可以看出G代码程序在语义上具有以下规则特点: 代码必须是设计规则标准中有效的。如G98、G99代码是没有指定的,若在程序段中出现则是无效的; G代码中同组代码在同一程序段中只能出现一次; X、Y、Z、F、S等代码在同一程序段只能出现一次; X、Y、Z、F、S等代码的值不能超过机床的设定范围; 圆弧运动指令(G02、G03)必须指定参数; 做圆弧运动时的IJK参数必须符合坐标平面设置要求,如使用G17平面时,只能指定I、J参数,设置K代码的参数无效; F指令只对G01、G02、G03有效,对G00无效。以上列出的仅是部分规则,常规的代码规则并未列出。由于本项目完成的是一台数控雕刻机的设计,并未用到标准中的全部G代码,所以在语义分析和后面的程序处理中,我们只考虑加工所能用到的代码。语义分析也是通过逐行读取进行的,程序会对数控代码逐段地处理,该过程完成了对代码的又一次遍历。分析时若某行中含有不合规则的代码,则将该行的行号及出错的信息代号记录,并在检查结束后返回。2.3 中间代码的结构为了能够合理地存储中间代码的数据,程序中设计了一个类CSplitFn,该类可以在内存中保存数据,其主要结构如下:class CSplitFnpublic:void Set(char ,int,int ,float);/设置各个参数public:char m_cKey;/代码关键字int m_nOrder;/代码在程序段中出现的顺序号int m_nCode;/参数,用于存储整数参数的代码值,如G、M等float m_fPara;/参数,用于存储带小数参数的代码值,如X、Y等;在完成程序的各个检查后,代码将以该类的组成形式进行存储,以供译码程序调用。2.4 译码程序的实现与编程的准则相一致,对一个程序段进行译码与数据处理时也要规定一些处理准则,主要的准则有4条。 刀具上一段的终点是下一段的起点 控制点的选择 按机床坐标系译码与计算 模态代码的处理G代码中有许多代码是模态的,可能它只在程序段中指定一次,但在后续代码它就会一直保持有效;另外,部分参数的计算需要考虑两个或多个程序段才能完成,所以在译码时不仅要使用本程序段的信息,还要考虑上个程序段的信息。为了实现上述功能,程序设计了一个类CGStore,用于存储在译码时计算出来的各个参数。该类的结构如下:class CGStore public:int ResetStore();/重置缓冲区int GetLastSetting();/获取上个缓冲区的参数值long Sanalogy;/主轴旋转速度long movex;/X方向进给值long movey;/Y方向进给值long movez;/Z方向进给值int MoveMode;/运动平面模式/*=坐标变换参数=*/float offsetX; /X轴偏置值float offsetY; /Y轴偏置值float offsetZ; /Z轴偏置值/*=G代码=*/int GGroup13;/分组存储G代码int MCode10; /分组存储M代码int nMcount;/M代码个数/*=坐标参数=*/float XTheory;/X编程值float YTheory;/Y编程值float ZTheory;/Z编程值float Radius;/圆弧半径float Angle;/圆心角CNode Polar;/圆心坐标/*=速度=*/float vectorSpeed;/矢量进给速度CGStore *pPreStore;/指向上个缓冲区的指针;该类可存储所有可能代码组合的参数信息,并可通过指针查询上个缓冲区中各个参数的值,方便地处理了模态代码的问题。译码时对中间代码进行逐个地分析,并计算出对应的各个参数,并存储在CGStore类型的变量中。2.5 输出译码完成后,各个信息都存储在CGStore类型的变量中,代码输出时只需选择需要的参数即可。在本项目中,控制程序制定的协议规定需要输出以下参数:G代码号、坐标平面、XYZ方向的移动量、进给速度、主轴旋转速度、M代码号等,考虑到直线运动和圆弧运动的差异性,输出时使用两种格式:表1 输出代码格式表直线插补圆弧插补参数功能说明参数功能说明int GCodeG代码号int GCodeG代码号int MoveMode运动坐标平面int MoveMode运动坐标平面long movexX轴方向偏置值float PolarX圆心坐标Xlong moveyY轴方向偏置值float PolarY圆心坐标Ylong movezZ轴方向偏置值float angle圆弧旋转角度(度)float Feed进给速度float Feed进给速度long Sanalogy主轴旋转速度(转/分)long Sanalogy主轴旋转速度(转/分)int McountM代码个数int McountM代码个数int MCode10M代码值int MCode10M代码值其中,XYZ轴的偏置值输出的都是经转换后脉冲当量。代码输出后即可提供给控制程序调用。3. 程序执行本程序开发的硬件平台是研华工控机6003,CPU为赛扬1.7G,内存256M;操作系统是Windows 2000,利用VC+6.0开发完成。经对1000行待加工的G代码进行测试,算法的编译时间约为124毫秒。4. 结束语本论文设计实现了一个可编译G代码的程序,定义了部分语义分析的规则,构造了一种中间代码格式,提出了一种对G代码译码的方法。本程序已被用到项目的开发中,并经实践证明高效可用。参考文献:1 叶伯生. 计算机数控系统原理、编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国GSM无线商务话机市场调查研究报告
- 2026年中国ABS专用复合发泡剂市场调查研究报告
- 2026年计算机软件水平考试-初级网络管理员历年参考题库含答案解析
- 2026年航空职业技能鉴定考试-黑河机场计算机配载操作考试历年参考题库含答案解析
- 2026年福建住院医师-福建住院医师检验医学科历年参考题库含答案解析
- 2026年石油石化技能考试-硫酸中控考试历年参考题库含答案解析
- 成人推拿手法的注意事项和临床应用
- 2026年环保气象安全技能考试-固体废物监测工历年参考题库含答案解析
- 2026年煤炭矿山职业技能鉴定考试-矿井排水工程考试历年参考题库含答案解析
- 推拿的作用原理
- 2026年北京市中考数学试卷【含答案】
- (2027版)近5年大学英语四级高频必考词汇表
- 埃博拉病毒病诊疗方案(2026年版)
- 颅脑手术患者术后护理要点
- 2026年贵州铁投笔试试题
- (正式版)DB41∕T 1116-2015 《压力容器检验报告附图画法》
- 青春航程的罗盘:高一年级“我的未来我做主”主题班会教学设计
- 依法对办错案法官问责申请书
- 《Windows网络操作系统》中职全套教学课件
- 小班社会科学垃圾分类
- 店长领导力培训
评论
0/150
提交评论