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