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