摘要: 隨著科技的發(fā)展條形碼自動識別技術(shù)的應(yīng)用越來越廣泛,其具有輸入速度快、準確度高、成本低、可靠性強等優(yōu)點,在當今的自動識別技術(shù)中占有重要的地位。本文介紹了條形碼掃描識別的原理,以實例應(yīng)用探討了通用條形碼掃描識別適配器程序在現(xiàn)實應(yīng)用中的可行性。
關(guān)鍵詞: 條形碼技術(shù);掃描識別適配器程序;可行性
一.條形碼技術(shù)在自動識別技術(shù)中的重要性
條形碼技術(shù)是在計算機應(yīng)用和實踐中產(chǎn)生并發(fā)展起來的一種廣泛應(yīng)用于商業(yè)、郵政、圖書管理、倉儲、工業(yè)生產(chǎn)過程控制、交通等領(lǐng)域的自動識別技術(shù),具有輸入速度快、準確度高、成本低、可靠性強等優(yōu)點,在當今的自動識別技術(shù)中占有重要的地位。各級政府部門都保有大量的使用條形碼的程序,各軟件之間也有一定的關(guān)系,但是由于軟件的開發(fā)年代不同,或者開發(fā)者不同很難將這些軟件關(guān)聯(lián)起來,于是就造成了這樣一種局面:有些軟件,直接掃描條形碼即可快速定位到物品條目信息,但是另外一些程序卻必須要手工輸入才可以,無法發(fā)揮條形碼的良好作用。以設(shè)備管理程序為例,某部門為所有的IT設(shè)備做了設(shè)備編碼卡用來統(tǒng)計資產(chǎn)。若干年后他們又引入了一套GIS系統(tǒng)用來定位物品的位置,啟用了帶條形碼的設(shè)備銘牌。在新系統(tǒng)內(nèi),只要掃描銘牌上的條形碼就可以定位到這個設(shè)備,效率非常高。而老系統(tǒng)就需要手工輸入一串冗長的編碼才可以找到設(shè)備,輸入速度低下并且錯誤率很高。
二.條形碼掃描程序的識別原理
那么有沒有辦法使那些本來不支持條形碼掃描的程序也支持呢?答案是肯定的。首先,條形碼的掃描是通用的,一般使用的條形碼都是標準的,任何一款掃描器都可以準確高效地識別出它們。其次,軟件的輸入一般采用標準的輸入控件,該控件支持IME的拷貝粘貼操作。這兩點決定了只要我們能夠?qū)⑹髽硕ㄎ坏疆斍靶枰斎氲奈恢?,然后用條形碼掃描器掃描,就可以將掃描內(nèi)容直接粘貼至目標區(qū)域,這樣就可以在任意程序上支持條形碼識別了。而且一些條形碼掃描器直接就具備直接的IME輸出能力,我們不需要任何代碼就可以完成這樣的功能。通過上述的操作,我們已經(jīng)使老程序具備了條形碼識別的能力。如果老系統(tǒng)和新系統(tǒng)使用的不是一套碼表系統(tǒng)的話,直接輸入的條形碼就無法被老系統(tǒng)識別,我們就有必要做一個映射轉(zhuǎn)換工作,這時候就需要借助于外部程序的輔助。
三.通用條形碼掃描識別適配器程序可行性的應(yīng)用
在數(shù)據(jù)庫中建立一張映射表ItemMap,兩個字段Barcode(條形碼),Internalcode(內(nèi)部碼),并且在條形碼Barcode字段上建立索引,以提高查詢語句的性能。影射表建立后,需要人工錄入所有的條形碼與老的內(nèi)部碼之間的聯(lián)系,建成后的表格為掃描程序備用。下面可以開始掃描程序的開發(fā),掃描程序的輸入是條形碼掃描器的掃描結(jié)果,一般是一串數(shù)字,假設(shè)為123456。我們現(xiàn)在需要做的是開發(fā)一個程序能夠捕獲到這個結(jié)果。條碼掃描器接口目前主要有USB接口、PS/2接口、串口(RS232)等幾種形式。其中USB接口最為簡單,最大的好處就是即插即用,并且不會因為條碼掃描器的故障造成鍵盤或其它外設(shè)不能使用的情況,目前該接口主要應(yīng)用在與計算機的連接上。PS/2接口是最早成熟起來的條碼掃描器接口,該接口除了可以與計算機連接外(具有PS/2接口的計算機),更被大量應(yīng)用于與商業(yè)POS機做通訊接口,該接口最大的缺點是會因掃描器的故障造成鍵盤外設(shè)的無效狀態(tài)。RS232接口是目前工業(yè)領(lǐng)域中使用的最為頻繁的條碼掃描器接口,因它易于編程、數(shù)據(jù)傳輸距離遠、可構(gòu)建現(xiàn)場總線網(wǎng)絡(luò)等優(yōu)點,可被應(yīng)用到生產(chǎn)線條碼數(shù)據(jù)采集、PLC聯(lián)動順序控制等場合。我們以RS232接口為例,程序首先打開COM端口監(jiān)聽,當有數(shù)據(jù)傳送過來時,我們對輸入的數(shù)據(jù)流進行檢索,如果遇到回車就是一個數(shù)據(jù)結(jié)束,通常讀卡機每組數(shù)據(jù)結(jié)尾都返回一個回車作為結(jié)束符,如果有特別的返回方式,可以參閱具體型號的掃描設(shè)備文檔。涉及到的Delphi代碼如下:
Option Explicit
Dim sData As String
Private Sub Form_Load()'系統(tǒng)初始化時,與COM端口建立連接
With MSComm1
.CommPort = 2 '假設(shè)設(shè)備連接在COM2端口上,根據(jù)運行的系統(tǒng)而定,這里是演示代碼,真時情況下可以提供列表讓用戶選擇。
.PortOpen = True'將設(shè)備通訊端口打開
End With
End Sub
Private Sub MSComm1_OnComm()
Dim EndPos As Integer
Select Case MSComm1.CommEvent
Case comEvReceive '當有數(shù)據(jù)傳送過來時
sData = sData Trim(MSComm1.Input)
EndPos = InStr(1, sData, Chr(13))
If EndPos = 0 Then '如果未結(jié)束就繼續(xù)努力
Else '讀完一組。
'這里對讀取到的數(shù)據(jù)進行處理
sData = \"\" '清空
End If
End Select
End Sub
當掃描程序掃描到一個條形碼時,程序通過數(shù)據(jù)庫連接,首先查詢相應(yīng)的內(nèi)碼Select Internalcode From ItemMap Where Barcode='123456',然后把查詢的結(jié)果拷貝到目標區(qū)域就可以了。外部程序還有更高級的應(yīng)用,有時候輸入?yún)^(qū)域不是很好定位,比如不是程序界面上的比較靠前的輸入框,需要多次鍵盤tab鍵才可以走到。這個時候我們可以在輔助程序內(nèi)編寫適配器邏輯,用輔助程序接管掃描程序的輸入。當一個合法的輸入進來時,輔助程序根據(jù)規(guī)則自動找到目標然后粘貼。我們可以采用AutoIt這樣的自動化程序來完成這個目標。如果目標應(yīng)用程序使用的是非標準控件,無法采用Edit5這樣的描述符定位,我們還可以采用自動模擬發(fā)送多次Tab鍵的方式定位到目標區(qū)域。經(jīng)過這樣的改造應(yīng)用后,所有的程序都能享受到高速條形碼掃描設(shè)備帶來的便利,為老程序發(fā)揮了更大的價值,可以為社會節(jié)約更多的已有資源。
參考文獻:
[1]劉志海、曾慶良、朱由鋒:條形碼技術(shù)與程序設(shè)計〔M〕.清華大學(xué)出版社,2009,8.
[2]韋元華、舟子:條形碼技術(shù)與應(yīng)用〔M〕.中國紡織出版社,2003-06.