趙子軒,袁嫣紅,張建義
(浙江理工大學(xué)機(jī)械與自動控制學(xué)院,浙江杭州310018)
通常手套機(jī)由信號檢測模塊、選針模塊、軟軸控制模塊、紗線模塊、顯示界面模塊、按鍵模塊構(gòu)成。隨著生活提高,人們對手套的需求量也越來越大,從而推動了手套機(jī)技術(shù)的革新[1]。國內(nèi)外許多同類全自動電腦手套機(jī),其選針模塊、軟軸控制模塊、紗線模塊都出現(xiàn)了多種結(jié)構(gòu)。這些模塊在不同的設(shè)備中機(jī)械結(jié)構(gòu)或控制方式并不完全相同。
對于針選針模塊,有些機(jī)型采用電磁鐵選針模式,利用多路電磁鐵實(shí)現(xiàn)電控選針,從而達(dá)到動態(tài)選針的目的[2];大部分機(jī)械式選針模式則采用固定滾筒選針,在小滾筒上的不同部位鑲有不同的滾筒銷,通過機(jī)械傳動設(shè)計保證選針實(shí)現(xiàn)。其選針時序固定,僅能更換滾筒以改變選針時序,但其自身有著選針動作穩(wěn)定有點(diǎn)。
對于軟軸控制模塊,有些機(jī)型采用大滾筒式軟軸控制系統(tǒng),軟軸之間的關(guān)系通過機(jī)械結(jié)構(gòu)的變換實(shí)現(xiàn)。通過在大滾筒上的不同部位鑲有不同的傳動腳,使5路軟軸實(shí)現(xiàn)固定動作,系統(tǒng)中電磁鐵對5路軟軸整體控制;氣缸式軟軸控制系統(tǒng)則通過電磁閥控制特制氣缸動作,可實(shí)現(xiàn)5路軟軸單獨(dú)控制,5路軟軸動作互不影響[3]。
對于紗線模塊,簡單的機(jī)型由張力器和導(dǎo)紗器將紗線送入編織機(jī)構(gòu),紗線單一且無電控參與;先進(jìn)的機(jī)型則采用雙色換紗結(jié)構(gòu),由主導(dǎo)紗器、副導(dǎo)紗器控制不同的紗線,通過電磁鐵控制實(shí)現(xiàn)導(dǎo)紗器的切換,從而達(dá)到換紗目的[4]。
本研究針對可能的機(jī)型研究一種通用型的手套機(jī)控制系統(tǒng),可以通過簡單的軟件配置和硬件模塊增減,實(shí)現(xiàn)特定機(jī)型的控制要求。通過引入Linux系統(tǒng),并將手套機(jī)控制系統(tǒng)劃分為6個模塊,每個模塊基于總線—設(shè)備—驅(qū)動結(jié)構(gòu)思想分開編寫設(shè)備文件、驅(qū)動文件,從而使手套機(jī)控制系統(tǒng)不僅可實(shí)現(xiàn)手套編織等功能,簡化整個手套機(jī)的軟件,而且可有效地解決因機(jī)械結(jié)構(gòu)的變動帶來的軟件的變動。
手套機(jī)樣機(jī)如圖1所示。如前所述,不同手套機(jī)機(jī)型上,同一功能模塊可能在機(jī)械結(jié)構(gòu)與控制電路上并不相同,這樣針對不同手套機(jī)需要開發(fā)不同的控制系統(tǒng)。為此本研究針對市場已有機(jī)械結(jié)構(gòu),將手套機(jī)控制系統(tǒng)的硬件、軟件模塊化,同時引入Linux操作系統(tǒng),從而實(shí)現(xiàn)快速組合的通用型控制系統(tǒng)開發(fā)要求。
手套機(jī)的硬件模塊劃分如圖2所示。
圖1 手套機(jī)樣圖
圖2 手套機(jī)硬件模塊組成
嵌入式Linux一般由引導(dǎo)程序、Linux內(nèi)核、文件系統(tǒng)和應(yīng)用程序組成[5]?;贚inux的手套機(jī)嵌入式控制系統(tǒng),應(yīng)對Linux內(nèi)核、文件系統(tǒng)和應(yīng)用程序進(jìn)行相應(yīng)調(diào)整。在Linux內(nèi)核中,加入了6個模塊對應(yīng)的驅(qū)動。在文件系統(tǒng)中,編寫啟動腳/etc/init.d/rcS,通過菜單選擇,完成對手套機(jī)設(shè)備的啟動檢測。最后加載應(yīng)用程序,即手套機(jī)主程序。
對每個模塊,將采用Linux驅(qū)動經(jīng)典結(jié)構(gòu):驅(qū)動—總線—設(shè)備。驅(qū)動、設(shè)備分別向總線注冊,而且驅(qū)動(或設(shè)備)注冊時會調(diào)用相應(yīng)設(shè)備(或驅(qū)動)注冊,其實(shí)質(zhì)為總線依據(jù)設(shè)備結(jié)構(gòu)體成員name,驅(qū)動結(jié)構(gòu)體成員id_table是否匹配來決定是否調(diào)用驅(qū)動結(jié)構(gòu)體成員probe來完成注冊[6]。
將手套機(jī)模塊化后—即在底層對驅(qū)動和設(shè)備進(jìn)行分離,對手套機(jī)啟動腳本編寫。對于各種手套機(jī)控制結(jié)構(gòu),僅需修改或添加設(shè)備文件,而不會對應(yīng)用層主程序產(chǎn)生影響。
手套機(jī)模塊化驅(qū)動程序是模塊化手套機(jī)控制系統(tǒng)設(shè)計中重要組成部分。正是因?yàn)橥N模塊的多種設(shè)備實(shí)現(xiàn)了同樣控制動作,使得基于Linux手套機(jī)控制系統(tǒng)每個模塊驅(qū)動文件與設(shè)備的分離,不僅驅(qū)動文件對現(xiàn)有多種設(shè)備文件具有通用性,而且對將來產(chǎn)生的新設(shè)備起到了兼容,同時底層驅(qū)動與應(yīng)用層主控程序分離,減少了軟件上的修改,也是手套機(jī)啟動腳本可以對設(shè)備進(jìn)行選擇的基礎(chǔ)。
Linux驅(qū)動一般分為3類:字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備[7-8]。手套機(jī)控制系統(tǒng)中系統(tǒng)環(huán)境的網(wǎng)絡(luò)設(shè)備網(wǎng)卡(DM9000AEP),塊設(shè)備nand(K9F2GO8)芯片廠商出廠時已有驅(qū)動,僅做移植修改就可,無需編寫。對于6個模塊,均為字符型設(shè)備,獨(dú)立編寫。
以驅(qū)動對應(yīng)設(shè)備多寡為標(biāo)準(zhǔn),現(xiàn)將6個模塊分2部分,手機(jī)套各模塊與抽象后Linux驅(qū)動設(shè)備對應(yīng)關(guān)系如表1所示。
表1 手套機(jī)各模塊與抽象后Linux驅(qū)動及設(shè)備對應(yīng)關(guān)系1
該部分驅(qū)動與設(shè)備關(guān)系是一對二,故可采用platform總線。platform總線是Linux驅(qū)動經(jīng)典結(jié)構(gòu)的代表,即驅(qū)動—總線—設(shè)備模型。簡而言之,該結(jié)構(gòu)可將同類型設(shè)備的共性,即實(shí)現(xiàn)功能編寫于驅(qū)動文件,而將各設(shè)備的向異性,及硬件屬性,編寫于設(shè)備文件中。platform總線可依據(jù)設(shè)備platform_device成員name,驅(qū)動platform_drive成員id_table是否匹配來決定是否調(diào)用驅(qū)動platform_drive成員probe來完成注冊[9]。
2.2.1 設(shè)備文件的注冊
在platform設(shè)備文件xxx.c中(xxx即為表中Linux設(shè)備名一與Linux設(shè)備名二),platform通過設(shè)備注冊函數(shù)platform_device_register()完成platform_device數(shù)據(jù)結(jié)構(gòu)xxx_dev,resource數(shù)據(jù)結(jié)構(gòu)xxx_resource[]注冊,其中主要成員為:
start=Physical_address,end=SIZ:依手套機(jī)控制電路原理圖進(jìn)行設(shè)置,主要是電磁鐵,電磁閥物理的地址,以及微動開關(guān)的中斷號設(shè)置。
name="xxx":設(shè)備與驅(qū)動匹配標(biāo)志,其將決定調(diào)用哪個驅(qū)動。
platform_data=is_xxx:同模塊不同設(shè)備區(qū)分標(biāo)志,為便于驅(qū)動的編寫。
對于虛擬的設(shè)備needle_machine_dev.c(即單色紗線導(dǎo)紗機(jī)構(gòu)),僅賦值name,platform_data完成格式統(tǒng)一。
2.2.2 驅(qū)動文件的注冊
在platform驅(qū)動文yyy.c中(yyy即為表中l(wèi)inux驅(qū)動名)中,其核心為完成數(shù)組yyy__table[],函數(shù)yyy_probe()注冊。以紗線模塊為例的分析,數(shù)組yyy__table[]原型為:
從而匹配yarn_electromagnet_dev.c,yarn_machine_dev.c設(shè)備文件中platform_device成員name。
yarn_drv.c驅(qū)動文件中probe()將用platform_get_resource()獲得所注冊設(shè)備硬件信息(即yarn_electromagnet_dev_resource[],yarn_machine_dev_resource[]之一),而在file_operations成員ioctl()函數(shù)將依據(jù)probe()獲得的硬件情況,編寫統(tǒng)一控制的函數(shù)。從而yarn_drv.c驅(qū)動使不同紗線模塊設(shè)備的實(shí)現(xiàn)了相同的功能。
ioctl設(shè)備控制函數(shù)原型為:
static int ioctl(struct inode*inodep,struct file*filp,unsigned,int cmd,unsigned long arg)
設(shè)備文件注冊中platform_data=is_xxx在ioctl()函數(shù)中區(qū)分了不同設(shè)備,手套機(jī)驅(qū)動中Ioctrl()實(shí)現(xiàn)的命令1、命令2如表2、表3所示。
表2 手套機(jī)驅(qū)動中Ioctl()實(shí)現(xiàn)的命令1
表3 手套機(jī)驅(qū)動中Ioctl()實(shí)現(xiàn)的命令2
對于這3個模塊,由于驅(qū)動與設(shè)備一一對應(yīng)(如表4所示),可采用傳統(tǒng)字符驅(qū)動編寫流程[10],單個文件將設(shè)備和驅(qū)動一次性注冊,帶來程序的簡潔性,但并不合適手套機(jī)的模塊化的思想,例:信號檢測模塊中接近開關(guān)采用新的結(jié)構(gòu),有可能導(dǎo)致信號檢測模塊的軟件部分改變,以及手套機(jī)主程序的改變,即導(dǎo)致手套機(jī)整個系統(tǒng)的改變。故考慮對新結(jié)構(gòu)的兼容性,依然采用如第一部分所述設(shè)備—總線—驅(qū)動模型。
表4 手套機(jī)各模塊與抽象后Linux驅(qū)動及設(shè)備對應(yīng)關(guān)系2
綜上所述,6個模塊均采用Linux驅(qū)動經(jīng)典結(jié)構(gòu):驅(qū)動—總線—設(shè)備[11],以達(dá)到同一個驅(qū)動實(shí)現(xiàn)不同設(shè)備的操作,亦可對將來新設(shè)備結(jié)構(gòu)兼容,從而實(shí)現(xiàn)手套機(jī)控制系統(tǒng)的模塊化。
對于電磁鐵選針結(jié)構(gòu)的手套機(jī),因其多達(dá)92路的選針電磁鐵,故而其總的功耗需求量比較大。針對這種情況,對相關(guān)的源代碼進(jìn)行編寫時,應(yīng)對選針電磁鐵的吸合時間進(jìn)行合理的控制,以達(dá)到降低功耗的目的,同時也延長選針電磁鐵的使用壽命。選針電磁鐵的流程圖如圖3所示。
圖3 選針驅(qū)動電磁鐵程序流程圖
正是由于手套機(jī)控制系統(tǒng)的的模塊化,使得手套機(jī)設(shè)備檢測啟動程序可以在人工干預(yù)的情況下,進(jìn)行對設(shè)備文件進(jìn)行選擇性的加載,使手套機(jī)控制系統(tǒng)具有智能化的特點(diǎn)。
Linux內(nèi)核啟動時,如不添加/etc/inittab文件,默認(rèn)情況下將會分析/etc/init.d/rcS,其中rcS為shell文件,在該文件中可以完成對Linux應(yīng)用層的初始化[12],手套機(jī)硬件自檢測啟動程序流程如圖4所示。
圖4 手套機(jī)硬件自檢測啟動程序流程
除系統(tǒng)環(huán)境所移植的驅(qū)動采用固態(tài)加載(即與內(nèi)核統(tǒng)一編譯,Linux內(nèi)啟動,其將自動加載)外,6個模塊均采用動態(tài)加載方式(命令行模式insmodxxx.ko),分3步加載。
信號檢測模塊、顯示界面模塊、按鍵模塊的設(shè)備文件及驅(qū)動文件加載,其中顯示界面模塊、按鍵模塊將參與第二部分設(shè)備文件選。
要控制人員根據(jù)手套機(jī)的結(jié)構(gòu)對選針模塊、軟軸控制模塊、紗線模塊設(shè)備進(jìn)行二選一,依次運(yùn)行needle_dev_selsect.c,flexible_dev_selsect.c,yarn_dev_selsect.c進(jìn)行設(shè)備選擇,同時在子shell腳本中/glove_selsect.sh記錄設(shè)備選擇。3個模塊的設(shè)備選擇完畢,以“(/glove_selsect.sh)”啟動子shell腳本,進(jìn)行設(shè)備文件加載。以紗線模塊的yarn_dev_selsect.c為例,流程圖如圖5所示。
圖5 yarn_dev_selsect.c流程圖
在底層中已完成設(shè)備與驅(qū)動的隔離,啟動文件已將所需設(shè)備加載,故glove.c主程序僅對手套機(jī)6個模塊對應(yīng)驅(qū)動調(diào)用,其所做完全與具體設(shè)備無關(guān),從而實(shí)現(xiàn)手套機(jī)的模塊化,手套機(jī)與主程序流程圖如圖6所示。
圖6 手套機(jī)主程序流程圖
隨著手套機(jī)的機(jī)電一體化水平的提高,手套機(jī)的一些子控制系統(tǒng)由傳統(tǒng)的機(jī)械型轉(zhuǎn)化為機(jī)電結(jié)合型,而且電控比重越來越大,甚至有超過機(jī)械部分的趨勢。雖然電控型有著結(jié)構(gòu)簡單、操作靈活等優(yōu)點(diǎn),但傳統(tǒng)的機(jī)械型有著穩(wěn)定的優(yōu)點(diǎn),故兩種類型各自占據(jù)市場的一定比例。本研究將手套機(jī)的主要部分模塊化,使現(xiàn)有常見的不同子控制系統(tǒng)的手套機(jī)可以使用統(tǒng)一的主控程序。
基于Linux系統(tǒng),本研究設(shè)計了模塊化手套機(jī)控制系統(tǒng);基于總線—設(shè)備—驅(qū)動結(jié)構(gòu),該系統(tǒng)將傳統(tǒng)的手套機(jī)控制部分劃歸為6個模塊,并針對每個模塊編寫通用的驅(qū)動,實(shí)現(xiàn)多種同類設(shè)備控制。通過對手套機(jī)的模塊化,使應(yīng)用層手套機(jī)主程序與底層分離,減少因手套機(jī)機(jī)械結(jié)構(gòu)的變動帶來軟件上的修改。該設(shè)計已實(shí)現(xiàn)模塊化手套機(jī)控制系統(tǒng)的基本功能。
利用該設(shè)計所提出的模塊化思想,可對手套機(jī)新、舊子系統(tǒng)在軟件上的兼容性問題提供良好的解決辦法;使手套機(jī)不再因?yàn)椴糠肿酉到y(tǒng)的改變而帶來整個軟件系統(tǒng)的改變。
[1]呂渭賢.我國紡織機(jī)械行業(yè)自動化技術(shù)應(yīng)用現(xiàn)狀與發(fā)展趨勢[J].江蘇紡織,2004(5):8-10.
[2]郭得權(quán),袁嫣紅,張建義.基于ARM的手套機(jī)控制器設(shè)計[J].機(jī)電工程,2012,29(1):75-78.
[3]魯紅良.全自動電腦手套機(jī)新型軟軸控制裝置[J].針織工業(yè),2011,23(3):11-13.
[4]梁志華.SGM_F7型手套機(jī)改造為魔術(shù)手套機(jī)的實(shí)踐[J].上海紡織科技,2003,31(6):33.
[5]王紅凱.基于Linux嵌入式全自動橫機(jī)軟件系統(tǒng)設(shè)計[J].紡織學(xué)報,2008(29):101-105.
[6]宋寶華.設(shè)備驅(qū)動開發(fā)詳解[M].北京:人民郵電出版社,2012.
[7]毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,2001.
[8]高潔,羅凌紅.基于Linux 2.6內(nèi)核開發(fā)Mini GUI的觸摸屏驅(qū)動[J].兵工自動化,2013,32(2):94-96.
[9]馮國進(jìn).Linux驅(qū)動程序開發(fā)實(shí)例[M].北京:機(jī)械工業(yè)出版社,2011.
[10]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2012.
[11]劉崢嶸.嵌入式Linux應(yīng)用開發(fā)詳解[M].北京:機(jī)械工業(yè)出版社,2004.
[12]劉淼.嵌入式系統(tǒng)接口設(shè)計與Linux驅(qū)動程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.