王宏文 王藝伶 高維國
(河北工業(yè)大學(xué)控制科學(xué)與工程學(xué)院,天津 300130)
隨著消費者對產(chǎn)品的質(zhì)量意識日益增強,政府相關(guān)部門不斷出臺新的法律法規(guī)對市場進行嚴格的規(guī)范和管理,加上進出口貿(mào)易規(guī)模的不斷擴大,客觀要求國內(nèi)商品標示及識別技術(shù)與國際標準接軌。噴碼機以其非觸噴印的特點,非常適合在各種不同規(guī)格的產(chǎn)品本身或外表進行噴印,它適合自動化流水線的生產(chǎn)方式,使其成為各行業(yè)生產(chǎn)商的首選方式[1]。噴碼機系統(tǒng)的發(fā)展正是嵌入式系統(tǒng)發(fā)展的典型代表。
針對早期高解析噴碼機系統(tǒng)體積大、效率低、速度慢等缺點,本文開發(fā)出基于WinCE+ARM9的嵌入式系統(tǒng)。WinCE操作系統(tǒng)環(huán)境下的應(yīng)用程序可直接進行數(shù)據(jù)處理,驅(qū)動程序傳輸數(shù)據(jù),提供噴頭所需信號。該程序完善精簡了整個噴碼機系統(tǒng),提高了噴碼效率,具備小型便攜、通用性強、機動性高、可靠性好等特點;且光電編碼器能夠?qū)崿F(xiàn)對傳送帶速度及方向的檢測,實現(xiàn)了實時測控。
按工作方式劃分,噴碼機可分為連續(xù)式噴印和按需噴印。但是連續(xù)式噴印廢墨,質(zhì)量較低,所以選擇按需噴印的高解析噴碼機[2]。高解析噴碼機為無壓力驅(qū)動工作,其通過墨水自身的重力自行噴出,噴印的字體類似于打印機,解析度高,字體清晰[3]。
高解析噴碼機的噴印頭由一系列緊密排列的細小噴嘴組成,油墨從噴嘴中噴出,可以噴出噴嘴寬度的二進制二位圖形。所以噴頭每次所需的數(shù)據(jù)是可以噴印一列的數(shù)據(jù),而位圖數(shù)據(jù)信息是按照左下角到右上角的順序排列的,所以在把位圖轉(zhuǎn)換成二進制位圖后,需要旋轉(zhuǎn)圖形數(shù)據(jù)信息,才能夠讀出位圖一列的數(shù)據(jù)。處理后位圖的高低位的放置與噴頭的串行接收數(shù)據(jù)方式相關(guān),噴頭在接收128 bit數(shù)據(jù)時,高位在前,所以在提取圖像點陣數(shù)據(jù)時應(yīng)把低位放在前面[4]。
賽爾(Xaar)公司的按需噴墨技術(shù)目前在包裝印刷領(lǐng)域特別是條碼標識噴印方面,日益成為一種主流技術(shù)。
噴印頭技術(shù)也在迅速改進,更大的噴印頭被研制出來,以適應(yīng)更大的覆蓋面,并具有更高的分辨率和更多的墨滴大小變化,以達到更好的噴印效果。系統(tǒng)采用的噴頭型號是賽爾XJ128噴頭。
1.2.1 總體硬件設(shè)計
噴碼機系統(tǒng)采用天嵌TQ2440開發(fā)板。底板上必須包括的電路有:33 V供電電路、復(fù)位電路、Jtag電路和Nor/Nand啟動選擇電路,否則可能導(dǎo)致開發(fā)板不能正常啟動。
處理器選用三星公司生產(chǎn)的具有ARM9內(nèi)核的S3C2440,LCD選用天嵌14.33 cm觸摸屏作為操作界面,開發(fā)板和噴頭之間使用串行外設(shè)接口(serial peripheral interface,SPI)總線通信,主要用于將應(yīng)用程序處理好的數(shù)據(jù)傳輸給噴頭。噴頭可以接收并噴印該數(shù)據(jù),光電傳感器用于檢測傳輸帶的速度和方向并反饋給處理器,定時器向噴頭發(fā)送時鐘信號。根據(jù)應(yīng)用的需要,本系統(tǒng)采用了3種存儲器:①NOR Flash,用于存放系統(tǒng)引導(dǎo)程序等;②NAND Flash,作為程序存儲器,存放WinCE操作系統(tǒng)和應(yīng)用軟件等;③SDRAM,用作系統(tǒng)的內(nèi)存。
系統(tǒng)硬件結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)框圖Fig.1 Block diagram of the system hardware structure
1.2.2 SPI總線接口原理與協(xié)議
S3C2440A的SPI接口為串行數(shù)據(jù)傳輸接口。S3C2440A包括兩個SPI接口,每個接口分別有兩個8位的數(shù)據(jù)移位器用于發(fā)送和接收。傳輸8位串行數(shù)據(jù)的頻率由相應(yīng)的控制寄存器設(shè)置決定。同步信息移位和數(shù)據(jù)線的數(shù)據(jù)采集采用串行時鐘線。SPI分主設(shè)備和從設(shè)備,兩者通過SPI協(xié)議通信。SPI有4種模式,從設(shè)備的模式?jīng)Q定了主設(shè)備的模式。當(dāng)主設(shè)備的模式和從設(shè)備相同時,即可正常通信[5]。
WinCE是高度模塊化的嵌入式操作系統(tǒng),用戶可通過PB(PowerBuilder)工具根據(jù)具體的應(yīng)用需要,選擇需要的操作系統(tǒng)功能組件,然后生成操作系統(tǒng)運行時的映像,同時導(dǎo)出特定的軟件開發(fā)工具包(software development kit,SDK)。
高解析噴碼機是點陣噴印,XJ128型號的噴嘴一列有128個噴眼,即噴印的圖形需轉(zhuǎn)換成一列共128個點(1代表有墨,0代表沒墨),一次性向噴碼機輸送128個數(shù)據(jù)。
噴碼機系統(tǒng)的應(yīng)用程序按噴印信息分為6個模塊,分別是中英文文本模塊、位圖模塊、日期時間模塊、有效期模塊、序列號模塊和條形碼模塊[6]。系統(tǒng)需要處理的對象分為矢量字體和位圖。
對于矢量字體,需要將其轉(zhuǎn)化為點陣以便噴碼機噴印,系統(tǒng)利用API函數(shù)TextOut實現(xiàn)矢量字體的顯示和轉(zhuǎn)化。在微軟基礎(chǔ)類(Microsoft foundation classes,MFC)中調(diào)用 Create-CompatibleDc和 CreateDIBSection函數(shù)可以創(chuàng)建一個兼容DC和兼容位圖,pDC->TextOut可以顯示矢量字體,然后將這個DC保存為位圖,就可以得到矢量字體的點陣數(shù)據(jù)[7]。
對于位圖,盡管其已經(jīng)是點陣數(shù)據(jù),但是由于位圖的位深度各有不同,而噴印需要的數(shù)據(jù)僅僅是一位圖,因此為了可以噴印各種位圖,必須先進行位圖的數(shù)據(jù)處理。WinCE操作系統(tǒng)中的API函數(shù)是Windows API函數(shù)的子集,在MFC中同樣沒有可以處理數(shù)字圖形的類,因此需要用類向?qū)砑右粋€Cdib類,用于處理數(shù)字圖形[8]。
主要成員函數(shù)如下。
數(shù)據(jù)處理完成后,將處理好的點陣數(shù)據(jù)存儲到數(shù)組中,通過串口通信噴頭進行字體噴印。
由于噴碼機需要不斷地傳輸二進制碼,所以驅(qū)動程序是典型的流式驅(qū)動,WinCE提供流式接口驅(qū)動程序管理流式設(shè)備。在流式接口驅(qū)動程序中,驅(qū)動程序負責(zé)把外設(shè)抽象成一個文件,而應(yīng)用程序則使用操作系統(tǒng)提供的API對外設(shè)進行訪問[9]。下面是程序的部分代碼。
數(shù)據(jù)處理流程圖如圖2所示,這一部分是噴碼機應(yīng)用程序的重要功能。
圖2 數(shù)據(jù)處理流程圖Fig.2 Flowchart of data processing
為了便于驅(qū)動程序的維護和移植,驅(qū)動設(shè)計采用分層驅(qū)動,包括模型設(shè)備驅(qū)動層(model device driver,MDD)和平臺相關(guān)驅(qū)動層(platform dependence diver,PDD)。MDD層包含某一類型的驅(qū)動程序所通用的相關(guān)代碼,PDD層包含特定的硬件或平臺專用的代碼。操作系統(tǒng)通過設(shè)備驅(qū)動程序接口(device driver interface,DDI)函數(shù)調(diào)用MDD,MDD通過設(shè)備驅(qū)動程序服務(wù)接口(device driver service interface,DDSI)函數(shù)調(diào)用PDD[10]。SPI驅(qū)動設(shè)計具體介紹如下。
操作系統(tǒng)需要通過DDI接口與驅(qū)動MDD層交互。MDD層暴露的DDI函數(shù)GetRegistryData用來得到保存在注冊表中的硬件信息、獲取通信模式、時鐘極性、時鐘相位以及分頻值;函數(shù)InternalMapRegisters的功能是將SPI寄存器、GPIO寄存器、時鐘寄存器物理地址映射為虛擬地址,方便系統(tǒng)的調(diào)用和統(tǒng)一管理。SPI_Open的功能為打開設(shè)備進行讀/寫操作,該函數(shù)在調(diào)用API函數(shù)CreateFile()時調(diào)用;SPI_Close的功能為關(guān)閉設(shè)備,該函數(shù)在調(diào)用API函數(shù)CloseHandle時調(diào)用。這些DDI函數(shù)需要調(diào)用PPD層暴露的DDSI函數(shù)實現(xiàn)與硬件的交互。分層驅(qū)動程序調(diào)用流程圖如圖3所示。
圖3 分層驅(qū)動程序調(diào)用流程圖Fig.3 Flowchart of hierarchical driver calls
MDD層通過調(diào)用DDSI接口函數(shù)實現(xiàn)與硬件的交互。PDD層中的HW_Init函數(shù)將MDD層獲得的參數(shù)傳遞給SPI寄存器賦值,并且初始化模式和傳輸數(shù)據(jù)。SPI驅(qū)動程序傳輸數(shù)據(jù)流程圖如圖4所示。
圖4 SPI驅(qū)動程序傳輸數(shù)據(jù)流程圖Fig.4 Flowchart of SPI driver data transmission
當(dāng)系統(tǒng)啟動后,設(shè)備管理器就會枚舉[HKEY_CAL_CHINEDriversBuiltIn]下的所有鍵值,并調(diào)用驅(qū)動的SPI_Init函數(shù)。如果函數(shù)調(diào)用成功,設(shè)備管理器就會將該驅(qū)動的信息寫入到[HKEY_LOCAL_MACHINEDriversActive]。當(dāng)系統(tǒng)不再使用該設(shè)備時,應(yīng)用程序可調(diào)用DeactivateDevice()函數(shù)把該驅(qū)動程序卸載。設(shè)備管理器會負責(zé)將sampledev.dll從vice.exe的虛擬地址空間中移除,并且從HKEY_CAL_MACHINEDriversActive鍵下移除對該設(shè)備驅(qū)動的記錄[11]。
測試表明,系統(tǒng)穩(wěn)定性強,噴印速度較快,噴印效果清晰。噴印圖樣如圖5所示。
圖5 噴印樣品Fig.5 Printed samples
本文研究和開發(fā)了工業(yè)生產(chǎn)應(yīng)用中的噴印控制系統(tǒng),包括硬件系統(tǒng)模塊化設(shè)計、圖形處理、界面開發(fā)、SPI總線協(xié)議的實現(xiàn)、流式驅(qū)動程序的編寫。系統(tǒng)將ARM9強大的處理和控制能力和WinCE的實時性、可剪裁性等特點結(jié)合起來,滿足系統(tǒng)微型化、高性能、實時性強的要求。
[1]菲爾·依威斯.噴墨印刷技術(shù)的發(fā)展[J].印刷工業(yè),2007(3):12.
[2]李小虎,王寶生.淺談噴碼機的使用和維護[J].包裝與食品機械,2006,24(5):50 -52.
[3]姚晶,王尚偉.數(shù)字化噴碼技術(shù)的應(yīng)用與發(fā)展[J].絲網(wǎng)印刷,2007(2):40-42.
[4]方耀祥.基于FPGA的高解析噴碼機控制器設(shè)計與實現(xiàn)[D].長沙:湖南大學(xué),2007.
[5]陳淑珍,石波.基于Windows多線程環(huán)境下的串口通信[J].武漢大學(xué)學(xué)報:自然科學(xué)版,2000,15(3):373 -374.
[6]曹景勝,霍春寶,王海星,等.基于WINCE的高解析噴碼系統(tǒng)上位機設(shè)計與實現(xiàn)[J].遼寧工業(yè)大學(xué)學(xué)報:自然科學(xué)版,2010,30(5):281 -284.
[7]周師亮.嵌入式噴印系統(tǒng)的設(shè)計與實現(xiàn)[D].長沙:湖南大學(xué),2005.
[8]周長發(fā).精通Visual C++圖像處理編程[M].北京:電子工業(yè)出版社,2006.
[9]秦紅勇,魏守水,徐從娟,等.基于ARM 和WinCE系統(tǒng)的圓圖無紙記錄儀的設(shè)計[J].自動化儀表,2011,32(2):81 -83,86.
[10]何宗健.Widows CE嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社,2006.
[11]莫雨.WindowsCE大排檔[M].北京:北京航空航天大學(xué)出版社,2011.