吳純赟,欒 勇,杜少華,葛小川
(1.中國科學(xué)院大學(xué),北京 100049;2.中國科學(xué)院沈陽計(jì)算技術(shù)研究所 高檔數(shù)控國家工程研究中心,沈陽 110168;3.沈陽高精數(shù)控智能技術(shù)股份有限公司,沈陽 110168)
?
基于Qt的數(shù)控系統(tǒng)測(cè)試軟件的設(shè)計(jì)與實(shí)現(xiàn)
吳純赟,欒 勇,杜少華,葛小川
(1.中國科學(xué)院大學(xué),北京 100049;2.中國科學(xué)院沈陽計(jì)算技術(shù)研究所 高檔數(shù)控國家工程研究中心,沈陽 110168;3.沈陽高精數(shù)控智能技術(shù)股份有限公司,沈陽 110168)
數(shù)控系統(tǒng)的測(cè)試相比較一般的系統(tǒng)更加復(fù)雜,以往的測(cè)試工具存在測(cè)試過程復(fù)雜、測(cè)試效率低下、可移植性差、用戶交互不理想等缺點(diǎn)。在研究了Linux驅(qū)動(dòng)及Qt技術(shù)的基礎(chǔ)下設(shè)計(jì)并實(shí)現(xiàn)了藍(lán)天數(shù)控系統(tǒng)的測(cè)試驅(qū)動(dòng)程序以及基于Qt的測(cè)試應(yīng)用軟件,完成對(duì)數(shù)控系統(tǒng)IO、DA、鍵盤操作站等的測(cè)試。軟件具有較高的移植性,可以運(yùn)行在不同平臺(tái)上,測(cè)試人員可以自主選擇測(cè)試的項(xiàng)目與過程,提高了測(cè)試效率,簡化了測(cè)試過程,縮短了測(cè)試時(shí)間。測(cè)試軟件在生產(chǎn)車間中投入使用,有效地保障了數(shù)控系統(tǒng)的可靠性。
數(shù)控系統(tǒng);軟件測(cè)試;Qt技術(shù)
數(shù)控技術(shù)是工業(yè)化過程中發(fā)展國家高新技術(shù)產(chǎn)業(yè)和尖端工業(yè)的重要一環(huán),也是先進(jìn)制造技術(shù)的核心研究內(nèi)容。數(shù)控系統(tǒng)測(cè)試軟件為工業(yè)生產(chǎn)提供了有效保障,目前我國的數(shù)控測(cè)試軟件主要采用基于C語言的命令行模式,雖然在功能上能覆蓋常用的模塊,但存在可移植性差、用戶交互性弱、測(cè)試過程復(fù)雜等缺點(diǎn)?;赒t的數(shù)控系統(tǒng)測(cè)試軟件正是要解決以上問題,為測(cè)試人員提供一個(gè)操作簡便、可視化程度高、移植性好的測(cè)試環(huán)境。
在深入理解Linux內(nèi)核以及Qt界面、信號(hào)與槽機(jī)制的前提下,基于Qt的數(shù)控系統(tǒng)測(cè)試軟件重新設(shè)計(jì)了GJ303系統(tǒng)的測(cè)試驅(qū)動(dòng)程序,并且使用Qt的UI實(shí)現(xiàn)了可視化操作。軟件完成了對(duì)IO、DA、鍵盤、操作站等功能模塊的設(shè)計(jì)與實(shí)現(xiàn),編譯后部署在藍(lán)天高精數(shù)控測(cè)試生產(chǎn)線上進(jìn)行實(shí)際測(cè)試,并記錄測(cè)試時(shí)間和故障率,從而驗(yàn)證測(cè)試軟件的可行性。
GJ303是新一代開放式普及型數(shù)控系統(tǒng),采用高性能工業(yè)級(jí)PC平臺(tái),在工業(yè)生產(chǎn)中已經(jīng)有廣泛的應(yīng)用,生產(chǎn)車間需要在數(shù)控系統(tǒng)出廠前對(duì)IO、DA、鍵盤操作站等進(jìn)行測(cè)試,以確保軟硬件的正確性和穩(wěn)定性,為工業(yè)生產(chǎn)提供保障。
對(duì)于IO部分,需要GJ303系統(tǒng)與外接板連接,通過測(cè)試程序?qū)O讀寫信號(hào)進(jìn)行測(cè)試;DA部分需要程序?qū)A輸出值進(jìn)行測(cè)試;鍵盤和操作站部分需要通過程序?qū)?shù)控系統(tǒng)鍵盤鍵位的有效性及操作站控制的有效性等進(jìn)行測(cè)試。
從上述可以看出數(shù)控系統(tǒng)的測(cè)試存在步驟多、測(cè)試過程繁瑣、測(cè)試過程掌控不到位等問題。在此背景下,結(jié)合當(dāng)前數(shù)控封裝測(cè)試車間的實(shí)際應(yīng)用場(chǎng)景,采用Qt技術(shù)[2]實(shí)現(xiàn)功能完備、測(cè)試過程簡單高效、移植性強(qiáng)、可視化程度高的數(shù)控系統(tǒng)測(cè)試軟件。
測(cè)試軟件需要對(duì)數(shù)控系統(tǒng)的硬件資源進(jìn)行操控,所以底層需要一套專門的驅(qū)動(dòng)來配合上層的Qt程序。藍(lán)天數(shù)控系統(tǒng)內(nèi)核是基于Linux 2.6系統(tǒng),測(cè)試驅(qū)動(dòng)程序符合一般Linux字符驅(qū)動(dòng)程序開發(fā)的流程[10]。在整個(gè)數(shù)控系統(tǒng)測(cè)試軟件中,驅(qū)動(dòng)程序扮演著承上啟下的作用。
在Linux2.6內(nèi)核中,使用cdev結(jié)構(gòu)體[11]描述一個(gè)字符設(shè)備,cdev結(jié)構(gòu)體的定義描述如下:
struct cdev {
struct kobject kobj;//內(nèi)嵌的kobject對(duì)象
struct mouule *owner;//所屬模塊
struct file_operations *ops;//文件操作
struct list_head list;
dev_t dev;//設(shè)備號(hào)
unsigned int count;
};
cedv結(jié)構(gòu)體的dev_t成員定義了設(shè)備號(hào),為32位,其中12位主設(shè)備號(hào),20位次設(shè)備號(hào)。使用下列宏可以獲得主設(shè)備號(hào)和次設(shè)備號(hào):
MAJOR(dev_t dev)
MINOR(dev_t dev)
使用下列宏可以通過主設(shè)備號(hào)和次設(shè)備號(hào)生成dev_t:
MKDEV(int major, int minor)
文件操作file_operations[12]是程序操作設(shè)備的主要結(jié)構(gòu),它的成員在應(yīng)用層中以open(),write(),read(),close()等系統(tǒng)調(diào)用來體現(xiàn)。以上操作在測(cè)試軟件中需要進(jìn)行自定義,以read函數(shù)為例,GJ303系統(tǒng)中需要先設(shè)置偏移找到讀取的起始位置,再根據(jù)傳入的讀取范圍分配內(nèi)核空間內(nèi)存,最后調(diào)用__copy_to_user函數(shù)將需要的數(shù)據(jù)從內(nèi)核空間拷貝到用戶空間。write函數(shù)操作過程類似,只是拷貝數(shù)據(jù)的方向相反。
上層的應(yīng)用程序在測(cè)試過程中需要對(duì)機(jī)床的各個(gè)功能硬件進(jìn)行命令的收發(fā),通過以上驅(qū)動(dòng)程序的調(diào)用就可以高效便捷地進(jìn)行交互。
3.1 總體架構(gòu)設(shè)計(jì)
測(cè)試軟件從結(jié)構(gòu)上分成三層,如圖1所示,用戶界面采用Qt技術(shù)[6]實(shí)現(xiàn),底層調(diào)用驅(qū)動(dòng)測(cè)試程序。驅(qū)動(dòng)程序直接解析用戶界面?zhèn)鱽淼臏y(cè)試命令,數(shù)控硬件系統(tǒng)根據(jù)驅(qū)動(dòng)程序進(jìn)行相應(yīng)的操作完成測(cè)試。
圖1 系統(tǒng)整體結(jié)構(gòu)
Qt具有跨平臺(tái)以及界面美觀等優(yōu)點(diǎn),且在嵌入式領(lǐng)域已經(jīng)有廣泛地應(yīng)用,所以本軟件的用戶交互界面全部由Qt來實(shí)現(xiàn)。應(yīng)用層的開發(fā)在搭載Ubuntu14.04的PC下完成,測(cè)試與部署則在藍(lán)天數(shù)控GJ303系統(tǒng)上進(jìn)行。上圖中數(shù)控系統(tǒng)部分實(shí)際還需要用到IO、DA的外接測(cè)試板以及外置手輪。
3.2 事件處理機(jī)制
由于以往的藍(lán)天數(shù)控系統(tǒng)測(cè)試工具都是基于C語言的命令行格式,測(cè)試人員即便測(cè)試某個(gè)小功能也要掌握所有的命令選項(xiàng),一步步地進(jìn)入到測(cè)試點(diǎn)。這不僅造成測(cè)試過程復(fù)雜,還容易出錯(cuò)。傳統(tǒng)的程序界面跳轉(zhuǎn)采用順序驅(qū)動(dòng),導(dǎo)致邏輯復(fù)雜,跳轉(zhuǎn)代碼與業(yè)務(wù)代碼摻雜在一起,結(jié)構(gòu)混亂,不利于軟件的功能擴(kuò)展及移植。
軟件使用Qt實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制,并抽取測(cè)試人員常用的測(cè)試選項(xiàng)于頁面供直接使用,很好地解決了以上問題。測(cè)試軟件的測(cè)試組件由按鈕和命令行組成。按鈕是由事件驅(qū)動(dòng)的測(cè)試路徑,需要通過數(shù)控系統(tǒng)自帶的鍵盤綁定相應(yīng)的事件;命令行則是快捷測(cè)試路徑的入口,需要綁定并解析相應(yīng)鍵盤輸入的字符串。為了讓軟件更好地支持與底層硬件通信,提高測(cè)試效率,以上測(cè)試路徑采用異步[8]的事件通知。異步意味著當(dāng)主線程接受完一個(gè)信號(hào)后可以繼續(xù)處理業(yè)務(wù)邏輯,不必等待,當(dāng)調(diào)用QApplication::exec()時(shí),就進(jìn)入了事件循環(huán)隊(duì)列[10]。對(duì)于按鈕和命令,自定義的事件主要對(duì)QKeyEvent進(jìn)行封裝,只需對(duì)不同的事件源進(jìn)行判斷就可以滿足動(dòng)態(tài)需求。測(cè)試人員在對(duì)某個(gè)功能進(jìn)行測(cè)試時(shí),其輸入將被包裝成一個(gè)事件源。如果是簡單的鍵盤事件,將調(diào)用Qt自帶的事件處理器,但當(dāng)要輸入命令時(shí),就先由事件分發(fā)器捕獲[9]這次命令事件,然后判斷是否自定義的事件,若是則分發(fā)器查找對(duì)應(yīng)的自定義事件處理器,并觸發(fā)相應(yīng)的操作,具體流程如圖2所示。為了便于管理眾多的按鈕與命令輸入框,也為了統(tǒng)一結(jié)果顯示頁面,軟件還擴(kuò)展了Qt的部分控件:
(1)狀態(tài)控制方法, 由于不同控件有各自的布局及大小管理方法,使用時(shí)十分不便,本軟件設(shè)計(jì)的void set_geometry(int,int,int,int)成員方法可以統(tǒng)一設(shè)置所以控件的大小及位置,前兩個(gè)參數(shù)表示起點(diǎn)位置,后兩個(gè)參數(shù)表示長度和寬度;
(2)字體設(shè)置方法,為了使界面支持各種編碼的字符,設(shè)計(jì)了QString to_chinese(const char* str, const char* code)方法,內(nèi)部使用了QTextCodec字符編碼器將傳入的信息提示字符串str轉(zhuǎn)變?yōu)閏ode指定的編碼,使得軟件支持國際化。
基于異步的事件處理機(jī)制對(duì)數(shù)控測(cè)試軟件的各個(gè)功能模塊進(jìn)行了解耦[1],不同模塊間形成了責(zé)任鏈模式,在提高性能的同時(shí)也增加了擴(kuò)展性。
3.3 IO與DA測(cè)試的設(shè)計(jì)與實(shí)現(xiàn)
IO與DA是數(shù)控系統(tǒng)的基礎(chǔ),是數(shù)控系統(tǒng)機(jī)床控制系統(tǒng)的重要組成部分,因此對(duì)這兩部分的測(cè)試就尤為重要。GJ303數(shù)控系統(tǒng)的IO模式是48IN32OUT以及32IN24OUT,測(cè)試時(shí)需要考慮多種輸入輸出的情況。
IO測(cè)試模塊程序流程如圖3所示,以48IN32OUT輸出測(cè)試為例,32個(gè)比特要每隔1s輸出一位,要控制時(shí)間間隔便要使用Qt定時(shí)器來完成任務(wù)。該功能模塊的實(shí)現(xiàn)方法定義:void IO_outport(int offset,int st,unsigned int word),該方法內(nèi)部實(shí)現(xiàn)需要使用上文的驅(qū)動(dòng)程序,即調(diào)用write系統(tǒng)調(diào)用[11],該系統(tǒng)調(diào)用將向操作系統(tǒng)內(nèi)核傳遞IO輸出數(shù)據(jù)。
DA的測(cè)試需要提供一組待測(cè)電壓以及一組與之對(duì)應(yīng)的地址。軟件中封裝了void DA_outport(int st,int ch,unsigned int word)方法,word參數(shù)就是要測(cè)試的DA地址值,前面兩個(gè)參數(shù)是狀態(tài)控制參數(shù)。為了可擴(kuò)展性,測(cè)試的地址[8]值可以由測(cè)試人員自行輸入,軟件后臺(tái)會(huì)將最近的一次設(shè)定值保存在數(shù)組中,并寫入配置文件刷新到磁盤上。測(cè)試開始時(shí)軟件會(huì)根據(jù)最終的地址傳入上述方法,底層使用系統(tǒng)調(diào)用傳遞給數(shù)控系統(tǒng)。
圖3 IO測(cè)試流程
3.4 鍵盤測(cè)試的設(shè)計(jì)與實(shí)現(xiàn)
數(shù)控系統(tǒng)的鍵盤是其在工業(yè)生產(chǎn)環(huán)境中最常用的外設(shè),操作人員絕大部分操作及維護(hù)都是通過它來完成的,因此對(duì)鍵盤的測(cè)試尤為重要。GJ303數(shù)控系統(tǒng)的鍵盤和普通PC機(jī)的鍵位基本相同,但多了幾個(gè)系統(tǒng)鍵。該部分測(cè)試的主要思想是利用Qt的鍵盤事件。當(dāng)在主界面按下代表鍵盤測(cè)試的按鈕后,整個(gè)鍵盤進(jìn)入測(cè)試模式,測(cè)試人員之后按下的每個(gè)鍵都會(huì)在軟件的界面上進(jìn)行回顯,直到連按2次ESC鍵后退出測(cè)試。
進(jìn)入鍵盤測(cè)試后就觸發(fā)了事件源,事件分發(fā)器捕獲事件源并判斷自定義事件。軟件中對(duì)該功能的自定義事件改變了QKeyEvent原來的傳播行為[5],將輸出重定向至內(nèi)存中,再在界面上輸出。只要生產(chǎn)時(shí)鍵盤焊接等工藝沒有發(fā)生錯(cuò)誤,測(cè)試時(shí)鍵盤的事件源就會(huì)被準(zhǔn)確地捕獲,一次典型的捕獲過程如圖4所示。
圖4 鍵盤測(cè)試流程
3.5 操作站測(cè)試的設(shè)計(jì)與實(shí)現(xiàn)
操作站是鍵盤的延伸,是數(shù)控系統(tǒng)對(duì)機(jī)床進(jìn)行控制的操作面板,可以控制數(shù)控運(yùn)行過程中主軸的轉(zhuǎn)動(dòng)方向、液壓系統(tǒng)、照明等,圖5是GJ303系統(tǒng)配套的操作站。
圖5 操作站
對(duì)操作站的測(cè)試不同于鍵盤,因?yàn)樗菙?shù)控系統(tǒng)獨(dú)有的,Qt的事件并不支持。軟件中采用的方法是對(duì)操作站的鍵位進(jìn)行轉(zhuǎn)換,然后用類似于鍵盤的測(cè)試方法在主界面上回顯按下的鍵位。
對(duì)于數(shù)控系統(tǒng)底層驅(qū)動(dòng)來講,操作站的每個(gè)鍵位都對(duì)應(yīng)著IO[10]的某個(gè)地址,地址的格式是8位的無符號(hào)整數(shù)。在軟件中為了簡潔使用unsigned char ch_pre變量表示,整個(gè)轉(zhuǎn)換的過程使用void mopValueToText(unsigned char ch_pre,unsigned char ch_rev, char* str)這個(gè)方法來完成,轉(zhuǎn)換過程如圖6所示。
圖6 操作站轉(zhuǎn)換過程
接下去的操作是分發(fā)器[12]調(diào)用以上轉(zhuǎn)換方法,而非某個(gè)自定義事件。轉(zhuǎn)換方法的核心部分是將IO地址一一轉(zhuǎn)換成中文或其他語言,代碼片段如下:
case 0x81:sprintf(str,"%s","進(jìn)給修調(diào) 0%");
0x81就是IO地址,“進(jìn)給修調(diào)”是需要在主界面上顯示的表述。
測(cè)試軟件通過交叉編譯后部署在測(cè)試車間的GJ303數(shù)控系統(tǒng)上供測(cè)試人員使用。針對(duì)3個(gè)月的車間平均測(cè)試統(tǒng)計(jì),結(jié)果如表1所示。
表1 GJ303數(shù)控系統(tǒng)測(cè)試時(shí)間比較
表1中數(shù)據(jù)是部署后車間流水線上每臺(tái)數(shù)控系統(tǒng)各個(gè)項(xiàng)目的平均測(cè)試時(shí)間,是經(jīng)過長時(shí)間累計(jì)測(cè)試得出的。從中可以看出4個(gè)項(xiàng)目測(cè)試時(shí)間都有較大的縮短,使得測(cè)試效率得到提高。對(duì)于出廠數(shù)控系統(tǒng)的故障率和返修率也進(jìn)行了統(tǒng)計(jì),如表2所示。
表2 GJ303數(shù)控系統(tǒng)故障率比較
從表2可以看出在使用新的測(cè)試軟件后平均故障率大幅下降,給生產(chǎn)帶來了較大的保障,提高了產(chǎn)品的經(jīng)濟(jì)效益。
基于Qt的GJ303數(shù)控系統(tǒng)測(cè)試軟件完成了對(duì)IO、DA、鍵盤與工作站的測(cè)試,并且在藍(lán)天數(shù)控測(cè)試生產(chǎn)線上進(jìn)行了部署。經(jīng)過長期運(yùn)行證明了該軟件測(cè)試系統(tǒng)的穩(wěn)定性與高效性。軟件幫助測(cè)試人員建立了完善易用的人機(jī)交互界面,對(duì)各個(gè)部分的測(cè)試效率也有較大地提高。
由于軟件采用了Qt技術(shù),因此其跨平臺(tái)性也進(jìn)一步得到了提高,目前已經(jīng)針對(duì)GJ301、GJ302等藍(lán)天數(shù)控系統(tǒng)進(jìn)行改造,是測(cè)試軟件能部署在更多的數(shù)控系統(tǒng)上,從而創(chuàng)造更多的經(jīng)濟(jì)效益。
未來的工作還要進(jìn)一步擴(kuò)展測(cè)試軟件的功能,例如編碼器、軸測(cè)試等,最終使軟件能夠適應(yīng)更多的生產(chǎn)環(huán)境。
[1] 李一雄,劉建群,陳新度,等.Qt環(huán)境下基于PMAC運(yùn)動(dòng)控制器的控制系統(tǒng)開發(fā)與應(yīng)用[J].組合機(jī)床與自動(dòng)化加工技術(shù),2014(1):114-116,120.
[2] 楊杏,陳富林,周霏.基于Qt的工業(yè)機(jī)器人語言系統(tǒng)的設(shè)計(jì)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2014(2):71-74.
[3] 王彩芳,劉建群,高偉強(qiáng),等.基于QT+PMAC的V溝機(jī)數(shù)控軟件的開發(fā)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2015(3):98-101.
[4] 梁凡,宋曉秋.基于二組合的測(cè)試用例集生成及精簡方法研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2014,35(5):1662-1666.
[5] 王立宏,王曙燕,孫家澤.一種分階段組合測(cè)試數(shù)據(jù)生成算法[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(3):67-70.
[6] 任立松.基于嵌入式QT4漁業(yè)電臺(tái)GUI的設(shè)計(jì)和實(shí)現(xiàn)[D].大連:大連海事大學(xué),2013.
[7] 胡毅,于東,郭銳鋒,等.數(shù)控總線的消息安全通信方法[J].機(jī)械工程學(xué)報(bào),2011,47(5):134-142.
[8] 徐曉露.基于故障注入的嵌入式系統(tǒng)測(cè)試研究[D].杭州:浙江大學(xué),2008.
[9] 徐柯.嵌入式軟件測(cè)試的研究[D].成都:電子科技大學(xué),2006.
[10] 單錦輝,姜瑛,孫萍.軟件測(cè)試研究進(jìn)展[J].北京大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,41(1):134-145.
[11] 張春曉.基于實(shí)時(shí)Linux平臺(tái)的CNC系統(tǒng)研究與實(shí)現(xiàn)[D].南京:南京航空航天大學(xué),2002.
[12] William von Hagen, Real-Time and Performance Improvements in the 2.6 Linux Kernel[J]. Linux Journal,2005.
(編輯 李秀敏)
Design and Implementation of CNC System Testing Software Based on Qt
WU Chun-yun1,2,LUAN Yong2,3,DU Shao-hua2,3,GE Xiao-chuan1,2
(1.University of Chinese Academy of Sciences, Beijing 100049,China;2.National Engineering Research Center For High-End CNC, Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang 110168,China)
Compared with the general system, the testing of CNC system is more complex, and the original testing tools have the disadvantages of complex testing process, low efficiency, poor portability and poor user interaction.This paper designs and realizes the test driver of the blue sky numerical control system and the application software based on Qt,and complete the test of IO, DA, keyboard, etc.The software has a high portability and can run on different platforms,test personnel can choose which part to test .Through the software, it improves the test efficiency, simplify the testing process, and shorten the test time. The test software is put into use in the workshop, which effectively ensures the reliability of the numerical control system.
CNC system;software test;Qt technology
1001-2265(2016)11-0076-04
10.13462/j.cnki.mmtamt.2016.11.021
2015-12-28;
2016-01-22
“高檔數(shù)控機(jī)床與基礎(chǔ)制造裝備”國家科技重大專項(xiàng):基于二次開發(fā)平臺(tái)的專用數(shù)控系統(tǒng)開發(fā)與應(yīng)用(2013ZX04007011)
吳純赟(1990—),男,浙江海鹽人,中國科學(xué)院大學(xué)、中科院沈陽計(jì)算技術(shù)研究所碩士研究生,研究方向?yàn)閿?shù)控系統(tǒng)軟件測(cè)試,(E-mail)437063174@qq.com。
TH166;TG659
A