基于工控机的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

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

CSplitFn{

public:

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

GGroup[13];//分组存储G代码

int

MCode[10];

//分组存储M代码

int

nMcount;//M代码个数

/*===坐标参数===*/

float

XTheory;//X编程值

float

YTheory;//Y编程值

float

ZTheory;//Z编程值

float

Radius;//圆弧半径

float

Angle;//圆心角

CNode

Polar;//圆心坐标

/*===速度====*/

float

vectorSpeed;//矢量进给速度

CGStorepPreStore;//指向上个缓冲区的指针

};

该类可存储所有可能代码组合的参数信息,并可通过指针查询上个缓冲区中各个参数的值,方便地处理了模态代码的问题。译码时对中间代码进行逐个地分析,并计算出对应的各个参数,并存储在CGStore类型的变量中。

2.5

输出

译码完成后,各个信息都存储在CGStore类型的变量中,代码输出时只需选择需要的参数即可。在本项目中,控制程序制定的协议规定需要输出以下参数:G代码号、坐标平面、XYZ方向的移动量、进给速度、主轴旋转速度、M代码号等,考虑到直线运动和圆弧运动的差异性,输出时使用两种格式:

表1

输出代码格式表

直线插补

圆弧插补

参数

功能说明

参数

功能说明

int

GCode

G代码号

int

GCode

G代码号

int

MoveMode

运动坐标平面

int

MoveMode

运动坐标平面

long

movex

X轴方向偏置值

float

PolarX

圆心坐标X

long

movey

Y轴方向偏置值

float

PolarY

圆心坐标Y

long

movez

Z轴方向偏置值

float

angle

圆弧旋转角度(度)

float

Feed

进给速度

float

Feed

进给速度

long

Sanalogy

主轴旋转速度(转/分)

long

Sanalogy

主轴旋转速度(转/分)

int

Mcount

M代码个数

int

Mcount

M代码个数

int

MCode[10]

M代码值

int

MCode[10]

M代码值

其中,XYZ轴的偏置值输出的都是经转换后脉冲当量。代码输出后即可提供给控制程序调用。

3.

程序执行

本程序开发的硬件平台是研华工控机6003,CPU为赛扬1.7G,内存256M;操作系统是Windows

2000,利用VC++6.0开发完成。经对1000行待加工的G代码进行测试,算法的编译时间约为124毫秒。

4.

结束语

本论文设计实现了一个可编译G代码的程序,定义了部分语义分析的规则,构造了一种中间代码格式,提出了一种对G代码译码的方法。本程序已被用到项目的开发中,并经实践证明高效可用。

参考文献:

[1]

叶伯生.

计算机数控系统原理、编程与操作.

武汉:华中理工大学出版社.

1999

[2]

张承瑞等.

数控G代码解释器的设计与实现.

山东大学学报.

2002-12

[3]

蒋立源

康慕宁.

编译原理.第2版.

西安:西北工业大学出版社.

2000

[4]

赵东林等.

数控系统G

代码解释器的设计与实现.

制造业自动化.第28卷.第1期.2006

作者简介:

刘冲,男,中国地质大学(武汉)硕士研究生。主要从事数控技术、计算机技术、系统开发等研究。

杨代华,男,中国地质大学(武汉)机电学院教授。主要从事数控技术、系统改造与开发等研究。

老男人的烦恼 2022-06-26 20:52:40

相关推荐

经典个人签名 最经典的个性签名

人生到老不容易,不能事事都如意。一杯苦酒对月歌,歌不尽离愁,明月清风与谁说,说不出寂寞。快乐不像烦恼那样随时随地的跟随在你的身边。你在飞奔,我在行走!可我,永远不会摔倒。时光不老、我们依旧还在。哥,不寂寞。因为...
展开详情

神兽放假经典语录 神兽放假经典唯美语录

终于放寒假了,各路神兽欢聚一堂,势必闹个天翻地覆。“神兽”归笼!妈妈送孩子返校后哈哈大笑:他不开心我开心开心开心,在家三个月的神兽终于归笼了,期待俩个月后的蜕变!这周日是不是工作日我不知道,但是……我知道家里的...
展开详情

