王宏文,王志華,李曉燕
(河北工業(yè)大學(xué) 控制科學(xué)與工程學(xué)院,天津 300130)
王宏文(教授),主要研究方向?yàn)楝F(xiàn)代傳動(dòng)控制系統(tǒng)與智能化工程裝備、單片機(jī)與嵌入式系統(tǒng)。
噴碼機(jī)是一種通過軟件控制,使用非接觸方式在產(chǎn)品上進(jìn)行標(biāo)識(shí)的設(shè)備。它能夠以非接觸、高速、墨水快于的方式準(zhǔn)確地在不同材料(如金屬、玻璃、塑料等)的物體表面噴印商標(biāo)、防偽圖案、生產(chǎn)日期、保質(zhì)日期、批號(hào)、規(guī)格、條形碼等標(biāo)識(shí)。噴碼機(jī)一般均具備自動(dòng)計(jì)數(shù)、時(shí)間日期自動(dòng)更新等功能,廣泛應(yīng)用于飲料、食品、煙酒、醫(yī)藥、化工、電子電器、鋁塑管材等行業(yè)。隨著噴碼機(jī)的普及,噴碼技術(shù)也呈現(xiàn)出智能化、人性化、中文化以及高處理能力和低維修率的趨勢(shì)。
本文通過測(cè)試8位單片機(jī)W77E58控制下的噴頭輸入/輸出波形,獲得噴頭工作原理,編寫噴頭的驅(qū)動(dòng)程序,添加人機(jī)交互模塊,使噴碼機(jī)能夠在脫離上位機(jī)的情況下噴印信息。
通過對(duì)噴碼機(jī)控制系統(tǒng)的研究,分析了在其實(shí)現(xiàn)過程中的關(guān)鍵技術(shù),研究并設(shè)計(jì)關(guān)鍵技術(shù)的實(shí)現(xiàn)細(xì)節(jié),包括上下位機(jī)數(shù)據(jù)傳輸方法、打印數(shù)據(jù)轉(zhuǎn)換算法、噴頭的控制。
噴碼機(jī)噴頭接收的數(shù)據(jù)為電壓值矩陣,打印信息包含了數(shù)字、圖片、文字等,首先將打印信息經(jīng)過一定的算法轉(zhuǎn)換成點(diǎn)陣數(shù)據(jù),點(diǎn)陣數(shù)據(jù)中的點(diǎn)根據(jù)自己所處位置轉(zhuǎn)換成相應(yīng)的電壓值,這些電壓值就是打印的時(shí)候所需的數(shù)據(jù)。
打印信息轉(zhuǎn)換成點(diǎn)陣信息需要借助于點(diǎn)陣字庫。點(diǎn)陣字庫是一個(gè)數(shù)據(jù)文件,在這個(gè)數(shù)據(jù)文件里面保存了漢字字符或者英文字符的點(diǎn)陣數(shù)據(jù)。點(diǎn)陣字庫是把每個(gè)字符都分成x×y個(gè)點(diǎn),每個(gè)點(diǎn)的虛實(shí)用一個(gè)二進(jìn)制位來表示,虛用0表示,實(shí)用1表示。漢字點(diǎn)陣字庫是根據(jù)區(qū)位碼的順序進(jìn)行存儲(chǔ)的,因此可以根據(jù)區(qū)位碼來獲取一個(gè)字符的點(diǎn)陣在字庫中的存儲(chǔ)位置,獲取點(diǎn)陣起始存儲(chǔ)位置后,就可以從這個(gè)位置讀取出一個(gè)字符的點(diǎn)陣信息。例如若需要噴印一個(gè)16×16的中文漢字“好”,根據(jù)漢字點(diǎn)陣結(jié)構(gòu),“好”字的點(diǎn)陣結(jié)構(gòu)如圖1所示,圖中左上角虛線中為該16×16點(diǎn)陣漢字的逐列掃描方式下的一個(gè)字節(jié)數(shù)據(jù),其高低位的放置需要根據(jù)噴頭的串行接收數(shù)據(jù)方式相關(guān),噴頭在接收128位數(shù)據(jù)時(shí),高位在前,所以在提取圖像點(diǎn)陣數(shù)據(jù)時(shí)應(yīng)把低位放在前面,該漢字點(diǎn)陣左上角虛線中的字節(jié)如圖1右半部分所示,其十六進(jìn)制值為0x10。
圖1 漢字點(diǎn)陣
噴頭接收噴印信息和反饋信息是通過串行通信完成的。串行通信需要專門的接口控制器,由于CPU與接口控制器之間按并行方式傳輸,接口控制器與外設(shè)之間按串行方式傳輸,因此在串行接口中,必須要有“接收移位寄存器”(串→并)和“發(fā)送移位寄存器”(并→串)。
RS-232的流控制分為兩種,分別是硬件流控制和軟件流控制。本文RS-232通信采用軟件流控制方式。實(shí)現(xiàn)軟件流控制,必須有接收緩沖,當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量超過設(shè)定的高位時(shí),就向數(shù)據(jù)發(fā)送端發(fā)出XOFF字符,發(fā)送端收到XOFF字符后就立即停止發(fā)送數(shù)據(jù),當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量低于設(shè)定的低位時(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對(duì)串口進(jìn)行相應(yīng)的設(shè)置。調(diào)用函數(shù)SetupComn設(shè)置接收與發(fā)送的緩沖區(qū)大小,調(diào)用SetComnTimeouts函數(shù)設(shè)置串口接收與發(fā)送超時(shí)參數(shù),用函數(shù)PurgeComn函數(shù)清除該串口的收發(fā)緩沖區(qū)。然后可以調(diào)用函數(shù)ReadFile和WriteFile對(duì)串口進(jìn)行操作。串口使用函數(shù)CreateThread創(chuàng)建串口接收線程。以下為串口通信部分代碼:
本文主要涉及的硬件是由賽爾(XAAR)公司生產(chǎn)的XJ128按需噴印噴頭,噴頭前有一列共128個(gè)噴嘴,并以“二態(tài)”形式動(dòng)作,即數(shù)據(jù)傳輸為1時(shí)噴墨,為0時(shí)不動(dòng)作。其電氣接口共有30個(gè)引腳,但是其中有10個(gè)是保留接口,8個(gè)為電源和接地引腳。其他12個(gè)引腳為信號(hào)引腳。電氣接口與主控制電路的連接采用15針的RS232串行通信,為了方便操作和便于連接,其內(nèi)部采用轉(zhuǎn)換電路,把30針引腳轉(zhuǎn)換為15針。以下為15針引腳的信號(hào)說明:
1 GNDH電源高壓地線
2 MISO輸出串口數(shù)據(jù)輸出
3 VDD電源5V邏輯供電
4 nRESET輸入驅(qū)動(dòng)芯片邏輯復(fù)位
5 VPPH電源35V高壓供電
6 nFIRE輸入點(diǎn)火觸發(fā)信號(hào)
7 CLK輸入系統(tǒng)主時(shí)鐘
8 PHO輸入相位序列選取
9 SCK輸入時(shí)鐘信號(hào),nSS2輸入 MOSI/MISOA芯片
10 選取芯片2
11 READY輸出“準(zhǔn)備就緒”信號(hào),nSS1輸入 MOSI/MISOA芯片
12 選取芯片1
13 MOSI輸入串口數(shù)據(jù)輸入
14 nFAULT輸出高溫預(yù)警信號(hào)
XJ128噴頭的內(nèi)部有兩個(gè)64位的數(shù)據(jù)移位寄存器,通過MOSI引腳給噴頭傳輸數(shù)據(jù)時(shí),當(dāng)READY信號(hào)變?yōu)榈碗娖綍r(shí),先選中片選信號(hào)nSS2,128位數(shù)據(jù)中的高64位數(shù)據(jù)暫存在數(shù)據(jù)寄存器中,再選中片選信號(hào)nSS1,低64位數(shù)據(jù)存在另一個(gè)寄存器中。數(shù)據(jù)裝載完成后,就可以觸發(fā)nFIRE信號(hào),使寄存器中的數(shù)據(jù)噴出。MOSI引腳配合SCK的上升沿就可將數(shù)據(jù)裝載到寄存器中。由于噴頭中的寄存器是雙緩沖移位寄存器,所以可以在噴印的同時(shí),給寄存器裝載下一組要噴印數(shù)據(jù)。采用日本HIOKI 8855記憶示波器分組采樣對(duì)比15通道的信號(hào)波形,測(cè)試出通道信號(hào)如圖2所示,圖3為XJ128噴頭的控制時(shí)序圖。
圖2 通道信號(hào)測(cè)試圖(部分)
圖3 XJ128噴頭的控制時(shí)序圖
本設(shè)計(jì)的軟件設(shè)計(jì)部分主要由驅(qū)動(dòng)、應(yīng)用程序設(shè)計(jì)組成,其系統(tǒng)軟件結(jié)構(gòu)如圖4所示:
圖4 軟件結(jié)構(gòu)圖
上位機(jī)應(yīng)用軟件作為用戶對(duì)系統(tǒng)進(jìn)行人機(jī)交互操作的橋梁,是整個(gè)噴碼機(jī)系統(tǒng)中重要的一環(huán)。上位機(jī)應(yīng)用軟件向用戶提供符合其操作習(xí)慣的友好界面,豐富的交互信息提示。根據(jù)噴碼機(jī)的特點(diǎn),本系統(tǒng)的應(yīng)用軟件主要包括三個(gè)子系統(tǒng):編輯界面子系統(tǒng)、系統(tǒng)設(shè)置子系統(tǒng)、打印控制子系統(tǒng)。
2.1.1 編輯功能的設(shè)計(jì)
編輯界面的功能主要實(shí)現(xiàn)信息的創(chuàng)建,或?qū)σ延行畔⑦M(jìn)行編輯。在編輯界面,用戶可以編輯自己想要打印的信息,可以在打印信息位置插入序列號(hào),日期時(shí)間,文字,圖片等,可以對(duì)信息進(jìn)行具體的設(shè)置,比如字體的格式、大小、信息反轉(zhuǎn)、打印次數(shù)。圖5為條形碼屬性編輯對(duì)話框。
圖5 條碼屬性編輯
2.1.2 打印控制功能的設(shè)計(jì)
打印控制功能主要包括打印速度的設(shè)定,打印噴頭的選擇,打印信息的狀態(tài)。有些信息并不是固定不變的,比如在信息中插入時(shí)間信息和序列號(hào)。這樣每條打印信息會(huì)隨著時(shí)間和打印信息條數(shù)實(shí)時(shí)改變。用戶可以通過打印信息界面清楚觀察到打印信息的變化情況,并且可以停止或者啟動(dòng)當(dāng)前打印、編輯當(dāng)前打印信息或者重置打印計(jì)數(shù)器等操作。圖6為打印信息狀態(tài)窗口。
圖6 打印信息狀態(tài)
2.1.3 系統(tǒng)設(shè)置功能的設(shè)計(jì)
系統(tǒng)設(shè)置子系統(tǒng)提供一個(gè)噴碼機(jī)系統(tǒng)工作特性設(shè)置的界面,包括噴頭與串口選擇、語言文件的選擇等,如圖7所示。產(chǎn)品打印計(jì)數(shù)器設(shè)置界面可以選擇計(jì)數(shù)器、設(shè)置計(jì)數(shù)初值、累計(jì)值等參數(shù)。
圖7 系統(tǒng)選項(xià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)行訪問。當(dāng)系統(tǒng)啟動(dòng)后,設(shè)備管理器就會(huì)枚舉[HKEY_LOCAL_M(jìn)ACHINE\Drivers\BuiltIn]下所有鍵值,并調(diào)用相應(yīng)驅(qū)動(dòng)的XXX_Init函數(shù)。如果函數(shù)調(diào)用成功,設(shè)備管理器就會(huì)將該驅(qū)動(dòng)的信息寫入[HKEY_LOCAL_M(jìn)ACHINE\Drivers\Active]。WinCE提供流式接口驅(qū)動(dòng)程序管理流式設(shè)備。應(yīng)用程序使用文件API對(duì)設(shè)備進(jìn)行訪問,文件API被操作系統(tǒng)轉(zhuǎn)發(fā)到FileSys.exe進(jìn)程中,然后FileSys.exe發(fā)現(xiàn)是對(duì)設(shè)備的操作,就會(huì)把執(zhí)行交給設(shè)備管理器處理;接著設(shè)備管理器根據(jù)具體的請(qǐng)求,調(diào)用流式接口驅(qū)動(dòng)程序中暴露的接口。最終,驅(qū)動(dòng)程序負(fù)責(zé)與硬件交互。以下是驅(qū)動(dòng)程序中部分函數(shù):
驅(qū)動(dòng)除了進(jìn)行數(shù)據(jù)傳遞之外,還要向噴碼機(jī)提供時(shí)鐘信號(hào),發(fā)出點(diǎn)火信號(hào)等,以下是與噴頭連接引腳的寄存器設(shè)置:
當(dāng)系統(tǒng)不再使用該設(shè)備時(shí),應(yīng)用程序可調(diào)用DeactivateDevice()函數(shù)把該驅(qū)動(dòng)程序卸載。設(shè)備管理器會(huì)負(fù)責(zé)將sampledev.dll從device.exe的虛擬地址空間中移除,并且從 HKEY_LOCAL_M(jìn)ACHINE\Drivers\Active鍵下,移除對(duì)該設(shè)備驅(qū)動(dòng)的記錄。
本文設(shè)計(jì)了一款基于S3C2440處理器和WinCE操作系統(tǒng)下的高解析噴碼機(jī)圖形編輯軟件。采用模塊化的編程分別實(shí)現(xiàn)了模塊的功能,并編寫了噴頭的驅(qū)動(dòng)程序,界面設(shè)計(jì)簡(jiǎn)潔美觀,便于用戶操作,具有很好的應(yīng)用前景。
[1]方耀湘.基于FPGA的高解析噴碼機(jī)控制器設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)沙:湖南大學(xué),2008:8-13.
[2]莊曉奇,張莉君,方敏.基于ARM9的嵌入式噴碼機(jī)控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2010,18(8):1799-1801.
[3]陳誠(chéng).連續(xù)噴墨式噴碼機(jī)的設(shè)計(jì)[D].武漢:武漢理工大學(xué),2009:9-39.
[4]謝劍操.基于ARM7的噴碼機(jī)控制系統(tǒng)開發(fā)[D].杭州:浙江大學(xué),2006:1-27.
[5]曹景勝.基于WINCE的高解析噴碼系統(tǒng)上位機(jī)設(shè)計(jì)與實(shí)現(xiàn)[J].遼寧工業(yè)大學(xué)學(xué)報(bào),2010(5).
[6]漢字點(diǎn)陣字庫原理[OL].[2013-10].http//blog.csdn.net/zixu/article/details/2045164.
[7]何宗健.Widows CE嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社,2006.