原文 http://blog.sina.com.cn/s/blog_a2a6dd380102vrai.html

LinuxCNC是一个著名的开源数控软件,目前最新发行版本是:LinuxCNC 2.6.8,截止2015/6/14.LinuxCNC来源于NISTEMC项目,先后推出了EMC1EMC2,由于与EMC公司的版权纠纷,遂改名为LinuxCNC。

LinuxCNC源码中包含一个独立的G代码(RS-274)解析器(Stand Alone Interpreter,下文我们简称SAI),我们可以自己编译得到SAI

以下部分是对SAI编译过程和使用过程的详细介绍。​

编译环境简介:

安装在VMware Workstation 9.0.0上的Ubuntu 10.04虚拟机,你也可以选择在 其他的环境下进行编译。

​ 你可以在这里下载得到RS274NGC_3独立解析器的源代码rs274ngc2.zip和说明文档RS274NGC_3.pdf:

https://code.google.com/p/rs274ngc/downloads/list

第一部分 编译SAI

1.进入源代码所在目录,该目录包含以下11个文件:

​​a.源代码文件(7个) :

canon.hh  rs274ngc_return.hh  rs274ngc.hh

​canon_pre.cc  driver.cc   rs274ngc_error.cc  rs274ngc_pre.cc

b.参数文件(2个):rs274ngc.tool_default    rs274ngc.var

c.makefile文件(1个):Makefile

d.版权信息文件(1个):COPYING

2.源代码文件介绍

   3.Ubuntu 10.04虚拟机上用GNU-G++编译解析器源代码,我们先看一下源代码目录下Makefile文件的内容。​

Makfile文件内容

​      在该Makefile中,我们可以发现,在编译时三种类型的编译器选项

      (1)轴存在选项(axis existence options) -DAA,-DBB,and -DCC;

 (2)-DALL_AXES;

      ​(3)-DAXIS_ERROR.

其中,轴存在选项是针对拥有不同旋转轴组合的数控机床的编译而设定的。-DAA 意味着包含A-axis,-DBB 意味着包含B-axis;-DCC意味着包含C-axis.  -DALL_AXES选项,如果你想让解析器在标准加工函数调用时包含所有的三个旋转轴的话,需要使用此选项。-DAXIS_ERROR选项,如果RS274/NGC程序的一个输入用到了解析器不能编译的一个旋转轴时,你若想要解析器报告该错误的话,需要使用此选项.

​该Makefile对于每一个选项都给出了实例。这些选项组合总共能够得到29个不同的可执行程序(1个包含全部三个旋转轴的,4组每组包含少于3个旋转轴的组合).

4.参数文件:rs274ngc.tool_default 和 rs274ngc.var

注意:要执行SAI,必须要有刀具信息文件和参数信息文件。

a.rs274ngc.tool_default:该文件包含了刀具信息;    

b.rs274ngc.var:该文件包含了参数信息.

这两个文件均为LinuxCNC自带的配置文件,用户可以按照上述文件中的格式,根据实际需要编写自己的参数和刀具信息文件。

5.用户要得到一个3-axix的名为"rs274"的可执行的SAI,需要在当前目录下执行如下命令:make rs274;

     ​这样我们便得到了一个可执行的RS274/NGC的解析器:"rs274".

第二部分 使用SAI

1.执行命令./rs274

Ubuntu 10.04 虚拟机的终端中输入:./rs274,回车,会出现如下界面:

执行命令./rs274

当选择 1 的时候,菜单消失,解析开始。用户可能选择2到5之间的数字0次,1次或者很多次;只有这些选项的最终的设定才是有效的。

如果用户选择 2 或 3 的时候,用户会被提示输入文件的名字,并且再次出现相同的菜单。

​如果用户选择 4 ,会再次弹出相同的菜单,由"turn block delete switch ON"转换为"turn block delete switch OFF",当 4 被选中的时候,两个开关进行来回切换。(注意:如果块删除开关(block delete)打开,那么以"/"开头的RS274/NGC的代码行,将不会被解析;如果块删除开关关闭,那么以 "/" 开头的G代码行正常解析)。

​    如果用户选择5,会出现如下所示的另外一个菜单,上边的菜单也会再次出现:

When Choice  is 5

此时如果用户选择 1,前边的菜单会再次出现。如果用户选择 2,会弹出同样相同的菜单,同时"print stack on error"变换为"do not print stack on error";当 2 被选择的时候,两个开关会来回进行切换.

2.通过键盘输入运行SAI

当用户键盘输入(MDI)以下命令的时候SAI被调用:          

       rs274

用户会看到上边出现的菜单。输入 1 ,执行完毕后,会出现以下两步循环直到用户退出:

​(1)SAI输出提示符 READ =>

(2)当用户输入一行RS274/NGC代码,按下Enter键,该行代码就会被解析,解析结果默认出现在命令行终端上。

用户进行键盘输入的时候,只有当SAI读到一行含有"quit"的单词后才会退出。"quit"的各种变种都是有效的,例如"Q uI t"

一个简单的通过键盘输入工作的SAI会话过程如下:

SAI键盘输入会话过程

3.通过输入RS274/NGC文件运行SAI

用户可以通过终端输出或者文件输出两种方式来处理SAI文件输入操作。两种不同的方式下输出结果都是对标准加工函数(canonical machining functions)的调用。

a.对于终端输出操作,运行如下命令:

         rs274 input_filename