如何更改图片上的文字 这个方法还是很简便的

用美图秀秀就可以更改图片上的文字,具体操作步骤如下:在电脑上下载并打开“美图秀秀”,点击“美化图片”。选择“打开一张图片”,打开需要修改的图片。点击“消除笔”,涂抹需要修改的文字。点击“应用”即可消除文字。打开...
展开详情

打扮自己9大技巧 让你一天都美

妆前乳之前,用纸巾轻压全脸:清洁皮肤后,在涂抹妆前乳之前,用纸巾轻轻压于全脸。肌肤外多余的油脂会容易造成脱妆。切记不要使用吸收力过强的吸油面纸,适度地吸收油脂还是使用纸巾最恰当!别忘了检查容易出油的t字部位和鼻...
展开详情

?怎么读 ?的拼音是什么

的拼音:mì和miàn。的笔画共12画。的部首为言。的解释:《集韻》眠見切,音麪。《類篇》誘言也。...
展开详情

精选推荐更多>

李白谪仙人称号出自

李白“谪仙人”称号出自《对酒忆贺监二首》。
原文:
四明有狂客,风流贺季真。长安一相见,呼我谪仙人。昔好杯中物,翻为松下尘。金龟换酒处,却忆泪沾巾。
狂客归四明,山阴道士迎。敕赐镜湖水,为君台沼荣。人亡余故宅,空有荷花生。念此杳如梦,凄然伤我情。
译文:
四明山中曾出现过一个狂客,他就是久负风流盛名的贺季真。在长安头一次相见,他就称呼我为天上下凡的仙人。当初是喜爱杯中美酒的酒中仙,今日却已变成了松下尘。每想想起用盎龟换酒的情景,不禁就悲伤地泪滴沾巾。
狂客贺先生回到四明,首先受到山阴道士的欢迎。御赐一池镜湖水,为您游赏在山光水色之中。人已逝去仅余故居在,镜湖里空有朵朵荷花生。看到这些就使人感到人生渺茫如一场大梦,使我凄然伤情。
这两首诗在艺术上主要采用了今昔对比的手法,随着镜头的一再转换,展现出诗人抚今追昔、感慨万千的心绪。第一首前四句着重对昔日的追忆,但后四句却是在今——昔、今——昔的反复重迭之中,来加强感情的抒发。第二首前四句言昔,后四句言今,同样是在对比之中展示出诗人那极不平静的心绪。这一手法的运用,无疑加强了诗歌的艺术效果。

三国两晋南北朝时期

三国两晋南北朝又称魏晋南北朝,是中国历史上政权更迭最频繁的时期,主要分为三国(曹魏、蜀汉、东吴)、西晋、东晋和南北朝时期,由于长期的封建割据和连绵不断的战争,使这一时期中国文化的发展受到特别的影响。其突出表现则是玄学的兴起、佛教的输入、道教的勃兴及波斯、希腊文化的羼入。
三国至隋的三百六十余年间,以及在三十余个大小王朝交替兴灭过程中,上述诸多新的文化因素互相影响,交相渗透的结果,使这一时期儒学的发展及孔子的形象和历史地位等问题也趋于复杂化。
三国(220年-280年)是中国历史上的一段时期,主要有曹魏、蜀汉及孙吴三个政权。汉末三国战争不断,使得中国的人口急剧下降,经济严重受到损害,因此三国皆重视经济发展,加上战争带来的需求,各种技术都有许多进步。
晋朝分为西晋与东晋。公元266年司马炎代魏称帝(晋武帝),国号曰晋,建都洛阳,史称西晋。公元280年灭吴,统一全国,秦汉以来的分裂,至此再度统一。统治疆域东、南至海,西至葱岭,南至越南,北至大漠,东至辽东。
南北朝(公元420年—589年),由公元420年刘裕篡东晋建立南朝宋开始,至公元589年隋灭南朝陈为止,上承东晋、五胡十六国,下接隋朝。因为南北两势长时间对立,所以称南北朝。南朝(420年—589年)包含宋、齐、梁、陈等四朝;北朝(386年—581年)包含北魏、东魏、西魏、北齐和北周等五朝。

