王宏文,王志華,李曉燕
(河北工業(yè)大學(xué) 控制科學(xué)與工程學(xué)院,天津 300130)
王宏文(教授),主要研究方向為現(xiàn)代傳動控制系統(tǒng)與智能化工程裝備、單片機與嵌入式系統(tǒng)。
噴碼機是一種通過軟件控制,使用非接觸方式在產(chǎn)品上進(jìn)行標(biāo)識的設(shè)備。它能夠以非接觸、高速、墨水快于的方式準(zhǔn)確地在不同材料(如金屬、玻璃、塑料等)的物體表面噴印商標(biāo)、防偽圖案、生產(chǎn)日期、保質(zhì)日期、批號、規(guī)格、條形碼等標(biāo)識。噴碼機一般均具備自動計數(shù)、時間日期自動更新等功能,廣泛應(yīng)用于飲料、食品、煙酒、醫(yī)藥、化工、電子電器、鋁塑管材等行業(yè)。隨著噴碼機的普及,噴碼技術(shù)也呈現(xiàn)出智能化、人性化、中文化以及高處理能力和低維修率的趨勢。
本文通過測試8位單片機W77E58控制下的噴頭輸入/輸出波形,獲得噴頭工作原理,編寫噴頭的驅(qū)動程序,添加人機交互模塊,使噴碼機能夠在脫離上位機的情況下噴印信息。
通過對噴碼機控制系統(tǒng)的研究,分析了在其實現(xiàn)過程中的關(guān)鍵技術(shù),研究并設(shè)計關(guān)鍵技術(shù)的實現(xiàn)細(xì)節(jié),包括上下位機數(shù)據(jù)傳輸方法、打印數(shù)據(jù)轉(zhuǎn)換算法、噴頭的控制。
噴碼機噴頭接收的數(shù)據(jù)為電壓值矩陣,打印信息包含了數(shù)字、圖片、文字等,首先將打印信息經(jīng)過一定的算法轉(zhuǎn)換成點陣數(shù)據(jù),點陣數(shù)據(jù)中的點根據(jù)自己所處位置轉(zhuǎn)換成相應(yīng)的電壓值,這些電壓值就是打印的時候所需的數(shù)據(jù)。
打印信息轉(zhuǎn)換成點陣信息需要借助于點陣字庫。點陣字庫是一個數(shù)據(jù)文件,在這個數(shù)據(jù)文件里面保存了漢字字符或者英文字符的點陣數(shù)據(jù)。點陣字庫是把每個字符都分成x×y個點,每個點的虛實用一個二進(jìn)制位來表示,虛用0表示,實用1表示。漢字點陣字庫是根據(jù)區(qū)位碼的順序進(jìn)行存儲的,因此可以根據(jù)區(qū)位碼來獲取一個字符的點陣在字庫中的存儲位置,獲取點陣起始存儲位置后,就可以從這個位置讀取出一個字符的點陣信息。例如若需要噴印一個16×16的中文漢字“好”,根據(jù)漢字點陣結(jié)構(gòu),“好”字的點陣結(jié)構(gòu)如圖1所示,圖中左上角虛線中為該16×16點陣漢字的逐列掃描方式下的一個字節(jié)數(shù)據(jù),其高低位的放置需要根據(jù)噴頭的串行接收數(shù)據(jù)方式相關(guān),噴頭在接收128位數(shù)據(jù)時,高位在前,所以在提取圖像點陣數(shù)據(jù)時應(yīng)把低位放在前面,該漢字點陣左上角虛線中的字節(jié)如圖1右半部分所示,其十六進(jìn)制值為0x10。

圖1 漢字點陣
噴頭接收噴印信息和反饋信息是通過串行通信完成的。串行通信需要專門的接口控制器,由于CPU與接口控制器之間按并行方式傳輸,接口控制器與外設(shè)之間按串行方式傳輸,因此在串行接口中,必須要有“接收移位寄存器”(串→并)和“發(fā)送移位寄存器”(并→串)。
RS-232的流控制分為兩種,分別是硬件流控制和軟件流控制。本文RS-232通信采用軟件流控制方式。實現(xiàn)軟件流控制,必須有接收緩沖,當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量超過設(shè)定的高位時,就向數(shù)據(jù)發(fā)送端發(fā)出XOFF字符,發(fā)送端收到XOFF字符后就立即停止發(fā)送數(shù)據(jù),當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量低于設(shè)定的低位時,就向數(shù)據(jù)發(fā)送端發(fā)出XON字符。發(fā)送端收到XON字符后就立即開始發(fā)送數(shù)據(jù)。
WinCE下開發(fā)串口通信,首先打開串口并進(jìn)行初始化。使用創(chuàng)建文件函數(shù)CreateFile打開指定的串口,以獲取串口操作句柄m_h(yuǎn)Comm,如果打開成功,讀取串口的DCB結(jié)構(gòu)體變量,根據(jù)需要通過DCB對串口進(jìn)行相應(yīng)的設(shè)置。調(diào)用函數(shù)SetupComn設(shè)置接收與發(fā)送的緩沖區(qū)大小,調(diào)用SetComnTimeouts函數(shù)設(shè)置串口接收與發(fā)送超時參數(shù),用函數(shù)PurgeComn函數(shù)清除該串口的收發(fā)緩沖區(qū)。然后可以調(diào)用函數(shù)ReadFile和WriteFile對串口進(jìn)行操作。串口使用函數(shù)CreateThread創(chuàng)建串口接收線程。以下為串口通信部分代碼:

