羅軍
(湖南商務(wù)職業(yè)技術(shù)學(xué)院實訓(xùn)中心,湖南 長沙 410205)
隨著近幾年國內(nèi)信息化建設(shè)的大力普及,諸多企業(yè)對條碼打印軟件的需求越來越迫切。這些企業(yè)屬防偽印刷、物流流通、工業(yè)生產(chǎn) 居多。國外條碼打印軟件由于語言文字(漢化軟件很少)、操作習(xí)慣、功能需求差異等原因,讓國內(nèi)企業(yè)“望而生畏”。綜上所述,國內(nèi)條碼打印軟件社會需求環(huán)境已日益成熟;國內(nèi)條碼打印軟件蓄勢待發(fā)。
目前,由于國內(nèi)的打印機(jī)隨著價格的下降,已經(jīng)開始逐漸普及,在國外,幾乎所有的生產(chǎn)單位都配備有一臺標(biāo)簽條碼打印機(jī)(即LABELPRINTER 和 BARCODEPRINTER),應(yīng)用在產(chǎn)品標(biāo)識等方面,并且大部分公司都擁有條碼閱讀器(即SCANNER)和條碼數(shù)據(jù)采集器(盤點機(jī))等打印機(jī)的附屬設(shè)備,形成了公司內(nèi)部管理的條碼管理自動化的管理模式。
隨著信息化技術(shù)的飛速發(fā)展,以及工廠生產(chǎn)數(shù)量的日益增加。過去打印機(jī)自帶的軟件產(chǎn)品,已無法滿足現(xiàn)在生產(chǎn)的需要。一般最常見的就是打印流水號,按照企業(yè)自定義的規(guī)律遞增編碼,為了確保產(chǎn)品的唯一性,流水號不能重復(fù),如果通過人員來記錄,一是工作量大,二是操作人員容易疏忽,導(dǎo)致重碼、錯碼。為了提高生產(chǎn)效率、減輕操作員負(fù)擔(dān)、確保安全可靠,必須根據(jù)企業(yè)自身所需,量身定做一款新的條碼打印軟件。
條碼打印機(jī)和普通條碼打印機(jī)不一樣,它是通過打印頭把碳帶(相當(dāng)于針打的色帶)上的墨印在條碼打印紙上(有一定標(biāo)準(zhǔn)大小的不干膠式的打印紙)。雖然可以當(dāng)作普通打印機(jī)使用.但絕大多數(shù)時間還是被應(yīng)用在打印商品條碼上。條形碼打印機(jī)的打印是以熱為基礎(chǔ),以碳帶為打印介質(zhì)(或直接使用熱敏紙)完成打印,這種打印方式相對于普通打印方式的最大優(yōu)點在于它可以在無人看管的情況下實現(xiàn)連續(xù)高速打印。
條碼打印軟件,顧名思義就是可以根據(jù)指定數(shù)據(jù)生成并打印條碼的軟件。業(yè)內(nèi)最早成型的條碼打印軟件起于歐美發(fā)達(dá)國家,這與該地域工業(yè)自動化普及程度有著密不可分的關(guān)系。國外條碼標(biāo)簽打印軟件著名的有:Bartender、nicelabel、labelmartix 等,這些軟件在國外條碼標(biāo)簽打印業(yè)內(nèi)長期居于霸主地位,與國外軟件相比,國內(nèi)條碼打印軟件數(shù)量少之甚少,且鮮有耳聞。
圖1 條碼樣式
尺寸大小為30*9.6mm2,每張打印三個條碼。如圖1。
根據(jù)客戶需求及給出的樣式,其規(guī)則如下:
(1)第1位 P/S面
(2)第2-3位 產(chǎn)品型號兩位縮寫(如Nokia'NK)
(3)第4位 生產(chǎn)車間(0-9)
(4)第5-8位 流水號(同一產(chǎn)品不能重復(fù),為節(jié)省排號,采用數(shù)字和字母混合的三十六進(jìn)制編碼,即0000-ZZZZ)
在做打印輸出的同時,當(dāng)然也需要把打印記錄存儲起來,以便于后期的維護(hù)或查詢。根據(jù)業(yè)務(wù)情況,此編碼不需要和其它數(shù)據(jù)關(guān)聯(lián),無需存儲到數(shù)據(jù)庫中,可以脫機(jī)打印,存儲到本地即可。為方便簡單查詢,存儲介質(zhì)采用Excel。
在安全方面,最關(guān)鍵在于確保打印流水號的唯一性,如果重復(fù),會導(dǎo)致大量條碼紙張浪費(fèi)。所以需要隨時把記錄保存到本地,并應(yīng)對流水記錄號做定期備份,以防丟失。
基于對界面操作的友好性,以及開發(fā)周期的要求。開發(fā)語言選用c#,winform技術(shù)。在縮短開發(fā)周期、訪問Excel方面,C#占有優(yōu)勢,畢竟都是Microsoft產(chǎn)品。另外還需要應(yīng)用一些相關(guān)的技術(shù),如打印、操作Excel及文本、基本的算法等。
在Winform中的打印主要可以通過三種方式來實現(xiàn):一種是使用Winform提供的類,另一種是使用控件(如PrintDocument、Print-Dialog),還有一種就是利用水晶報表的打印。當(dāng)然系統(tǒng)自帶的打印主要是針對文字或圖片,對于特殊的條碼打印,需要在原有的打印類上進(jìn)行二次開發(fā)。為了節(jié)約開發(fā)周期,在這里采用目的比較成熟的條碼打印第三方控件CodeSoft。通過其留的各種接口,我們只需要通過程序在變量值中傳入相應(yīng)的數(shù)據(jù)即可操作。另外用戶還可以通過CodeSoft調(diào)整條碼模塊的大小樣式等,增強(qiáng)了軟件的靈活性和可維護(hù)性。
在開發(fā)中,需要先加載一個CodeSoft自帶的DLL應(yīng)用程序集,通過自定義的打印模板對象對CodeSoft內(nèi)的變量、公式、函數(shù)等進(jìn)行操作?;敬a樣例如下:
值得注意的是,在打印過程中,需要隱式打開模板,如果不及時關(guān)閉或者結(jié)束進(jìn)程的話,會導(dǎo)致顯式打不開模板,并且占用系統(tǒng)資源,為此需要在關(guān)閉軟件,或者打印結(jié)束時殺掉進(jìn)程,以防后患。在程序中可以通過遍歷系統(tǒng)進(jìn)程實現(xiàn),找到名為LPPA的進(jìn)程,結(jié)束進(jìn)程。代碼如下:
Excel和開發(fā)語言C#都是微軟的產(chǎn)品,所以它們之間互訪性和操作性溶合得很好。在開發(fā)過程中,首先需要添加Excel引用,然后導(dǎo)入命名空間。主要應(yīng)用其中的Application、WorkBook、WorkSheet等接口,操作比較方便。
同樣,程序是隱式打開Excel文件,需要及時關(guān)閉應(yīng)用進(jìn)程。方法和結(jié)束LPPA進(jìn)程一樣,只不過可能會同時結(jié)束掉正常顯式打開的Excel文件。所以在此處需要加一個判斷,那就是只結(jié)束掉在程式中實例化一個Excel對象所產(chǎn)生的進(jìn)程。那么需要為Excel對象添加時間屬性,實例化對象時,構(gòu)造方法自動為時間屬性賦當(dāng)前時間,殺掉進(jìn)程時通過實例化的時間進(jìn)行判斷即可。
根據(jù)客戶要求,為了節(jié)省流水號位數(shù),采用三十六進(jìn)制編碼。即10位數(shù)字和26位字母混合編碼。這樣我們需要自己編寫十與三十六進(jìn)制互換功能。如下為十轉(zhuǎn)三十六進(jìn)制的遞歸調(diào)用核心算法:
為了讓打印的條碼不會出現(xiàn)重復(fù),我們需要把當(dāng)前打印數(shù)據(jù)存儲到配置文件中,在C#中可以通過StreamReader和StreamWriter來進(jìn)行讀寫操作。在單機(jī)打印的情況下,為了防止配置文件的修改和丟失,需要做好備分工作。
首先,在每次關(guān)閉軟件的時候,軟件自動對配置文件做備份,文件后綴改為.bat,然后在操作系統(tǒng)計劃任務(wù)中,定期對配置文件進(jìn)行備份。前者的備份位置是軟件的當(dāng)前目錄下,后者用戶可以自己設(shè)定。
條碼打印是很多制造企業(yè)的主要生產(chǎn)步驟之一,可以發(fā)生在任何一個環(huán)節(jié),所以對其編碼的規(guī)則也五花八門。按維數(shù)可分為一維和二維條碼,按編碼規(guī)則可分為Code39,Code128等,像這樣復(fù)雜的類型組合,如果通過開發(fā)語言自行編寫,顯然增加了開發(fā)的難度,也降低了軟件的靈活性。通過使用第三方控件,很好的解決了這些問題。
[1]楊明,WinForms高級應(yīng)用開發(fā),科學(xué)技術(shù)文獻(xiàn)出版社,2006,第1版.
[2]海杰爾斯伯格,C#編程語言詳解,電子工業(yè)出版社,2007,第2版.
[3]秦開涌,胡業(yè)發(fā),丁毓峰,條形碼技術(shù)在生產(chǎn)信息采集系統(tǒng)中的應(yīng)用[J],計算機(jī)工程與應(yīng)用,2005年23期.
[4]Microsoft MSDN,http://msdn.microsoft.com/zh-cn/default.aspx