计熟事定 举必有功什么意思

“计熟事定,举必有功”是汉语词汇,意思是计划成熟,事情安排就绪,战争的发动必定成功。出自唐代刘禹锡《为淮南杜相公论西戎表》。
原文节选:
臣负恩方镇,初惧寇戎,正于忧迫之时,果闻仁圣之谕。攘却凶孽,不劳干戈。臣静思远图,为国久计,莫若存信施惠,多愧其心。岁通玉帛,待以客礼。昭宣圣德,择奉谊之臣;恢拓皇威,选谨边之将。积粟塞下,坐甲关中;以逸待劳,以高御下。重以金玉之赠,结以舅甥之欢。小来则慰安,大至则严备。明其斥候,不挠不侵。则戎狄为可封之人,沙场无战死之骨。若天下无事,人安岁稔,然后训兵,命将破虏。摧衡原州,营田灵武。尽复旧地,通使安西。国家长算,悉在于此。计熟事定,举必有功;苟未可图,岂宜容易。此皆陛下朝夕倦谈之事,前后立验之谋。臣质性顽疏,筹画庸近。受恩非据,敢忘献忠?犬马之心,实所罄尽。谨遣某官奉表。
刘禹锡(772~842),唐代文学家、哲学家。字梦得,洛阳(今属河南)人,自言系出中山(治今河北定县)。贞元间擢进士第,登博学宏辞科。授监察御史。曾参加王叔文集团,反对宦官和藩镇割据势力,被贬朗州司马,迁连州刺史。后以裴度力荐,任太子宾客,加检校礼部尚书。世称刘宾客。和柳宗元交谊甚深,人称“刘柳”;又与白居易多所唱和,并称“刘白”。其诗通俗清新,善用比兴手法寄托政治内容。

衔得云中尺素书什么意思

“衔得云中尺素书”意思是给她衔来了一封书信。出自唐代李白的《捣衣篇》,是南北朝乐府旧题,此题起源于古琴曲《捣衣》。此篇题作“捣衣”,《乐府诗集》未收,诗中并不着重写捣衣,只闲闲地提了一句“夜捣戎衣向明月”,因此“捣衣”只是作为闺怨的代词。李白此诗是为闺怨而作。
原文:
闺里佳人年十馀,嚬蛾对影恨离居。
忽逢江上春归燕,衔得云中尺素书。
玉手开缄长叹息,狂夫犹戍交河北。
万里交河水北流,愿为双燕泛中洲。
君边云拥青丝骑,妾处苔生红粉楼。
楼上春风日将歇,谁能揽镜看愁发。
晓吹员管随落花,夜捣戎衣向明月。
明月高高刻漏长,真珠帘箔掩兰堂。
横垂宝幄同心结,半拂琼筵苏合香。
琼筵宝幄连枝锦,灯烛荧荧照孤寝。
有便凭将金剪刀,为君留下相思枕。
摘尽庭兰不见君,红巾拭泪生氤氲。
明年若更征边塞,愿作阳台一段云。
此诗的开头就写少妇在闺中愁思远人,忽得来信,报道丈夫仍滞留交河之北。其实不必一定要信来,信也不会由春燕捎来,春燕从南边海上归来也不可能带来极北的交河的信,这些都是虚拟,甚至是不合理的虚拟,只是借以画出闺中思妇“愿为双鸟泛中洲”的遐想而已。诗的场景是在少妇的闺房,全诗充满渲染闺房里的景况和闺中独处的哀怨;并以想象中的征夫的处境“君边云拥青丝骑”、“晓吹员管随落花”和眼前闺中的光景对照,点染出少妇的魂驰塞外。
常见热点问答
热点搜索
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
作文大全
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200