莊源昌,高羅卿,吳新明
(1.常州數(shù)控技術(shù)研究所 研發(fā)部,江蘇 常州 213164;2.常州輕工職業(yè)技術(shù)學(xué)院 電子電氣工程系,江蘇 常州 213164;3. 江南現(xiàn)代工業(yè)研究院 研發(fā)部,江蘇 常州 213164)
平臺(tái)可移植的數(shù)控系統(tǒng)G代碼解釋器的設(shè)計(jì)*
莊源昌1,高羅卿2,吳新明3
(1.常州數(shù)控技術(shù)研究所 研發(fā)部,江蘇 常州 213164;2.常州輕工職業(yè)技術(shù)學(xué)院 電子電氣工程系,江蘇 常州 213164;3. 江南現(xiàn)代工業(yè)研究院 研發(fā)部,江蘇 常州 213164)
嵌入式數(shù)控系統(tǒng)的硬件和軟件往往需要定制化服務(wù),針對(duì)嵌入式數(shù)控系統(tǒng)的平臺(tái)多樣化的要求,設(shè)計(jì)了一種ARM+運(yùn)動(dòng)芯片的嵌入式開放性數(shù)控系統(tǒng)的硬件平臺(tái),并以Qt/Embedded為軟件開發(fā)平臺(tái),利用多進(jìn)程編程技術(shù),設(shè)計(jì)數(shù)控系統(tǒng)的G代碼解釋功能模塊,實(shí)現(xiàn)了對(duì)變量、表達(dá)式和宏程序的解析,并通過實(shí)驗(yàn)驗(yàn)證了G代碼解釋模塊的可行性。模塊界面友好,操作簡單,移植方便,有很高的工程應(yīng)用價(jià)值。
Qt/Embedded;ARM;運(yùn)動(dòng)芯片;多進(jìn)程;G代碼解釋器
數(shù)控技術(shù)是機(jī)械加工技術(shù),微電子技術(shù),監(jiān)控檢測(cè)技術(shù),計(jì)算機(jī)技術(shù),自動(dòng)控制技術(shù)等多種學(xué)科的集成,對(duì)機(jī)電工業(yè)及國民經(jīng)濟(jì)的發(fā)展具有十分重要的作用。嵌入式開放式數(shù)控系統(tǒng)具有系統(tǒng)結(jié)構(gòu)簡單,成本低,方便應(yīng)用于中小規(guī)模應(yīng)用場(chǎng)合,近年來進(jìn)入了一個(gè)高速發(fā)展的階段。與傳統(tǒng)的數(shù)控系統(tǒng)[5-7]PC+運(yùn)動(dòng)控制卡的結(jié)構(gòu)方案相比較,嵌入式開放式數(shù)控系統(tǒng)具有體積小,成本低,功耗低等優(yōu)點(diǎn)。
Qt/Embedded[2]作為跨平臺(tái)的圖形用戶界面工具包,它通過QtAPI與LINUX I/O以及Framebuffer直接交互,擁有較高的運(yùn)行效率,而且整體采用面向?qū)ο缶幊蹋瑩碛辛己玫捏w系架構(gòu)和編程模式。只要用Qt編寫過一次代碼,那么在其他不同的操作系統(tǒng)平臺(tái)中,只需重新將其編譯一遍即可重復(fù)使用,具有廣泛適應(yīng)性和良好的可移植性。
嵌入式開放式數(shù)控系統(tǒng)的特點(diǎn)[3]是可以根據(jù)實(shí)際的需求定制系統(tǒng)的硬件和軟件功能,解決傳統(tǒng)數(shù)控系統(tǒng)中靈活性差和不易擴(kuò)展的缺陷。在嵌入式開放式數(shù)控系統(tǒng)的工程方案選擇中,往往需要根據(jù)不同的需求應(yīng)用,選擇不同的系統(tǒng)平臺(tái),G代碼解釋器是數(shù)控系統(tǒng)的一個(gè)核心模塊,這就需要一個(gè)能夠方便的移植于各類系統(tǒng)之間的G代碼解釋器。
與一般的解釋器[5-10]使用Visual Studio或VC++等WINDOWS平臺(tái)下的開發(fā)工具相比,或與有些嵌入式數(shù)控系統(tǒng)[3]在UCOS系統(tǒng)平臺(tái)上開發(fā)相比,采用Qt平臺(tái)開發(fā)G代碼解釋器具有可移植性強(qiáng)的優(yōu)點(diǎn),解決了解釋器只能在單一平臺(tái)下使用,代碼移植難的問題。在Qt平臺(tái)上將G代碼解釋器作為一個(gè)獨(dú)立的進(jìn)程,利用Qt自身的進(jìn)程間通訊方式,可以方便的適應(yīng)多種系統(tǒng),增加代碼的重用性。
系統(tǒng)采用ARM11為主處理器,采用上下位分離的模式,下位采用ARM7+運(yùn)動(dòng)控制芯片的方式,構(gòu)建了一個(gè)開放式的嵌入式小型數(shù)控的硬件平臺(tái),上下位采用CAN總線通訊,移植CANopen上層通訊協(xié)議。