这里的input_filename 是一个RS274/NGC输入文件的名字,该命令执行后正常的SAI输出会出现在标准输出上(屏幕).

b.对于文件输出操作,运行如下命令:

       rs274 input_filename output_filename

这里的output_filename是输出文件的名字。如果该文件不存在,就会新建一个;如果确实存在,原文件将会被覆盖。

在这里,我们把要解析的RS274/NGC文件放在当前目录下,比如我们使用cds.ngc文件作为输入文件,对于终端输出方式,会得到以下类似的结果:

​执行命令:rs274 cds.ngc

309 N3500 STOP_SPINDLE_TURNING<>

310 N3510 SET_ORIGIN_OFFSETS<0.0000,0.0000,0.0000>

311 N3510 STOP_SPINDLE_TURNING<>

312 N3510 PROGRAM_END<>

对于文件输出输出,假设我们指定输出到cds.prim中:

执行命令:rs274 cds.ngc cds.prim

解析得到的结果就保存在了cds.prim文件中了。

参考链接:

http://www.linuxcnc.org

http://wiki.linuxcnc.org/cgi-bin/wiki.pl?StandAloneInterpreter

https://code.google.com/p/rs274ngc/

LinuxCNC中RS-274/NGC解析器的编译和使用的更多相关文章

  1. SSM-SpringMVC-12:SpringMVC中BeanNameViewResolver这种视图解析器

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 视图解析器,这个很熟悉啊,之间就用过,就是可以简写/和.jsp的InternalResourceViewRes ...

  2. Spring boot中自定义Json参数解析器

    转载请注明出处... 一.介绍 用过springMVC/spring boot的都清楚,在controller层接受参数,常用的都是两种接受方式,如下 /** * 请求路径 http://127.0. ...

  3. 学习SpringMVC——说说视图解析器

    各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...

  4. PHP Simple HTML DOM解析器

    一直以来使用php解析html文档树都是一个难题.Simple HTML DOM parser 帮我们很好地解决了使用 php html 解析 问题.可以通过这个php类来解析html文档,对其中的h ...

  5. 高性能Java解析器实现过程详解

    如果你没有指定数据或语言标准的或开源的Java解析器, 可能经常要用Java实现你自己的数据或语言解析器.或者,可能有很多解析器可选,但是要么太慢,要么太耗内存,或者没有你需要的特定功能.或者开源解析 ...

  6. boost之词法解析器spirit

    摘要:解析器就是编译原理中的语言的词法分析器,可以按照文法规则提取字符或者单词.功能:接受扫描器的输入,并根据语法规则对输入流进行匹配,匹配成功后执行语义动作,进行输入数据的处理. C++ 程序员需要 ...

  7. SpringMVC(三)-- 视图和视图解析器、数据格式化标签、数据类型转换、SpringMVC处理JSON数据、文件上传

    1.视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象 对于那些返回 String,View 或 ModeMap 等类型的处理方法,SpringMVC 也会在内部将 ...

  8. PHP Simple HTML DOM解析器使用入门

    http://www.cnphp.info/php-simple-html-dom-parser-intro.html 一直以来使用php解析html文档树都是一个难题.Simple HTML DOM ...

  9. DRF之频率限制、分页、解析器和渲染器

    一.频率限制 1.频率限制是做什么的 开放平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用. 2.频率组件原理 DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通 ...

随机推荐

  1. jquery里的Ajax解析

    现在对Jquery的Ajax进行详细的解析. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百 ...

  2. Solution -「ARC 063D」「AT 2149」Snuke's Coloring 2

    \(\mathcal{Decription}\)   Link.   平面上有一个左下角坐标 \((0,0)\) 右上角坐标 \((W,H)\) 的矩形,起初长方形内部被涂白. 现在给定 \(n\) ...

  3. MySQL表单查询

    一.表单查询的语法 select 字段1.字段2....from 表名 where MySQL备份

  4. LibOpenCM3(四) VSCode IDE 环境配置

    目录 LibOpenCM3(一) Linux下命令行开发环境配置 LibOpenCM3(二) 项目模板 Makefile分析 LibOpenCM3(三) .ld文件(连接器脚本)和startup代码说 ...

  5. [题解]Mail.Ru Cup 2018 Round 1 - C. Candies Distribution

    [题目] C. Candies Distribution [描述] n个小朋友排排坐吃糖糖,小朋友从左到右编号1到n.每个小朋友手上有一定数量的糖.对于第i个小朋友来说,编号比他小的小朋友中有li个小 ...

  6. [Java]Thinking in Java 练习2.10

    题目 编写一个程序,打印出从命令行获得的三个参数.为此,需要确定命令行数组中String的下标. 代码 1 public class Ex2_10 { 2 public static void mai ...

  7. [Java]Java中的自动包装

    来源:https://www.cnblogs.com/cheapcrook/archive/2012/04/25/2470478.html 自动拆装箱(AutoBoxing) 是JDK1.5中新增加的 ...

  8. Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)

    目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...

  9. 一个C#程序的执行过程

    可能很多人都知道我们把程序打包成dll就丢出去了,但是里面的具体的执行过程是怎么样的呢. 程序集是由元数据和IL组成的.IL是和CPU无关的语言,是微软的几个专家请教了外面的编译器的作则,开发出来的. ...

  10. javaScript(js)手写原生任务定时器源码

    javaScript(js)手写原生任务定时器 功能介绍 定时器顾名思义就是在某个特定的时间去执行一些任务,现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务 ...