莊源昌,高羅卿,吳新明
(1.常州數(shù)控技術(shù)研究所 研發(fā)部,江蘇 常州 213164;2.常州輕工職業(yè)技術(shù)學院 電子電氣工程系,江蘇 常州 213164;3. 江南現(xiàn)代工業(yè)研究院 研發(fā)部,江蘇 常州 213164)
平臺可移植的數(shù)控系統(tǒng)G代碼解釋器的設(shè)計*
莊源昌1,高羅卿2,吳新明3
(1.常州數(shù)控技術(shù)研究所 研發(fā)部,江蘇 常州 213164;2.常州輕工職業(yè)技術(shù)學院 電子電氣工程系,江蘇 常州 213164;3. 江南現(xiàn)代工業(yè)研究院 研發(fā)部,江蘇 常州 213164)
嵌入式數(shù)控系統(tǒng)的硬件和軟件往往需要定制化服務(wù),針對嵌入式數(shù)控系統(tǒng)的平臺多樣化的要求,設(shè)計了一種ARM+運動芯片的嵌入式開放性數(shù)控系統(tǒng)的硬件平臺,并以Qt/Embedded為軟件開發(fā)平臺,利用多進程編程技術(shù),設(shè)計數(shù)控系統(tǒng)的G代碼解釋功能模塊,實現(xiàn)了對變量、表達式和宏程序的解析,并通過實驗驗證了G代碼解釋模塊的可行性。模塊界面友好,操作簡單,移植方便,有很高的工程應用價值。
Qt/Embedded;ARM;運動芯片;多進程;G代碼解釋器
數(shù)控技術(shù)是機械加工技術(shù),微電子技術(shù),監(jiān)控檢測技術(shù),計算機技術(shù),自動控制技術(shù)等多種學科的集成,對機電工業(yè)及國民經(jīng)濟的發(fā)展具有十分重要的作用。嵌入式開放式數(shù)控系統(tǒng)具有系統(tǒng)結(jié)構(gòu)簡單,成本低,方便應用于中小規(guī)模應用場合,近年來進入了一個高速發(fā)展的階段。與傳統(tǒng)的數(shù)控系統(tǒng)[5-7]PC+運動控制卡的結(jié)構(gòu)方案相比較,嵌入式開放式數(shù)控系統(tǒng)具有體積小,成本低,功耗低等優(yōu)點。
Qt/Embedded[2]作為跨平臺的圖形用戶界面工具包,它通過QtAPI與LINUX I/O以及Framebuffer直接交互,擁有較高的運行效率,而且整體采用面向?qū)ο缶幊?,擁有良好的體系架構(gòu)和編程模式。只要用Qt編寫過一次代碼,那么在其他不同的操作系統(tǒng)平臺中,只需重新將其編譯一遍即可重復使用,具有廣泛適應性和良好的可移植性。
嵌入式開放式數(shù)控系統(tǒng)的特點[3]是可以根據(jù)實際的需求定制系統(tǒng)的硬件和軟件功能,解決傳統(tǒng)數(shù)控系統(tǒng)中靈活性差和不易擴展的缺陷。在嵌入式開放式數(shù)控系統(tǒng)的工程方案選擇中,往往需要根據(jù)不同的需求應用,選擇不同的系統(tǒng)平臺,G代碼解釋器是數(shù)控系統(tǒng)的一個核心模塊,這就需要一個能夠方便的移植于各類系統(tǒng)之間的G代碼解釋器。
與一般的解釋器[5-10]使用Visual Studio或VC++等WINDOWS平臺下的開發(fā)工具相比,或與有些嵌入式數(shù)控系統(tǒng)[3]在UCOS系統(tǒng)平臺上開發(fā)相比,采用Qt平臺開發(fā)G代碼解釋器具有可移植性強的優(yōu)點,解決了解釋器只能在單一平臺下使用,代碼移植難的問題。在Qt平臺上將G代碼解釋器作為一個獨立的進程,利用Qt自身的進程間通訊方式,可以方便的適應多種系統(tǒng),增加代碼的重用性。
系統(tǒng)采用ARM11為主處理器,采用上下位分離的模式,下位采用ARM7+運動控制芯片的方式,構(gòu)建了一個開放式的嵌入式小型數(shù)控的硬件平臺,上下位采用CAN總線通訊,移植CANopen上層通訊協(xié)議。
圖1 數(shù)控系統(tǒng)軟件架構(gòu)
如圖1所示,上位系統(tǒng)以Qt/Embedded為軟件開發(fā)平臺,負責數(shù)控系統(tǒng)的GUI界面開發(fā),完成觸摸屏的人機交互任務(wù)。Qt支持多進程的GUI編程,將系統(tǒng)分離成多個GUI進程,有利于系統(tǒng)模塊化開發(fā)和維護,系統(tǒng)的各GUI層都通過后臺任務(wù)管理器調(diào)度,系統(tǒng)后臺有獨立的G代碼解釋器,G代碼解釋器接受任務(wù)管理器的任務(wù),執(zhí)行G解釋任務(wù),將結(jié)果返回給任務(wù)管理器,CAN通訊進程則負責上下位實時通訊,完成指令任務(wù)。
G代碼解釋器的主要作用是將加工圖形信息,行走速度和其他M輔助信息按一定的規(guī)律解釋成控制系統(tǒng)能識別的數(shù)據(jù)格式。
G代碼分為不同的組[4],大多數(shù)的G代碼是模態(tài)的,模態(tài)G代碼不只在當前的程序段中起作用,而且在以后的程序段中一直起作用,直到程序中出現(xiàn)另一個同組的G代碼為止,同組的模態(tài)G代碼控制同一個目標但起不同的作用,它們之間是不相容的。
Group0組的G代碼是非模態(tài)的,這些G代碼只在它們所在的程序段中起作用。標有*號的G代碼是上電時的初始狀態(tài)。對于G01和G00、G90和G91上電時的初始狀態(tài)由參數(shù)決定。例如:
G代碼模態(tài)分組:
Group1= {G00,G01,G02,G03,G33…};運動組
Group3={G90,G91};編程指令方式
Group6={G20,G21};公英制選擇
Group7={G40,G41,G42};刀具半徑補償
Group12={G54,G55,G56…};坐標系選擇
G代碼非模態(tài)分組:
Group0= {G04, G09,G10,G28,G29…};
2.1 G代碼解釋流程設(shè)計
G代碼解釋模塊首先將整個G代碼文件讀入到解釋進程的緩沖中,然后逐行讀入G代碼,經(jīng)過詞法檢查、語法檢查,數(shù)據(jù)提取,中間代碼生成,直到全部程序解釋完畢。圖2所示的是G代碼解釋的基本流程圖。
詞法檢查主要是判斷數(shù)據(jù)和字符是否是非法的,對不合法的字符進行出錯報警。主要有代碼指令:如G、M、常數(shù)、整型數(shù)等;運算符:+、-、*、/、>、<等;界限符:行結(jié)束符。檢查程序格式是否合法,組詞規(guī)則等等。
語法檢查主要是根據(jù)G代碼標準,檢查語法規(guī)則,參數(shù)的合法性和有效性,生成語法小短句是否合法,語義的規(guī)則有沒有沖突等。如模態(tài)的檢查,同組模態(tài)的G指令只能出現(xiàn)一次,地址符后是否是數(shù)字還是公式,X、Y等軸的運動參數(shù)是否越界等。
中間數(shù)據(jù)生成主要是依據(jù)一定的算法,掃描一行G代碼后,將要加工的指令和數(shù)據(jù),解釋存儲在固定結(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ù),標號和行號的信息,以及控制類的狀態(tài)和標號等。
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; //運動指令
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; //標號
int lineno; //行號
bool block_delete; //段忽略標示
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ù)值賦值給相應的數(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,則為相應的條件。jmpto_lable如果控制標志為CTRL_IF或CTRL_GOTO則為跳轉(zhuǎn)的標號,若控制標志為CTRL_DO或CTRL_END則為其后的數(shù)字。
2.3 算法分析
G代碼解釋器的核心就是G的解釋算法,算法將一行G代碼循環(huán)掃描,提取所需的數(shù)據(jù)賦值給中間數(shù)據(jù)結(jié)構(gòu)體。如圖3所示G代碼算法流程圖,先預處理過濾空格符和換行符,然后先逐一掃描是否有“IF”,“WHILE”,“=”,“#”等條件或宏處理字符,有這些字符的時候,先處理宏指令,將變量或值帶入到公式中,生成常規(guī)的G語句。
然后,逐一字符的掃描關(guān)鍵字符,如“G”,“M”,“I”,“J”等,每個字符后面接著的是數(shù)字,將數(shù)值賦值給中間結(jié)構(gòu)體相應的變量中去,依此規(guī)律,直到循環(huán)結(jié)束。
例如:G01 X [2* #1+0.5] Z [ #2-40+0.2]這句話含有宏定義,先把宏的參數(shù)帶入到公式里,將語句轉(zhuǎn)換成G01 X2.5 Z0.2,然后在逐個字符掃描,掃描到有“G”字符,根據(jù)數(shù)值判斷G指令屬于哪一個模態(tài)組,G01屬于Group1,則將數(shù)值1賦值g_modes[1],相應的g_count要加1,掃描到有“X”字符,將數(shù)值保存到參數(shù)x里,供程序調(diào)用參數(shù)。
圖3 G代碼算法流程圖
本文在WINDOWS平臺下利用QT開發(fā)平臺,使用QT的Qthread類,以及進程間通訊QMutex、QSemaphore、QsharedMemory類同步進程,將G代碼解釋器設(shè)計為一個獨立的進程,規(guī)范了進程間通訊協(xié)議和共享內(nèi)存段,供系統(tǒng)平臺移植時使用。
然后本文在LINUX系統(tǒng)下的QT開發(fā)平臺,編譯WINDOWS下開發(fā)的G代碼解釋器源代碼,獲得了在LINUX下的可執(zhí)行文件,程序具有單獨的G代碼輸入及解釋GUI進程,按界面按鈕輸入G代碼語句,按“預覽”可以查看G代碼的行走軌跡,如圖形正確,則解釋程序正確。如圖4所示,是G代碼解釋進程運行界面,例如程序輸入為:
O0001 ;
#1=30;
G90 G00 X#1 Y#1 ;
G01 X-40 Y0 ;
G02 I40 ;
G03 X0 Y0 R20 ;
G02 X40 Y0 R20 ;
M02 ;
通過“預覽”功能,可查看解釋圖形的正確性,然后系統(tǒng)即可以通過任務(wù)管理器,讀取G代碼解釋進程的結(jié)果,通過CAN傳輸處理進程,將運行命令下發(fā)到下位機運行,下位機接收運行命令,操作運動控制芯片執(zhí)行相應的動作。
圖4 G代碼解釋進程
本文針對嵌入式開放式數(shù)控系統(tǒng),應用QT開發(fā)環(huán)境,結(jié)合G代碼的語言規(guī)范和特點,設(shè)計了一個平臺可移植的G代碼解釋器,經(jīng)試驗證明:
(1)嵌入式開放式數(shù)控系統(tǒng)采用上下位結(jié)構(gòu),把實時運動控制放在下位執(zhí)行,上位處理人機交互和發(fā)送運行指令,將最大程度降低數(shù)控系統(tǒng)的平臺依賴性。
(2)根據(jù)G解釋器的“預覽”功能,證明G代碼解釋器能夠識別代碼中的變量、表達式、宏程序等,能夠達到G規(guī)范要求。
(3)G代碼解釋器通過在WINDOWS平臺下開發(fā),然后在LINUX平臺下編譯,證明了采用QT平臺開發(fā)的G解釋器可以在LINUX、UNIX、MacOS等多平臺上編譯運行,實現(xiàn)了平臺的可移植。
[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è)計與實現(xiàn)[J].機械設(shè)計與制造,2012(11):37-39.
[4] 趙炎,吳文江.可配置的數(shù)控G代碼解釋器的設(shè)計與實現(xiàn)[J].組合機床與自動化加工技術(shù),2013(7):13-15.
[5] 田永中,周建平,梁楚華.開放式數(shù)控系統(tǒng)中G代碼編譯器的設(shè)計與研究[J].機械設(shè)計與制造,2011(3):154-155.
[6] 張慶,姚錫凡.一種開放式數(shù)控系統(tǒng)NC代碼解釋器設(shè)計與實現(xiàn)[J]. 組合機床與自動化加工技術(shù),2010(2):59-61.
[7] 張葆青,閆石,宋海生.開放式數(shù)控系統(tǒng)代碼解釋模塊設(shè)計[J].機床與液壓,2012,2(4):72-74.
[8] 黃鵬.開放式數(shù)控系統(tǒng)的關(guān)鍵技術(shù)研究[J].煤炭技術(shù),2012(1):26-28.
[9] 洪海濤,于東,陳龍,等.數(shù)控代碼解釋器模塊化結(jié)構(gòu)的研究與實現(xiàn)[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)學研聯(lián)合創(chuàng)新資金:智能化高速套管類自動掛鉤裝備的關(guān)鍵技術(shù)研究(BY2011174);常州市科技支撐計劃(工業(yè)):服務(wù)于多臺數(shù)控機床的智能換刀機器人關(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