LinuxCNC中RS-274/NGC解析器的编译和使用

原文 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/

 

posted @ 2021-03-26 21:18  蔡子CaiZi  阅读(2337)  评论(0编辑  收藏  举报