Linux下G代码解释器的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

法检查结合在一起 ,根据 G代码关键字函数表对 G代码进行
分解 ,在 G代码 (此处 G代码包括所有代码 , G码和 M 码分别
指 G关键字和 M 关键字代码 )解释中将 G码和 M 码进行分
组 ,根据其他关键字 (如 f, s等 )和分组的 G码 、M 码分别进行
语法检查 ,整个过程中将错误信息收集在错误信息表中 ;在 G
虽然表达式并没有涵盖 G代码的所有语言现象 ,但是从 表示式可看出 : ①G代码的句子为关键字 +数字 + (空格 ) + 结束符的形式 ,其中空格在句子中没有实际的语义 ; ②G代码 的关键字并不多 ,主要有 N , G, X, Y, Z, W , I, J, K, R, M , S, T, F 等 ,在实际的过程中 ,机床制造商和用户可能对关键字进行扩 展 ; ③不同的关键字所对应的项目有不同的语法要求 。
Design and Imp lementation of G2code Interp reter in L inux Environment
( 1. D ept. of本Pro篇cess文Eq章uipm较ent为& C重on要trol !Eng文ineJe中IriHng对u, a1S目,ichLu前aInYUGann代i2ve, rs码iXty,IA解COh释eSnhgdi器2uguS的aicnhgu2实an 现610方065式, C进hina行; 2了. College of M anufacturing Science & En较gine为erin全g, 面S ich的uan总U n结ivers,ity,文Ch中eng提du S出ichu的an 方610法065具, C有hina较) 高的实用性,同时文中
G代码加工语言不像其他一些算法语言那样复杂 ,它的语
言现象较简单一些 。考虑到效率及实用性 ,把词法分析与语法
分析有机地结合在一起 ,实际应用中证明这样做实用性强 、程
序效率高 、可扩充性好 [12 ] 。图 2表示一行 G代码的处理过程 ,
预处理模块完成去除空格 、注释 、字母小写化等 ;词法分析和语
int m _modes[M _CROUP_NUM ] ;
/ /M 代码
int m _count;
/ /M 代码数目
double r_number;
/ /半径值
int t_number;
/ /刀具号