本文主要涉及的硬件是由賽爾(XAAR)公司生產(chǎn)的XJ128按需噴印噴頭,噴頭前有一列共128個噴嘴,并以“二態(tài)”形式動作,即數(shù)據(jù)傳輸為1時噴墨,為0時不動作。其電氣接口共有30個引腳,但是其中有10個是保留接口,8個為電源和接地引腳。其他12個引腳為信號引腳。電氣接口與主控制電路的連接采用15針的RS232串行通信,為了方便操作和便于連接,其內(nèi)部采用轉(zhuǎn)換電路,把30針引腳轉(zhuǎn)換為15針。以下為15針引腳的信號說明:
1 GNDH電源高壓地線
2 MISO輸出串口數(shù)據(jù)輸出
3 VDD電源5V邏輯供電
4 nRESET輸入驅(qū)動芯片邏輯復(fù)位
5 VPPH電源35V高壓供電
6 nFIRE輸入點火觸發(fā)信號
7 CLK輸入系統(tǒng)主時鐘
8 PHO輸入相位序列選取
9 SCK輸入時鐘信號,nSS2輸入 MOSI/MISOA芯片
10 選取芯片2
11 READY輸出“準(zhǔn)備就緒”信號,nSS1輸入 MOSI/MISOA芯片
12 選取芯片1
13 MOSI輸入串口數(shù)據(jù)輸入
14 nFAULT輸出高溫預(yù)警信號
XJ128噴頭的內(nèi)部有兩個64位的數(shù)據(jù)移位寄存器,通過MOSI引腳給噴頭傳輸數(shù)據(jù)時,當(dāng)READY信號變?yōu)榈碗娖綍r,先選中片選信號nSS2,128位數(shù)據(jù)中的高64位數(shù)據(jù)暫存在數(shù)據(jù)寄存器中,再選中片選信號nSS1,低64位數(shù)據(jù)存在另一個寄存器中。數(shù)據(jù)裝載完成后,就可以觸發(fā)nFIRE信號,使寄存器中的數(shù)據(jù)噴出。MOSI引腳配合SCK的上升沿就可將數(shù)據(jù)裝載到寄存器中。由于噴頭中的寄存器是雙緩沖移位寄存器,所以可以在噴印的同時,給寄存器裝載下一組要噴印數(shù)據(jù)。采用日本HIOKI 8855記憶示波器分組采樣對比15通道的信號波形,測試出通道信號如圖2所示,圖3為XJ128噴頭的控制時序圖。

圖2 通道信號測試圖(部分)

圖3 XJ128噴頭的控制時序圖
本設(shè)計的軟件設(shè)計部分主要由驅(qū)動、應(yīng)用程序設(shè)計組成,其系統(tǒng)軟件結(jié)構(gòu)如圖4所示:

圖4 軟件結(jié)構(gòu)圖
上位機應(yīng)用軟件作為用戶對系統(tǒng)進(jìn)行人機交互操作的橋梁,是整個噴碼機系統(tǒng)中重要的一環(huán)。上位機應(yīng)用軟件向用戶提供符合其操作習(xí)慣的友好界面,豐富的交互信息提示。根據(jù)噴碼機的特點,本系統(tǒng)的應(yīng)用軟件主要包括三個子系統(tǒng):編輯界面子系統(tǒng)、系統(tǒng)設(shè)置子系統(tǒng)、打印控制子系統(tǒng)。
2.1.1 編輯功能的設(shè)計
編輯界面的功能主要實現(xiàn)信息的創(chuàng)建,或?qū)σ延行畔⑦M(jìn)行編輯。在編輯界面,用戶可以編輯自己想要打印的信息,可以在打印信息位置插入序列號,日期時間,文字,圖片等,可以對信息進(jìn)行具體的設(shè)置,比如字體的格式、大小、信息反轉(zhuǎn)、打印次數(shù)。圖5為條形碼屬性編輯對話框。

