在 LinuxCNC 中编译和使用 RS-274/NGC 解析器
LinuxCNC中RS-274/NGC解析器的编译和使用
转载2015-10-09 21:11:20
标签:linuxcncrs274/ngc解析器
LinuxCNC是一个著名的开源数控软件,目前最新发行版本是:LinuxCNC 2.6.8,截止2015/6/14.LinuxCNC来源于NIST的EMC项目,先后推出了EMC1和EMC2,由于与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
转载:http://blog.sina.com.cn/s/blog_a2a6dd380102vrai.html
第一部分 编译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.在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 解析器
-
在 LinuxCNC 中编译和使用 RS-274/NGC 解析器
-
.NET高级面试指南 Topic XVIII [ 介绍外观模式(Appearance Pattern),该模式提供了一个隐藏系统复杂性的简化界面 ]。- 简化复杂系统:当系统具有复杂的子系统结构时,可以使用外观模式来简化界面。提供统一界面:当客户端需要访问多个子系统时,可以使用外观模式提供统一界面。 外观模式在现代软件开发中得到广泛应用,尤其是在复杂系统中。例如 图形用户界面库:许多图形用户界面库(如 Qt、GTK+ 等)都使用外观模式来隐藏底层的复杂性,并为开发人员提供简单的界面来创建用户界面。 操作系统接口:操作系统中的系统调用和应用程序接口通常也使用外观模式来隐藏底层硬件和系统的复杂性,为应用程序提供访问系统资源的简单接口。企业应用程序:在可能涉及多个子系统的大型企业应用程序中,外观模式可用于封装这些子系统,并为客户端提供统一的使用界面。 网络框架:许多网络框架(如 ASP.NET MVC、Spring MVC 等)也使用外观模式来隐藏底层的复杂性,并为开发人员提供简单的接口来处理 HTTP 请求和响应。 集成开发环境(IDE):集成开发环境通常包含代码编辑器、编译器、调试器等多种功能。外观模式可用于封装这些功能,并为开发人员提供开发软件的简单界面。 代码示例:
-
Java 类加载器的作用 - 简介:类加载器是 Java™ 中一个非常重要的概念。类加载器负责将 Java 类的字节码加载到 Java 虚拟机中。本文首先详细介绍了 Java 类加载器的基本概念,包括代理模型、加载类的具体过程和线程上下文类加载器等。然后介绍了如何开发自己的类加载器,最后介绍了类加载器在 Web 容器和 OSGi™ 中的应用。 类加载器是 Java 语言的一项创新,也是 Java 语言广受欢迎的重要原因之一。它允许将 Java 类动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 开始出现,最初是为了满足 Java Applets 的需求而开发的,Java Applets 需要从远程位置下载 Java 类文件并在浏览器中执行。现在,类加载器已广泛应用于网络容器和 OSGi。一般来说,Java 应用程序的开发人员不需要直接与类加载器交互;Java 虚拟机的默认行为足以应对大多数情况。但是,如果遇到需要与类加载器交互的情况,而您又不太了解类加载器的机制,就很容易花费大量时间调试异常,如 ClassNotFoundException 和 NoClassDefFoundError。本文将详细介绍 Java 的类加载器,帮助读者深入理解 Java 语言中的这一重要概念。下面先介绍一些基本概念。 类加载器的基本概念 顾名思义,类加载器用于将 Java 类加载到 Java 虚拟机中。一般来说,Java 虚拟机以如下方式使用 Java 类:Java 源程序(.java 文件)经 Java 编译器编译后转换为 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码并将其转换为 java.lang 实例。每个实例都用来表示一个 Java 类。通过该实例的 newInstance 方法创建该类的对象。实际情况可能更加复杂,例如,Java 字节代码可能是由工具动态生成或通过网络下载的。 基本上,所有类加载器都是 java.lang.ClassLoader 类的实例。下面将详细介绍这个 Java 类。 java.lang.ClassLoader 类简介 java.lang.ClassLoader 类的基本职责是根据给定类的名称为其查找或生成相应的字节码,然后根据这些字节码定义一个 Java 类,即 java.lang.Class 类的实例。除此之外,ClassLoader 还负责加载 Java 应用程序所需的资源,如图像文件和配置文件。不过,本文只讨论它加载类的功能。为了履行加载类的职责,ClassLoader 提供了许多方法,其中比较重要的方法如表 1 所示。下文将详细介绍这些方法。 表 1.与加载类相关的 ClassLoader 方法
-
南邮OJ Web任务大揭秘:层层挑战剖析 1. 挑战一:迷宫般的目录探索 题目作者似乎穷举了所有可能的目录组合,最终在404.php中的