struct _comp ile_rst 3 next;
}COMP ILE_RST, 3 PCOMP ILE_RST;
1 引言
数控技术是数控机床的关键技术 ,数控机床是工厂实现自 动化的基础 ,目前国内 70%的数控机床需要从国外进口 [1 ] 。 数控系统在体系结构上的发展趋势是开放性 [2 ] ,即开放式数 控系统 。对于开放式数控系统 ,不同的机构和学者有不同的提 法 ,可 扩 展 性 、可 移 植 性 、可 互 换 性 、互 操 作 性 是 其 基 本 特 征 [3, 4 ] 。开放式数控发展到今天 ,软硬件技术的发展使得要求 硬实时的数控系统核心任务应用软件实现成为可能 ,基于 PC, 尽可能多地使用软件实现数控系统功能的全软件式数控成为 开放式数控实现的主要途径之一 [5, 6 ] 。软件的开放性直接影 响到数控系统的开放性 。
在根据 G代码关键字函数表对 G代码进行分解和将 G码 和 M 码进行分组的基础上 ,对分解得到的各项进行细化的语 法分析 ,如 : ①N , G,M , Y, Z等关键字后是否是数字 ; ②G代码 号 、M 代码号 、进给速度 、刀具号 、主轴速度等是否在有效范围 内 ; ③有无程序结束指令 。根据 G代码关键字函数表对 G代 码进行分解和对 G代码分组是整个解释器的骨架 ,也是进行 语法检查的基础 。对 G代码分解的设计也将影响到整个解释 器的扩展性 。
张承瑞等人10在语法分析中使用了静态指令语法规则表来规范每一条g代码指令为g代码的语法分析提供了有益参考其解释器使用vb均提及对gห้องสมุดไป่ตู้码分组的问题而关于如何对g代码进行分组以解决两条或两条以上的同组代码不能出现在一行g代码中的问题至今仍未见有报道
·200·
计算机应用研究
2006年
L inux下 G代码解释器的设计与实现 3
G代码解释器是全软件式数控系统的重要模块 。数控机 床通常使用 G代码来描述机床的加工信息 ,如走刀轨迹 、坐标 系的选择 、冷却液的开启等 ,将 G代码解释为数控系统能够识 别的数据块是 G代码解释器的主要功能 。 G代码解释器的开 放性也是设计和实现中必须要考虑的问题 。
在 G代码解释器中 ,对 G代码进行关键字分解是骨架 ,对 代码进行分组则是进行语法检查的基础 。王心光等人 [7 ]在虚 拟数控加工仿真中使用 M icrosoft的 GRETA 正则类库 ,解决了 G代码关键词分解问题 ,这种方法建立在 M icrosoft提供的工具 基础上 ,同时使用了 C + +语言 ; 付振山 [8 ]使用 VC + + 6. 0 开 发 ,构造了有穷自动机来描述在输入字符串中关键字识别模式
long line_number;
/ /行号
int g_modes[ G_CROUP_NUM ] ;
/ / G代码
int g_count;
/ / G代码数目
double start_xyz_number[ AX IS_NUM ] ; / /起点坐标
double end_xyz_number[ AX IS_NUM ] ; / /终点坐标
本文讨论了 G代码的总体架构 ;使用函数指针和 G代码 关键字函数表解决了 G代码解释器词法解释中的关键字分解 问题 ;同时提出了对 G代码进行分组 ,构建了 G代码分组语法 表 ,为 G代码的语法检查中两条或两条以上指令不能同时出 现在同一条 G代码中的问题提供了有益的参考 。 G代码解释 器使用 C语言开发 。
提到的文献也很全面!
Abstract: Base on the discussion of the hierarchy, the G2code Keyword Function Table ( GKFT) and the G2code Group ing ( GG) are p resented in detail. The GKFT is used for the decomposition of G2code keyword which is the backbone of interp re2 ter, and the use of GKFT make interp reter extensible. The GG is the foundation of the semantic analyses. So the G2code grou2 p ing and its imp lementation is described in detail. Key words: ONC; G2code Interp reter; G2code Keyword Function Table; G2code Group ing
3 G代码关键字函数表
一行 G代码的一般形式表示为 [12 ] [ Nnnnn ] Gnn[ X [ ±] nnnn. nnn ] [ Y[ ±] nnnn. nnn ] [ Z[ ±] nnnn.
nnn ] [W [ ±] nnnn. nnn ] [ I[ ±] nnnn. nnn ] [ J [ ±] nnnn. nnn ] [ K [ ±] nnnn. nnn ] [ R [ ±] nnnn. nnn ] [ Tnnn ] [ Snnn ] [Mnn ] [ Fnnnn ]
数控系统的核心任务对实时性要求高 ,所以全软件式数控 系统需要硬实时操作系统支持 。全软件式数控系统使用的硬 实时操作系统一般由通用操作系统 +实时扩展构成 ,这样能够 满足开放式数控系统对图形 、网络等通用操作系统服务的需 求 ,同时满 足 其 对实 时 性 的 要 求 。在 L inux系 统 下 , 特 别 是 L inux的 实 时 扩 展 主 要 使 用 C 语 言 开 发 , 而 实 时 扩 展 , 如 RTL inux, RTA I等 ,一般只提供了 C语言的开发方式 ,或者使用 C语言开发才能利用其全部功能 [11 ] 。关于如何使用 C语言实 现 G代码解释器未见报道 。
收稿日期 : 2005209226; 修返日期 : 2005211219 基金项目 : 四川省高新技术重点科技项目 ( 03GG006201321) ; 四川省青年软件创新基金资助项目 (2003AA0026)
2 G代码解释器的总体结构
由图 1可以看出 , G代码解释器读取 G代码 ,将其解释成 G中间代码 ,然后经过插补 、位置控制处理 ,最后由输出模块调
吉 华 1 , 李 彦 2 , 肖世广 2
(1. 四川大学 过程装备与控制工程系 , 四川 成都 610065; 2. 四川大学 制造学院 , 四川 成都 610065)
摘 要 : 在论述 G代码解释器总体结构设计的基础上 ,详细介绍了 G代码关键字函数表和 G代码分组 。 G代 码关键字的分解是解释器的骨架 ,采用 G代码关键字函数表实现对 G代码关键字的分解使解释器具有良好的 结构和扩展性 ;对 G代码的分组则是语法检查的基础 ,详细讨论了对 G代码的分组和实现 。 关键词 : 开放式数控 ; G代码解释器 ; G代码关键字函数表 ; G代码分组 中图法分类号 : TP314 文献标识码 : A 文章编号 : 100123695 (2006) 1220200203
第 12期
吉 华等 : L inux下 G代码解释器的设计与实现
·2 01 ·
用驱动程序输出到硬件 (一般为 PC I或 ISA 卡 ) 。在实际运行 中 , G代码可以如图 1的方式运行 ,也就是说 G代码的解释 ,包 括语法检查都在加工过程中进行 ,这种方式比较费时 ,不利于 加工过程 。本文设计的 G代码解释器采用了另外一种处理方 式 ,解释器有两种运行状态 : ①读取 G代码 。进行 G代码的解 释 ,包括词法检查 、语法检查等 ;将其解释成数控系统能识别的 数据块 ,即中间代码 ;将中间代码以文件的方式进行保存 。 ② 在加工的过程中 ,读取中间代码文件并运行之 。本文主要讨论 的是运行状态 ①中的问题 。
在实际系统中 ,当预处理模块去掉空格 、注释 、字母小写化 处理后 ,一行 G变为小写的关键字 +数字的重复 ,如 n10g1z2 27. 372f2。在扫描一行 G代码的过程中 ,读取一个字符 ,字符 的 ASC II值表示了对应处理函数名在 G代码关键字函数表中 的位置 ,根据字符的 ASC II码在 G代码关键字函数表中找到相 应的处理函数名 。调用相应的处理函数对相应项进行处理 ,并 移动处理过的字符的位置 ,完成语法检查和语义分析 ,如对 n10g1z227. 372f2中的 g1处理 ,读得 g;根据 g的 ASC II值在函 数 G代码关键字函数表得到函数名为 analyze_g;调用 analyze_ g对 g1进行处理 (如读取数值 1 并进行分组处理等 ) ;处理完 毕后移动读取位置到 z。如此循环直至该行 G代码处理完毕 。
的过程 ,但未谈及如何构造有穷自动机 ; 张承瑞等人 [9 ]使用 C + +语言 ,采用递归的方法实现了程序的解释过程 ;黄新燕等 人 [10 ]在语法分析中使用了静态指令语法规则表来规范每一条 G代码指令 ,为 G代码的语法分析提供了有益参考 ,其解释器 使用 VB 6. 0开发 ,使系统不具有广泛的适用性 ;文献 [ 9, 10 ] 均提及对 G代码分组的问题 ,而关于如何对 G代码进行分组 , 以解决两条或两条以上的同组代码不能出现在一行 G代码中 的问题至今仍未见有报道 。
中间代码生成模块中完成 G代码补全 (一般而言 ,与上一行程
序相同的续效字可以不写 。此时仍需检查补全后的 G代码是
否齐备 ) ,并将 G代码释义成系统定义的数据结构 。下面是 G
代码解释器解释结果的数据结构 :
typedef struct_comp ile_rst{ / / G代码译码结果
相关文档
最新文档