圖1 數(shù)控系統(tǒng)軟件架構(gòu)
如圖1所示,上位系統(tǒng)以Qt/Embedded為軟件開發(fā)平臺(tái),負(fù)責(zé)數(shù)控系統(tǒng)的GUI界面開發(fā),完成觸摸屏的人機(jī)交互任務(wù)。Qt支持多進(jìn)程的GUI編程,將系統(tǒng)分離成多個(gè)GUI進(jìn)程,有利于系統(tǒng)模塊化開發(fā)和維護(hù),系統(tǒng)的各GUI層都通過后臺(tái)任務(wù)管理器調(diào)度,系統(tǒng)后臺(tái)有獨(dú)立的G代碼解釋器,G代碼解釋器接受任務(wù)管理器的任務(wù),執(zhí)行G解釋任務(wù),將結(jié)果返回給任務(wù)管理器,CAN通訊進(jìn)程則負(fù)責(zé)上下位實(shí)時(shí)通訊,完成指令任務(wù)。
G代碼解釋器的主要作用是將加工圖形信息,行走速度和其他M輔助信息按一定的規(guī)律解釋成控制系統(tǒng)能識(shí)別的數(shù)據(jù)格式。
G代碼分為不同的組[4],大多數(shù)的G代碼是模態(tài)的,模態(tài)G代碼不只在當(dāng)前的程序段中起作用,而且在以后的程序段中一直起作用,直到程序中出現(xiàn)另一個(gè)同組的G代碼為止,同組的模態(tài)G代碼控制同一個(gè)目標(biāo)但起不同的作用,它們之間是不相容的。
Group0組的G代碼是非模態(tài)的,這些G代碼只在它們所在的程序段中起作用。標(biāo)有*號(hào)的G代碼是上電時(shí)的初始狀態(tài)。對(duì)于G01和G00、G90和G91上電時(shí)的初始狀態(tài)由參數(shù)決定。例如:
G代碼模態(tài)分組:
Group1= {G00,G01,G02,G03,G33…};運(yùn)動(dòng)組
Group3={G90,G91};編程指令方式
Group6={G20,G21};公英制選擇
Group7={G40,G41,G42};刀具半徑補(bǔ)償
Group12={G54,G55,G56…};坐標(biāo)系選擇
G代碼非模態(tài)分組:
Group0= {G04, G09,G10,G28,G29…};
2.1 G代碼解釋流程設(shè)計(jì)
G代碼解釋模塊首先將整個(gè)G代碼文件讀入到解釋進(jìn)程的緩沖中,然后逐行讀入G代碼,經(jīng)過詞法檢查、語法檢查,數(shù)據(jù)提取,中間代碼生成,直到全部程序解釋完畢。圖2所示的是G代碼解釋的基本流程圖。
詞法檢查主要是判斷數(shù)據(jù)和字符是否是非法的,對(duì)不合法的字符進(jìn)行出錯(cuò)報(bào)警。主要有代碼指令:如G、M、常數(shù)、整型數(shù)等;運(yùn)算符:+、-、*、/、>、<等;界限符:行結(jié)束符。檢查程序格式是否合法,組詞規(guī)則等等。
語法檢查主要是根據(jù)G代碼標(biāo)準(zhǔn),檢查語法規(guī)則,參數(shù)的合法性和有效性,生成語法小短句是否合法,語義的規(guī)則有沒有沖突等。如模態(tài)的檢查,同組模態(tài)的G指令只能出現(xiàn)一次,地址符后是否是數(shù)字還是公式,X、Y等軸的運(yùn)動(dòng)參數(shù)是否越界等。
中間數(shù)據(jù)生成主要是依據(jù)一定的算法,掃描一行G代碼后,將要加工的指令和數(shù)據(jù),解釋存儲(chǔ)在固定結(jié)構(gòu)體中,方便程序使用。

