原文 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. Haar小波分析

    一 尺度函数与小波函数 基本尺度函数定义为:,对其向右平移任意 k 个单位,构成函数族 , 该函数族在 空间中正交,证明如下: 1 : 2 当 m 不等于 k 时, 函数族  构成一组正交基,并形成  ...

  2. 操作系统发展史 & 进程

    今日内容 UDP协议 操作系统发展史 进程 单核情况下的进程调度 进程三状态图 同步异步 阻塞非阻塞 内容详细 一.UDP协议 1.什么是UDP协议 UDP是传输层的协议,功能即为在IP的数据报服务之 ...

  3. Solution -「CF 1586F」Defender of Childhood Dreams

    \(\mathcal{Description}\)   Link.   定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...

  4. aspnetcore 使用serilog日志

    而在实际项目开发中,使用第三方日志框架来记录日志也是非常多的,首先一般基础的内置日志记录器在第三方日志框架中都有实现,然后很多第三方日志框架在功能上更强大和丰富,能满足我们更多的项目分析和诊断的需求. ...

  5. Process Doppelg&#228;nging

    进程注入:Process Doppelgänging   攻击者可以通过Process Doppelgänging将恶意代码注入到进程中,从而逃避基于进程的防护,并且进行可能的特权提升.Process ...

  6. python好用的函数或对象

    1.ljust.rjust "hello".ljust(10,"x") #将字符串hello做对齐,并且用字符'x'补到10个字符 #输出为:helloxxxx ...

  7. 关于mybatis,需要掌握的基础

    目录 ❀ 总结 mybatis,需要掌握的基础如下: 1.了解ORM 思想.ORM思想的作用.映射配置的两种方式 2.MyBatis开发流程(基本使用) 3.日志框架 4.了解mybatis生命周期并 ...

  8. 关于 ios 动画枚举翻译

    例子 + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewA ...

  9. JDK动态代理为什么必须要基于接口?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 前几天的时候,交流群里的小伙伴抛出了一个问题,为什么JDK的动态代理一定要基于接口实现呢? 好的安排,其实要想弄懂这个问题还是需要一些关于代理和 ...

  10. LibOpenCM3(五) 基础功能: 系统时钟, GPIO, 定时器

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