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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Abstract: Base on the discussion of the hierarchy, the G-code Keyword Function Table ( GKFT) and the G-code Grouping ( GG) are presented in detail. The GKFT is used for the decomposition of G-code keyword which is the backbone of interpreter, and the use of GKFT make interpreter extensible. The GG is the foundation of the semantic analyses. So the G-code grouping and its implementation is described in detail. Key words: ONC; G-code Interpreter; G-code Keyword Function Table; G-code Grouping
typedef struct_compile_rst{ long line_number; int g_modes[ G_CROUP_NUM] ; int g_count; double start_xyz_number[ AXIS_NUM] ; double end_xyz_number[ AXIS_NUM] ; int m_modes[ M_CROUP_NUM] ; int m_count; double r_number; int t_number; … struct _compile_rst * next;
在 G 代码解释器中, 对 G 代码进行关键字分解是骨架, 对 代码进行分组则是进行语法检 查的基 础。 王心光 等人[ 7] 在 虚 拟数控加工仿真中使用 Microsoft 的 GRETA 正 则类库, 解决 了 G 代码关键词分解问题, 这种方法建立在 Microsoft 提供的工具 基础上, 同时使 用 了 C ++ 语 言; 付 振 山[ 8] 使 用 VC ++ 6. 0 开 发, 构造了有穷自动机来描述在输入字符串中关键字识别模式
本文讨论了 G 代码的总体架构; 使用函数指针和 G 代码 关键字函数表解决了 G 代码解释器词法解释中的关键字分解 问题; 同时提出了对 G 代码进行分组, 构建了 G 代码分组语 法 表, 为 G 代码的语 法检 查中 两条 或两 条以 上指 令不 能同 时 出 现在同一条 G 代码中的问题提供了有益的参考。G 代码解释 器使用 C 语言开发。
nnnn. nnn] [ R[ ±] nnnn. nnn] [ Tnnn] [ Snnn] [ Mnn] [ Fnnnn]
虽然表达式并没有涵盖 G 代码的所有语言现象, 但是从 表示式可看出: ①G 代码的句子为关键字 + 数字 + ( 空格) + 结束符的形式, 其中空格在句子中没有实际的语义; ②G 代码 的关键字并不多, 主要有 N, G, X, Y, Z, W, I, J, K, R, M, S, T, F 等, 在实际的过程中, 机床制造 商和用 户可能 对关键 字进行 扩 展; ③不同的关键字所对应的项目有不同的语法要求。
G 代码解释器
插补模块
位置控制模块
输出模块
来自百度文库
G 代码
G 中间代码
插补结果数据 位控结果数据
图 1 G 代码解释器在数控系统中的作用
G 代码加工语言不像其他一些算法语言那样复杂, 它 的语
言现象较简单一些。考虑到效率及实用性, 把词法分析与语法 分析有机地结合在一起, 实际应 用中证 明这样 做实用 性强、程 序效率高、可扩充性好[ 12] 。图 2 表示一行 G 代码的处理过程,
1 引言
数控技术是数控机床的关键技术, 数控机床是工厂实现自 动化的基础, 目 前 国 内 70% 的 数 控机 床 需 要 从 国 外进 口[ 1] 。 数控系统在体系 结构 上的 发展 趋 势是 开放 性[ 2] , 即 开放 式 数 控系统。对于开放式数控系统, 不同的机构和学者有不同的提 法, 可 扩 展 性、可 移 植 性、可 互 换 性、互 操 作 性 是 其 基 本 特 征[ 3,4] 。开放式数控发展到今天, 软硬 件技术 的发展 使得要 求 硬实时的数控系统核心任务应用软件实现成为可能, 基于 PC, 尽可能多地使用软件实现数控 系统功 能的全 软件式 数控成 为 开放式数控实现 的主 要途 径 之一[ 5, 6] 。 软件 的 开放 性直 接 影 响到 数 控 系 统 的 开 放 性 。
· 200·
计算机应用研究
2006 年
Linux 下 G 代 码 解 释 器 的 设 计 与 实 现 *
吉 华1 , 李 彦2 , 肖世广2
( 1 . 四 川大 学 过程装 备与 控制 工程 系, 四 川 成都 610065; 2. 四川 大学 制 造学 院, 四 川 成都 610065)
摘 要: 在论述 G 代码解释器总体结构设计的基础上, 详细介绍了 G 代码关键字函数表和 G 代码分组。G 代

