繡花機(jī)在縫制設(shè)備行業(yè)中占有極其重要的位置,在國內(nèi)外都有廣闊的市場。國產(chǎn)繡花機(jī)在速度、噪聲、品質(zhì)和功能等方面與國外高檔機(jī)相比,存在著較大的差距,競爭優(yōu)勢較小,因此,加強(qiáng)繡花機(jī)的開發(fā)不僅是市場需求,更有助于提高民族產(chǎn)業(yè),具有重要意義。目前隨著SOC、ARM、FPGA 與CPLD 等嵌入式技術(shù)的不斷發(fā)展,以嵌入式系統(tǒng)為主的繡花機(jī)主控制器在國內(nèi)已占據(jù)了主流,具有較快處理速度的CPU 和多功能的模塊擴(kuò)展使繡花機(jī)運(yùn)動(dòng)控制系統(tǒng)更加強(qiáng)大,但高速度、高精度和高智能化的發(fā)展方向給繡花機(jī)運(yùn)動(dòng)控制系統(tǒng)提出了更高的要求,在硬件的不斷完善基礎(chǔ)上,軟件的性能已成為評估系統(tǒng)性能優(yōu)劣的一項(xiàng)重要考核指標(biāo),也是繡花機(jī)開發(fā)的難點(diǎn)之一。
本文運(yùn)動(dòng)控制系統(tǒng)軟件實(shí)現(xiàn)是基于一種高速工業(yè)繡花機(jī)的體系結(jié)構(gòu),該體系結(jié)構(gòu)以ARM9 處理器S3C2440 為CPU,結(jié)合CPLD 擴(kuò)展模塊,主要功能是滿足繡花機(jī)在1200 轉(zhuǎn)/分轉(zhuǎn)速下的實(shí)時(shí)性要求(目前國內(nèi)高速工業(yè)繡花機(jī)的主流轉(zhuǎn)速為1000轉(zhuǎn)/分),即在高速運(yùn)轉(zhuǎn)完成自動(dòng)繡花、剪線和換色等工作的同時(shí),保證刺繡品質(zhì)和滿足一些人性化要求。對此文中提出了一種基于Windows CE5.0 多線程機(jī)制的繡花機(jī)運(yùn)動(dòng)控制系統(tǒng)軟件實(shí)現(xiàn)方案,該方案已應(yīng)用于自主開發(fā)的高速工業(yè)繡花機(jī)中,取得了較好的效果。
1 運(yùn)動(dòng)控制系統(tǒng)實(shí)時(shí)性要求及模塊分析
繡花機(jī)運(yùn)動(dòng)控制系統(tǒng)是強(qiáng)實(shí)時(shí)系統(tǒng),系統(tǒng)所選擇的運(yùn)行環(huán)境必須能及時(shí)響應(yīng)繡花機(jī)運(yùn)動(dòng)控制系統(tǒng)的實(shí)時(shí)性任務(wù),如果系統(tǒng)響應(yīng)的實(shí)時(shí)性不夠,會(huì)導(dǎo)致繡花機(jī)在自動(dòng)運(yùn)行過程中出現(xiàn)斷續(xù)等不穩(wěn)定現(xiàn)象。由于Windows CE 系統(tǒng)在界面、人機(jī)交互能力、多任務(wù)以及開放性等方面的優(yōu)勢,開發(fā)基于Windows CE 的工控系統(tǒng)稱為一種趨勢。
Windows CE5.0 屬于實(shí)時(shí)性操作系統(tǒng),在Windows CE5.0 系統(tǒng)中,合理應(yīng)用Windows CE 多線程技術(shù)來解決系統(tǒng)的實(shí)時(shí)多任務(wù)成為開發(fā)技術(shù)的關(guān)鍵。繡花機(jī)運(yùn)動(dòng)控制系統(tǒng)對各個(gè)電機(jī)以及其它模塊的實(shí)時(shí)性提出了很高的要求。Windows CE 多線程機(jī)制因其能同時(shí)執(zhí)行多項(xiàng)任務(wù)而能較好的滿足這一要求,同時(shí)結(jié)合采用有效的中斷方式來加強(qiáng)對實(shí)時(shí)性要求的實(shí)現(xiàn)。
根據(jù)運(yùn)動(dòng)控制系統(tǒng)的功能要求,整個(gè)系統(tǒng)主要分為以下幾個(gè)模塊:(1)主軸控制模塊,控制主軸電機(jī)運(yùn)轉(zhuǎn),帶動(dòng)繡針上下移動(dòng)。(2)XY 步進(jìn)電機(jī)控制模塊,控制XY 步進(jìn)電機(jī),移動(dòng)繡框。(3)剪線模塊,控制剪線電機(jī),完成自動(dòng)剪線操作。(4)換色模塊,控制換色電機(jī),完成自動(dòng)換色操作。(5)光電檢測模塊(A 相Z 相),主軸電機(jī)旋轉(zhuǎn)位置及圈數(shù)的計(jì)數(shù)反饋。(6)限位處理模塊,防止步進(jìn)電機(jī)移框時(shí)越位。(7)斷線檢測模塊,檢測繡針上的線是否斷掉。(8)報(bào)警模塊,繡花機(jī)異常狀態(tài)報(bào)警。各個(gè)模塊之間的通信關(guān)系如圖1 所示:
2 多線程技術(shù)在運(yùn)動(dòng)控制系統(tǒng)中的應(yīng)用
Windows CE5.0 是一個(gè)多線程的多任務(wù)操作系統(tǒng),一個(gè)進(jìn)程由一個(gè)或多個(gè)線程組成,線程來負(fù)責(zé)執(zhí)行包含在進(jìn)程地址空間的代碼。實(shí)際上,操作系統(tǒng)以一種輪轉(zhuǎn)的方式為每個(gè)獨(dú)立的線程分配CPU 時(shí)間片,客觀上是所有的線程近乎同時(shí)執(zhí)行。根據(jù)線程任務(wù)的特點(diǎn),在進(jìn)行運(yùn)動(dòng)控制系統(tǒng)結(jié)構(gòu)設(shè)計(jì)時(shí),將功能相關(guān)、相互之間通信較多的任務(wù),設(shè)計(jì)成一個(gè)進(jìn)程中的多個(gè)線程,使這些任務(wù)共享該進(jìn)程的地址空間,減小通信和同步的開銷。本文設(shè)計(jì)中,就是根據(jù)這一機(jī)制實(shí)現(xiàn)的。
在整個(gè)繡花機(jī)系統(tǒng)中。運(yùn)動(dòng)控制部分為一個(gè)單獨(dú)的進(jìn)程,在這個(gè)進(jìn)程中根據(jù)圖1 中的各個(gè)模塊之間的關(guān)系,劃分處幾個(gè)線程,這些線程主要由兩個(gè)大的部分組成:強(qiáng)實(shí)時(shí)線程部分,包括主軸電機(jī)線程、步進(jìn)電機(jī)線程、光電編碼器線程、限位中斷線程和斷線處理線程;實(shí)時(shí)線程部分,包括換色線程、剪線線程和報(bào)警線程。系統(tǒng)中的線程同步主要是針對強(qiáng)實(shí)時(shí)線程而言的,而實(shí)時(shí)線程是通過像調(diào)用函數(shù)一樣被調(diào)用來實(shí)現(xiàn)功能的。
2.1 多線程優(yōu)先級(jí)設(shè)置
在多線程系統(tǒng)中,由于高優(yōu)先級(jí)的線程能隨時(shí)中斷低優(yōu)先級(jí)的線程,獲得運(yùn)行權(quán),這樣在設(shè)計(jì)系統(tǒng)時(shí)就要精心安排各個(gè)線程的優(yōu)先級(jí),只有合理的劃分應(yīng)用線程的優(yōu)先級(jí),系統(tǒng)才能合理調(diào)度這些線程,從而保障系統(tǒng)的實(shí)時(shí)性能要求。
Windows CE5.0 支持0~255 共256 了優(yōu)先級(jí),其中0 優(yōu)先級(jí)最高,255 優(yōu)先級(jí)最低。根據(jù)Windows CE 操作系統(tǒng)中的線程的優(yōu)先級(jí)層次安排,0~96 為高實(shí)時(shí)性程序的線程[2],再結(jié)合繡花機(jī)整體系統(tǒng)的任務(wù)安排,運(yùn)動(dòng)控制系統(tǒng)部分的線程對象的優(yōu)先級(jí)也主要安排在這個(gè)層次。運(yùn)動(dòng)控制部分的線程任務(wù)根據(jù)系統(tǒng)中的模塊來劃分,其內(nèi)容和優(yōu)先級(jí)安排如表1 所示:
為了設(shè)置和獲得一個(gè)線程的優(yōu)先級(jí),在系統(tǒng)中可以使用CeSetThreadPriority()和CeGetThreadPriority()函數(shù)來實(shí)現(xiàn)。線程創(chuàng)建完其優(yōu)先級(jí)也被確定下來。
2.2 線程之間的協(xié)調(diào)與通信
在多線程系統(tǒng)中,同步不同線程的活動(dòng)是很重要的。WindowsCE5.0 提供了多種方法來實(shí)現(xiàn)線程之間的協(xié)調(diào)和同步,有信號(hào)量(Semaphore)、臨界區(qū)(Critical Section)、事件(Event)、互斥體(Mutex)、對點(diǎn)的消息隊(duì)列等。各個(gè)方法都有各自的特點(diǎn)和適用的場合。在設(shè)計(jì)中的運(yùn)動(dòng)控制系統(tǒng)中,線程同步主要用的是事件和中斷來實(shí)現(xiàn)的。
2.2.1 事件Event 的應(yīng)用
事件是用的比較廣泛的同步對象,如果一個(gè)線程需要通知其它線程某個(gè)時(shí)間發(fā)生,可以使用事件(Event)同步對象,前一個(gè)線程給時(shí)間發(fā)送一個(gè)通知信號(hào),其他對事件發(fā)生感興趣的線程一般調(diào)用等待函數(shù)在時(shí)間上等待。初始化線程將事件設(shè)置為無信號(hào)狀態(tài)后開始進(jìn)行初始化。當(dāng)初始化完成后,線程把事件設(shè)置為有信號(hào)態(tài),通知下一個(gè)線程來完成余下的工作。在運(yùn)動(dòng)控制系統(tǒng)中主要定義了以下事件:
Event_EncoderA //編碼器A 相計(jì)數(shù)事件, 標(biāo)志主軸電機(jī)所在位置(100°和220°)
Event_MotorX //X 軸電機(jī)移動(dòng)事件,標(biāo)志X 軸電機(jī)運(yùn)行完。
Event_MotorY //Y 軸電機(jī)移動(dòng)事件,標(biāo)志Y軸電機(jī)運(yùn)行完。
Event_EncoderZ //編碼器Z 相中斷事件,標(biāo)志電機(jī)旋轉(zhuǎn)完一周。
Event_Limit //限位中斷事件,標(biāo)志繡框越界。
事件創(chuàng)建采用CreateEvent()函數(shù)來實(shí)現(xiàn),同時(shí)再創(chuàng)建好事件后要對其進(jìn)行初始化。
2.2.2 運(yùn)動(dòng)控制系統(tǒng)中斷處理
在運(yùn)動(dòng)控制系統(tǒng)中,中斷處理是重要部分。事件的創(chuàng)建也是為中斷處理準(zhǔn)備的,中斷響應(yīng)是根據(jù)事件觸發(fā)來實(shí)現(xiàn)的。中斷源的配置是由Windows CE 中的OAL(OEM 適配層)操作的[3][5],OAL 將物理中斷號(hào)映射成邏輯中斷號(hào),并關(guān)聯(lián)具體的事件。實(shí)現(xiàn)方法如下面的兩個(gè)步驟:
?。?)申請g_ Count1sysint 為IRQ_EINT8 的邏輯中斷號(hào):KernelIoControl (IOCTL_HAL_REQUEST_SYSINTR,&IRQ_EINT8,sizeof(UINT32),&g_Count1sysint,sizeof(UINT32), NULL) ;
?。?)邏輯中斷號(hào)g_ Count1sysint 關(guān)聯(lián)事件Event_MotorX:InterruptInitialize(g_ Count1sysint,Event_MotorX ,0,0);同樣的操作對其它物理中斷號(hào)的邏輯中斷號(hào)進(jìn)行申請和事件關(guān)聯(lián)。物理中斷、邏輯中斷、事件和線程之間的關(guān)系如圖2所示。
每個(gè)事件對應(yīng)系統(tǒng)中的一個(gè)中斷響應(yīng),當(dāng)事件被觸發(fā)時(shí),根據(jù)事件類型和時(shí)間做相應(yīng)的處理。中斷處理線程是驅(qū)動(dòng)程序編寫的關(guān)鍵,其效率的高低直接關(guān)系到系統(tǒng)的實(shí)時(shí)性性能。
2.2.3 線程通信的實(shí)現(xiàn)
運(yùn)動(dòng)控制系統(tǒng)軟件實(shí)現(xiàn)要緊密結(jié)合伺服電機(jī)的機(jī)械特性和繡花機(jī)各電機(jī)工作原理來完成,整個(gè)程序圍繞著主軸電機(jī)在轉(zhuǎn)一圈的過程中如何實(shí)現(xiàn)與其它模塊的通信協(xié)作來實(shí)現(xiàn),主要包括電機(jī)在220°~100°(約240°) 之間可移動(dòng)步進(jìn)電機(jī)階段和在100°~220°(約120°)禁止步進(jìn)電機(jī)階段,通過事件置位來響應(yīng)兩個(gè)階段中相關(guān)的中斷處理,實(shí)現(xiàn)各個(gè)線程之間同步。在整個(gè)的系統(tǒng)中,主軸電機(jī)運(yùn)轉(zhuǎn)為軟件的主線程,線程運(yùn)行過程中,通過中斷事件來等待、通知和調(diào)用其它線程,完成刺繡操作,主軸電機(jī)線程程序流程圖如圖3 所示,步進(jìn)電機(jī)線程流程圖如圖4 所示:
主軸電機(jī)線程根據(jù)花樣文件的控制碼來確定剪線、換色、跳針和刺繡等運(yùn)動(dòng)方式,當(dāng)為正常刺繡狀態(tài)時(shí),主軸電機(jī)線程處于阻塞狀態(tài),要等到Event_MotorX 和Event_MotorY 兩個(gè)電機(jī)移動(dòng)完事件置位后才可以移動(dòng)主軸電機(jī),同時(shí)在移動(dòng)主軸電機(jī)過程中,由于光電編碼器線程的優(yōu)先級(jí)高于主軸電機(jī)線程,故可以響應(yīng)A 相編碼器中斷,置位事件Event_EncoderA(100°)和Event_EncoderA(220°),可以觸發(fā)優(yōu)先級(jí)比主軸電機(jī)線程優(yōu)先級(jí)高的步進(jìn)電機(jī)線程,完成220°~100°移動(dòng)步進(jìn)電機(jī)階段和在100°~220°禁止步進(jìn)電機(jī)操作,之后步進(jìn)電機(jī)線程中初始化Event_EncoderA (100°) 和Event_EncoderA (220°), 置位Event_MotorX 和Event_MotorY 事件通知主軸電機(jī)線程運(yùn)行,而步進(jìn)電機(jī)線程又回到了阻塞狀態(tài),等待Event_EncoderA(100°)和Event_EncoderA(220°)事件的置位,到此繡花機(jī)完成了刺繡一針的操作。在步進(jìn)電機(jī)運(yùn)行過程中,如果繡框越界,運(yùn)動(dòng)控制系統(tǒng)會(huì)響應(yīng)中斷,置位Event_Limit,執(zhí)行高優(yōu)先級(jí)的限位越界線程并報(bào)警。在主軸電機(jī)運(yùn)行過程中,系統(tǒng)也會(huì)響應(yīng)斷線檢測中斷,如果斷線,也會(huì)進(jìn)行報(bào)警處理。
3 試驗(yàn)測試
文章中采用Windows CE5.0 多線程機(jī)制,完成了電腦繡花機(jī)運(yùn)動(dòng)控制系統(tǒng)功能的實(shí)現(xiàn),在這種體制下,使整合系統(tǒng)在控制、調(diào)度、通信和同步等方面都有較小的開銷,同時(shí)結(jié)合中斷,很好的滿足了系統(tǒng)的強(qiáng)實(shí)時(shí)性的要求,該方案已經(jīng)運(yùn)用于到了自主開發(fā)的高速工業(yè)繡花機(jī)中。在試驗(yàn)過程中我們可以看到,繡花機(jī)在正常工作的時(shí)候,啟動(dòng)較快,在1200 轉(zhuǎn)/分高速運(yùn)行時(shí)平穩(wěn)可靠且噪聲較小,并能夠精確的停車,在刺繡過程中,各個(gè)功能執(zhí)行比較協(xié)和,同時(shí)刺繡品質(zhì)和效率也有很大的提高,系統(tǒng)各方面性能都達(dá)到了預(yù)期目的。
4 結(jié)束語
本文的創(chuàng)新點(diǎn)在于將Windows CE5.0 的多線程機(jī)制與硬件中斷技術(shù)相結(jié)合應(yīng)用于強(qiáng)實(shí)時(shí)性要求的繡花機(jī)運(yùn)動(dòng)控制系統(tǒng)中,以最小的計(jì)算資源消耗實(shí)現(xiàn)了其預(yù)定的功能,在滿足系統(tǒng)實(shí)時(shí)性要求的同時(shí),避免了資源浪費(fèi),提高系統(tǒng)軟件的運(yùn)行效率。經(jīng)測試,表明繡花機(jī)高速運(yùn)行時(shí)在響應(yīng)速度、控制精度、減少噪聲等方面性能有明顯的改善,有較高的工程價(jià)值。
參考文獻(xiàn)
[1]蘇兢.電腦繡花機(jī)控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安:西北工業(yè)大學(xué)軟件工程學(xué)院, 2007.
[2]張冬泉,譚南林,王雪梅等.Windows CE 實(shí)用開發(fā)技術(shù)[M].北京:電子工業(yè)出版社, 2006.
[3]何宗鍵. Windows CE 嵌入式系統(tǒng)[M].北京: 北京航空航天大學(xué)出版社, 2006.
[4]賈立山,王立文,邢志偉,韓俊偉.基于多線程技術(shù)的3R 機(jī)器人控制系統(tǒng)[J].微計(jì)算機(jī)信息,2007,6-2:243-245.
[5]黃丹,邵惠鶴. 基于Windows CE 平臺(tái)的多線程編程[J].微計(jì)算機(jī)信息,2007.12-2:53-55.