圖5 條碼屬性編輯
2.1.2 打印控制功能的設(shè)計
打印控制功能主要包括打印速度的設(shè)定,打印噴頭的選擇,打印信息的狀態(tài)。有些信息并不是固定不變的,比如在信息中插入時間信息和序列號。這樣每條打印信息會隨著時間和打印信息條數(shù)實時改變。用戶可以通過打印信息界面清楚觀察到打印信息的變化情況,并且可以停止或者啟動當(dāng)前打印、編輯當(dāng)前打印信息或者重置打印計數(shù)器等操作。圖6為打印信息狀態(tài)窗口。

圖6 打印信息狀態(tài)
2.1.3 系統(tǒng)設(shè)置功能的設(shè)計
系統(tǒng)設(shè)置子系統(tǒng)提供一個噴碼機系統(tǒng)工作特性設(shè)置的界面,包括噴頭與串口選擇、語言文件的選擇等,如圖7所示。產(chǎn)品打印計數(shù)器設(shè)置界面可以選擇計數(shù)器、設(shè)置計數(shù)初值、累計值等參數(shù)。

圖7 系統(tǒng)選項
WinCE提供流式接口驅(qū)動程序管理流式設(shè)備。在流式接口驅(qū)動程序中,驅(qū)動程序負(fù)責(zé)把外設(shè)抽象成一個文件,而應(yīng)用程序則使用操作系統(tǒng)提供的API對外設(shè)進(jìn)行訪問。當(dāng)系統(tǒng)啟動后,設(shè)備管理器就會枚舉[HKEY_LOCAL_M(jìn)ACHINE\Drivers\BuiltIn]下所有鍵值,并調(diào)用相應(yīng)驅(qū)動的XXX_Init函數(shù)。如果函數(shù)調(diào)用成功,設(shè)備管理器就會將該驅(qū)動的信息寫入[HKEY_LOCAL_M(jìn)ACHINE\Drivers\Active]。WinCE提供流式接口驅(qū)動程序管理流式設(shè)備。應(yīng)用程序使用文件API對設(shè)備進(jìn)行訪問,文件API被操作系統(tǒng)轉(zhuǎn)發(fā)到FileSys.exe進(jìn)程中,然后FileSys.exe發(fā)現(xiàn)是對設(shè)備的操作,就會把執(zhí)行交給設(shè)備管理器處理;接著設(shè)備管理器根據(jù)具體的請求,調(diào)用流式接口驅(qū)動程序中暴露的接口。最終,驅(qū)動程序負(fù)責(zé)與硬件交互。以下是驅(qū)動程序中部分函數(shù):


驅(qū)動除了進(jìn)行數(shù)據(jù)傳遞之外,還要向噴碼機提供時鐘信號,發(fā)出點火信號等,以下是與噴頭連接引腳的寄存器設(shè)置:

當(dāng)系統(tǒng)不再使用該設(shè)備時,應(yīng)用程序可調(diào)用DeactivateDevice()函數(shù)把該驅(qū)動程序卸載。設(shè)備管理器會負(fù)責(zé)將sampledev.dll從device.exe的虛擬地址空間中移除,并且從 HKEY_LOCAL_M(jìn)ACHINE\Drivers\Active鍵下,移除對該設(shè)備驅(qū)動的記錄。
本文設(shè)計了一款基于S3C2440處理器和WinCE操作系統(tǒng)下的高解析噴碼機圖形編輯軟件。采用模塊化的編程分別實現(xiàn)了模塊的功能,并編寫了噴頭的驅(qū)動程序,界面設(shè)計簡潔美觀,便于用戶操作,具有很好的應(yīng)用前景。
[1]方耀湘.基于FPGA的高解析噴碼機控制器設(shè)計與實現(xiàn)[D].長沙:湖南大學(xué),2008:8-13.
[2]莊曉奇,張莉君,方敏.基于ARM9的嵌入式噴碼機控制系統(tǒng)設(shè)計與實現(xiàn)[J].計算機測量與控制,2010,18(8):1799-1801.
[3]陳誠.連續(xù)噴墨式噴碼機的設(shè)計[D].武漢:武漢理工大學(xué),2009:9-39.
[4]謝劍操.基于ARM7的噴碼機控制系統(tǒng)開發(fā)[D].杭州:浙江大學(xué),2006:1-27.
[5]曹景勝.基于WINCE的高解析噴碼系統(tǒng)上位機設(shè)計與實現(xiàn)[J].遼寧工業(yè)大學(xué)學(xué)報,2010(5).
[6]漢字點陣字庫原理[OL].[2013-10].http//blog.csdn.net/zixu/article/details/2045164.
[7]何宗健.Widows CE嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社,2006.