原文 http://blog.sina.com.cn/s/blog_a2a6dd380102vrai.html
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
第一部分 編譯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文件的內容。

在該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,回車,會出現如下界面:

當選擇 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,會出現如下所示的另外一個菜單,上邊的菜單也會再次出現:

此時如果用戶選擇 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會話過程如下:

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://wiki.linuxcnc.org/cgi-bin/wiki.pl?StandAloneInterpreter
https://code.google.com/p/rs274ngc/