圖2 G代碼解釋流程圖
2.2 數(shù)據(jù)結(jié)構(gòu)
構(gòu)建G解釋器的中間代碼數(shù)據(jù)結(jié)構(gòu),主要作用是依據(jù)解釋算法,生成G、M代碼的模態(tài)及參數(shù),標(biāo)號(hào)和行號(hào)的信息,以及控制類的狀態(tài)和標(biāo)號(hào)等。
typedef struct gcode_struct{
int g_modes[MAX_G_GROUP];
int g_count; //G代碼數(shù)量
int m_modes[MAX_M_GROUP];
int m_count; //M代碼數(shù)量
int motion_to_be; //運(yùn)動(dòng)指令
int udefg,udefm; //用戶定義的G,M代碼
double a,b,c,d,e,f,g,h,i,j,k; //參數(shù)
double m,p,q,r,s,t,u,v,w,x,y,z,o;//參數(shù)
int label; //標(biāo)號(hào)
int lineno; //行號(hào)
bool block_delete; //段忽略標(biāo)示
int control_type[MAX_C_GROUP];
int c_count; //C控制數(shù)目
bool condition;
int jmpto_lable;
} Gcode,*Gcode_pointer;
其中,g_modes[MAX_G_GROUP]記錄G代碼模態(tài)組,m_modes[MAX_M_GROUP]記錄M模態(tài)組,將G、M的數(shù)值賦值給相應(yīng)的數(shù)組內(nèi),control_type[MAX_C_GROUP],其值為CTRL_GOTO,CTRL_IF,CTRL_WHILE,CTRL_END,CTRL_NULL,CTRL_DO。condition如果控制類型為CTRL_IF或CTRL_WHILE,則為相應(yīng)的條件。jmpto_lable如果控制標(biāo)志為CTRL_IF或CTRL_GOTO則為跳轉(zhuǎn)的標(biāo)號(hào),若控制標(biāo)志為CTRL_DO或CTRL_END則為其后的數(shù)字。
2.3 算法分析
G代碼解釋器的核心就是G的解釋算法,算法將一行G代碼循環(huán)掃描,提取所需的數(shù)據(jù)賦值給中間數(shù)據(jù)結(jié)構(gòu)體。如圖3所示G代碼算法流程圖,先預(yù)處理過濾空格符和換行符,然后先逐一掃描是否有“IF”,“WHILE”,“=”,“#”等條件或宏處理字符,有這些字符的時(shí)候,先處理宏指令,將變量或值帶入到公式中,生成常規(guī)的G語句。
然后,逐一字符的掃描關(guān)鍵字符,如“G”,“M”,“I”,“J”等,每個(gè)字符后面接著的是數(shù)字,將數(shù)值賦值給中間結(jié)構(gòu)體相應(yīng)的變量中去,依此規(guī)律,直到循環(huán)結(jié)束。
例如:G01 X [2* #1+0.5] Z [ #2-40+0.2]這句話含有宏定義,先把宏的參數(shù)帶入到公式里,將語句轉(zhuǎn)換成G01 X2.5 Z0.2,然后在逐個(gè)字符掃描,掃描到有“G”字符,根據(jù)數(shù)值判斷G指令屬于哪一個(gè)模態(tài)組,G01屬于Group1,則將數(shù)值1賦值g_modes[1],相應(yīng)的g_count要加1,掃描到有“X”字符,將數(shù)值保存到參數(shù)x里,供程序調(diào)用參數(shù)。

圖3 G代碼算法流程圖
本文在WINDOWS平臺(tái)下利用QT開發(fā)平臺(tái),使用QT的Qthread類,以及進(jìn)程間通訊QMutex、QSemaphore、QsharedMemory類同步進(jìn)程,將G代碼解釋器設(shè)計(jì)為一個(gè)獨(dú)立的進(jìn)程,規(guī)范了進(jìn)程間通訊協(xié)議和共享內(nèi)存段,供系統(tǒng)平臺(tái)移植時(shí)使用。
然后本文在LINUX系統(tǒng)下的QT開發(fā)平臺(tái),編譯WINDOWS下開發(fā)的G代碼解釋器源代碼,獲得了在LINUX下的可執(zhí)行文件,程序具有單獨(dú)的G代碼輸入及解釋GUI進(jìn)程,按界面按鈕輸入G代碼語句,按“預(yù)覽”可以查看G代碼的行走軌跡,如圖形正確,則解釋程序正確。如圖4所示,是G代碼解釋進(jìn)程運(yùn)行界面,例如程序輸入為:
O0001 ;
#1=30;
G90 G00 X#1 Y#1 ;
G01 X-40 Y0 ;
G02 I40 ;
G03 X0 Y0 R20 ;
G02 X40 Y0 R20 ;
M02 ;
通過“預(yù)覽”功能,可查看解釋圖形的正確性,然后系統(tǒng)即可以通過任務(wù)管理器,讀取G代碼解釋進(jìn)程的結(jié)果,通過CAN傳輸處理進(jìn)程,將運(yùn)行命令下發(fā)到下位機(jī)運(yùn)行,下位機(jī)接收運(yùn)行命令,操作運(yùn)動(dòng)控制芯片執(zhí)行相應(yīng)的動(dòng)作。

圖4 G代碼解釋進(jìn)程
本文針對(duì)嵌入式開放式數(shù)控系統(tǒng),應(yīng)用QT開發(fā)環(huán)境,結(jié)合G代碼的語言規(guī)范和特點(diǎn),設(shè)計(jì)了一個(gè)平臺(tái)可移植的G代碼解釋器,經(jīng)試驗(yàn)證明:
(1)嵌入式開放式數(shù)控系統(tǒng)采用上下位結(jié)構(gòu),把實(shí)時(shí)運(yùn)動(dòng)控制放在下位執(zhí)行,上位處理人機(jī)交互和發(fā)送運(yùn)行指令,將最大程度降低數(shù)控系統(tǒng)的平臺(tái)依賴性。
(2)根據(jù)G解釋器的“預(yù)覽”功能,證明G代碼解釋器能夠識(shí)別代碼中的變量、表達(dá)式、宏程序等,能夠達(dá)到G規(guī)范要求。
(3)G代碼解釋器通過在WINDOWS平臺(tái)下開發(fā),然后在LINUX平臺(tái)下編譯,證明了采用QT平臺(tái)開發(fā)的G解釋器可以在LINUX、UNIX、MacOS等多平臺(tái)上編譯運(yùn)行,實(shí)現(xiàn)了平臺(tái)的可移植。
[1] W.Richard Stevens.UNIX Network Progra-mming. 2010.
[2] Jasmin Blanchette.C++ GUI Programming with QT4,Second Edition.2011.
[3] 洪斯寶,徐建明,吳世名.嵌入式數(shù)控系統(tǒng)G代碼解釋模塊的設(shè)計(jì)與實(shí)現(xiàn)[J].機(jī)械設(shè)計(jì)與制造,2012(11):37-39.
[4] 趙炎,吳文江.可配置的數(shù)控G代碼解釋器的設(shè)計(jì)與實(shí)現(xiàn)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2013(7):13-15.
[5] 田永中,周建平,梁楚華.開放式數(shù)控系統(tǒng)中G代碼編譯器的設(shè)計(jì)與研究[J].機(jī)械設(shè)計(jì)與制造,2011(3):154-155.
[6] 張慶,姚錫凡.一種開放式數(shù)控系統(tǒng)NC代碼解釋器設(shè)計(jì)與實(shí)現(xiàn)[J]. 組合機(jī)床與自動(dòng)化加工技術(shù),2010(2):59-61.
[7] 張葆青,閆石,宋海生.開放式數(shù)控系統(tǒng)代碼解釋模塊設(shè)計(jì)[J].機(jī)床與液壓,2012,2(4):72-74.
[8] 黃鵬.開放式數(shù)控系統(tǒng)的關(guān)鍵技術(shù)研究[J].煤炭技術(shù),2012(1):26-28.
[9] 洪海濤,于東,陳龍,等.數(shù)控代碼解釋器模塊化結(jié)構(gòu)的研究與實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng).2013(3):480-485.
[10] 林礪宗,蘭剛,宋啟盛,等.面向固高數(shù)控卡的G代碼系統(tǒng)[J].模具技術(shù),2009(1):5-8.
(編輯 李秀敏)
The Design of Cross-platform G-code Interpreter in CNC System
ZHUANG Yuan-chang1, GAO Luo-qing2, WU Xin-ming3
(1.Department of Research and Development, Changzhou Institute of CNC Technology,Changzhou Jiangsu 213164,China; 2.Department of Electrical Engineering,Changzhou Institute of Light Industry Technology, Changzhou Jiangsu 213164 ,China)
The hardware and software of the embedded CNC system often require customization service, to the need of diversification platform of the embedded CNC system, designed the hardware platform of the embedded open CNC system by using of ARM and the motion control ship, and Qt/Embedded as software development platform, The G-code interpreter module of CNC system is designed by using of multi-process programming technology, Implemented on the interpretation of variables, expressions, and macro program, and the feasibility of the G-code interpreter module is verified through experiments. The module is friendly interface, simple operation, easy to transplant, has a high value of engineering application.
Qt/Embedded; ARM; the motion control ship; multi-process; G-code interpreter
1001-2265(2014)07-0103-03
10.13462/j.cnki.mmtamt.2014.07.029
2013-11-08;
2013-12-19
2011年江蘇省產(chǎn)學(xué)研聯(lián)合創(chuàng)新資金:智能化高速套管類自動(dòng)掛鉤裝備的關(guān)鍵技術(shù)研究(BY2011174);常州市科技支撐計(jì)劃(工業(yè)):服務(wù)于多臺(tái)數(shù)控機(jī)床的智能換刀機(jī)器人關(guān)鍵技術(shù)研發(fā)與產(chǎn)業(yè)化(CE2011005)
莊源昌(1983—),男,江蘇泗陽人,常州數(shù)控技術(shù)研究所工程師,碩士,主要從事數(shù)控系統(tǒng),嵌入式系統(tǒng)開發(fā),(E-mail)326611259@qq.com。
TH166;TG65
A