图 2 G 代码解释器框架示意图
在根据 G 代码关键字函数表对 G 代码进行分解和将 G 码 和 M 码进行分组的基础 上, 对分 解得到 的各 项进 行细 化的 语 法分析, 如: ①N, G, M, Y, Z 等关 键字后是否 是数字; ②G 代 码 号、M 代码号、进给速度、刀具号、主轴 速度等 是否在 有效范 围 内; ③有无程序结束指 令。根据 G 代码 关键 字函数 表对 G 代 码进行分解和对 G 代 码分组 是整 个解 释器 的骨 架, 也是 进 行 语法检查的基础。对 G 代码分解 的设计也将 影响到 整个解 释 器的 扩 展 性 。
文献标识码: A
文章 编号 : 1001- 3695( 2006) 12- 0200 - 03
Design and Implementation of G-code Interpreter in Linux Environment
JI Hua1 , LI Yan2 , XIAO Shi-guang2
} COMPILE_RST, * PCOMPILE_RST;
/ /G 代码译码结果 / /行号 / /G代码 / /G 代码数目 / /起点坐标 / /终点坐标 / /M 代码 / /M 代码数目 / /半径值 / /刀具号
刀具表 系统参数表 错误信息表
预处理 词法分析语法检查
G 中间代码生成
函数表 G 代码分组表
预处理模块完成去除空格、注释、字母小写化等; 词法分析和语 法检查结合在一起, 根据 G 代 码关 键字 函数 表对 G 代 码进 行
分解, 在 G 代码( 此处 G 代码包括所 有代码, G 码 和 M 码分 别 指 G关键字和 M 关键字代码) 解释中将 G 码和 M 码进行分
组, 根据其他关键字( 如 f, s 等) 和分 组的 G 码、M 码 分别进 行
( 1. Dept. of Process Equipment & Control Engineering, Sichuan University, Chengdu Sichuan 610065, China; 2 . College of Manufacturing Science & Engineering, Sichuan University, Chengdu Sichuan 610065, China)
收稿日期: 2005- 09- 26; 修返日期: 2005- 11- 19 基金项目: 四川省高新技术重 点科技 项目( 03GG006- 013-1) ; 四川省青年软件创新基金资助项目( 2003AA0026)
2 G 代码解释器的总体结构
由图 1 可以看出, G 代码 解释器 读取 G 代码, 将 其解释 成 G 中间代码, 然后经过插补、位置控制处理, 最后由输出模块 调
语法检查, 整个过程中 将错误 信息收 集在错 误信 息表中; 在 G 中间代码生成模块中完成 G 代码补全 ( 一般而言, 与上一 行程
序相同的续效字可以不写。此时 仍需检查补 全后的 G 代码 是 否齐备) , 并将 G 代码释义成系统定义 的数据 结构。下面是 G
代码 解 释 器 解 释 结 果 的 数 据 结构 :
在实际系统中, 当预处理模块去掉空格、注释、字母小写化 处理后, 一 行 G 变 为小 写的 关键 字 + 数字 的重 复, 如 n10g1z27. 372f2。在扫描一行 G 代 码的 过程 中, 读取 一个 字符, 字 符 的 ASCII 值表示了对应处理函数 名在 G 代码 关键字 函数表 中 的 位置, 根据字符的 ASCII 码在 G 代码关键字函数表中找到相 应的处理函数名。调用相应的处理函数对相应项进行处理, 并 移动处理过的字符的位置, 完成语法检查和语义分析, 如对 n10g1z-27. 372f2 中的 g1 处理, 读 得 g; 根据 g 的 ASCII 值在 函 数 G 代码关键字函数表得到函数名为 analyze_g; 调用 analyze_ g 对 g1 进行处理( 如读取 数值 1 并 进行 分组 处理 等) ; 处理 完 毕后移动读取位置到 z。如此循环直至该行 G 代码处理完毕。
数控系统的核心任务对实时性要求高, 所以全软件式数控 系统需要硬实时操作系统 支持。全软 件式数 控系统 使用的 硬 实时操作系统一般由通用操作系统 + 实时扩展构成, 这样能够 满足开放式数控 系统 对 图形、网 络 等通 用操 作 系统 服务 的 需 求, 同时 满 足 其 对 实 时 性 的 要 求。 在 Linux 系 统 下, 特 别 是 Linux 的 实 时 扩 展 主 要 使 用 C 语 言 开 发, 而 实 时 扩 展, 如 RTLinux, RTAI 等, 一般只提供了 C 语言的开发方式, 或者使 用 C 语言开发才能利用其全部功能 [ 11] 。关于如何使用 C 语言 实 现 G代码解释器未见报道。
第 12 期
吉 华等: Linux 下 G 代码解释器的设计与实现
· 201·
用驱动程序输出到硬件( 一 般为 PCI 或 ISA 卡 ) 。在 实际运 行 中, G 代码可以如图 1 的方式运行, 也就是说 G 代码的解释, 包 括语法检查都在加工过程中 进行, 这种 方式比 较费时, 不利 于 加工过程。本文设计的 G 代码解 释器采用了 另外一 种处理 方 式, 解释器有两种运行状态: ①读取 G 代码。进 行 G 代码 的解 释, 包括词法检查、语法检查等; 将其解释成数控系统能识别的 数据块, 即中间代码; 将中 间代码 以文件 的方式 进行保 存。② 在加工的过程中, 读取中间代码文件并运行之。本文主要讨论 的是 运 行 状 态 ① 中 的 问 题 。
的过程, 但未 谈及 如 何 构 造 有 穷 自 动机; 张 承 瑞 等 人[ 9] 使 用 C ++ 语言, 采用递归的方法实现了程序 的解释过程; 黄新燕 等 人 [ 10] 在语法分析中使用了静态指令语法规则表 来规范每一 条 G 代码指令, 为 G 代码的语法分析提供了有益参考, 其解释器 使用 VB 6. 0 开 发, 使 系统 不具 有广 泛的 适用 性; 文献 [ 9, 10] 均提及对 G 代码分组的问题, 而关于如何对 G 代码进行分组, 以解决两条或两条以上的同组 代码不能出现 在一行 G 代码 中 的问题至今仍未见有报道。
G 代码解释器是全软件式数控系统的重要模块。数控机 床通常使用 G 代码来描述机床的加工信 息, 如 走刀轨 迹、坐 标 系的选择、冷却液的开启等, 将 G 代码解释为 数控系 统能够 识 别的数据块是 G 代码解释器的 主要功 能。G 代码解 释器的 开 放性 也 是 设 计 和 实 现 中 必 须 要考 虑 的 问 题 。
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 [ ±]
码关键字的分解是解释器的骨架, 采用 G 代码关键字函数表实现对 G 代码关键字的分解使解释器具有良好的
结构和扩展性; 对 G 代码的分组则是语法检查的基础, 详细讨论了对 G 代码的分组和实现。
关键词: 开放式数控; G 代码解释器; G 代码关键字函数表; G 代码分组
中图 法分 类号 : TP314
相关文档
最新文档