羅軍
(湖南商務職業技術學院實訓中心,湖南 長沙 410205)
隨著近幾年國內信息化建設的大力普及,諸多企業對條碼打印軟件的需求越來越迫切。這些企業屬防偽印刷、物流流通、工業生產 居多。國外條碼打印軟件由于語言文字(漢化軟件很少)、操作習慣、功能需求差異等原因,讓國內企業“望而生畏”。綜上所述,國內條碼打印軟件社會需求環境已日益成熟;國內條碼打印軟件蓄勢待發。
目前,由于國內的打印機隨著價格的下降,已經開始逐漸普及,在國外,幾乎所有的生產單位都配備有一臺標簽條碼打印機(即LABELPRINTER 和 BARCODEPRINTER),應用在產品標識等方面,并且大部分公司都擁有條碼閱讀器(即SCANNER)和條碼數據采集器(盤點機)等打印機的附屬設備,形成了公司內部管理的條碼管理自動化的管理模式。
隨著信息化技術的飛速發展,以及工廠生產數量的日益增加。過去打印機自帶的軟件產品,已無法滿足現在生產的需要。一般最常見的就是打印流水號,按照企業自定義的規律遞增編碼,為了確保產品的唯一性,流水號不能重復,如果通過人員來記錄,一是工作量大,二是操作人員容易疏忽,導致重碼、錯碼。為了提高生產效率、減輕操作員負擔、確保安全可靠,必須根據企業自身所需,量身定做一款新的條碼打印軟件。
條碼打印機和普通條碼打印機不一樣,它是通過打印頭把碳帶(相當于針打的色帶)上的墨印在條碼打印紙上(有一定標準大小的不干膠式的打印紙)。雖然可以當作普通打印機使用.但絕大多數時間還是被應用在打印商品條碼上。條形碼打印機的打印是以熱為基礎,以碳帶為打印介質(或直接使用熱敏紙)完成打印,這種打印方式相對于普通打印方式的最大優點在于它可以在無人看管的情況下實現連續高速打印。
條碼打印軟件,顧名思義就是可以根據指定數據生成并打印條碼的軟件。業內最早成型的條碼打印軟件起于歐美發達國家,這與該地域工業自動化普及程度有著密不可分的關系。國外條碼標簽打印軟件著名的有:Bartender、nicelabel、labelmartix 等,這些軟件在國外條碼標簽打印業內長期居于霸主地位,與國外軟件相比,國內條碼打印軟件數量少之甚少,且鮮有耳聞。

圖1 條碼樣式
尺寸大小為30*9.6mm2,每張打印三個條碼。如圖1。
根據客戶需求及給出的樣式,其規則如下:
(1)第1位 P/S面
(2)第2-3位 產品型號兩位縮寫(如Nokia'NK)
(3)第4位 生產車間(0-9)
(4)第5-8位 流水號(同一產品不能重復,為節省排號,采用數字和字母混合的三十六進制編碼,即0000-ZZZZ)
在做打印輸出的同時,當然也需要把打印記錄存儲起來,以便于后期的維護或查詢。根據業務情況,此編碼不需要和其它數據關聯,無需存儲到數據庫中,可以脫機打印,存儲到本地即可。為方便簡單查詢,存儲介質采用Excel。
在安全方面,最關鍵在于確保打印流水號的唯一性,如果重復,會導致大量條碼紙張浪費。所以需要隨時把記錄保存到本地,并應對流水記錄號做定期備份,以防丟失。
基于對界面操作的友好性,以及開發周期的要求。開發語言選用c#,winform技術。在縮短開發周期、訪問Excel方面,C#占有優勢,畢竟都是Microsoft產品。另外還需要應用一些相關的技術,如打印、操作Excel及文本、基本的算法等。
在Winform中的打印主要可以通過三種方式來實現:一種是使用Winform提供的類,另一種是使用控件(如PrintDocument、Print-Dialog),還有一種就是利用水晶報表的打印。當然系統自帶的打印主要是針對文字或圖片,對于特殊的條碼打印,需要在原有的打印類上進行二次開發。為了節約開發周期,在這里采用目的比較成熟的條碼打印第三方控件CodeSoft。通過其留的各種接口,我們只需要通過程序在變量值中傳入相應的數據即可操作。另外用戶還可以通過CodeSoft調整條碼模塊的大小樣式等,增強了軟件的靈活性和可維護性。
在開發中,需要先加載一個CodeSoft自帶的DLL應用程序集,通過自定義的打印模板對象對CodeSoft內的變量、公式、函數等進行操作。基本代碼樣例如下:


值得注意的是,在打印過程中,需要隱式打開模板,如果不及時關閉或者結束進程的話,會導致顯式打不開模板,并且占用系統資源,為此需要在關閉軟件,或者打印結束時殺掉進程,以防后患。在程序中可以通過遍歷系統進程實現,找到名為LPPA的進程,結束進程。代碼如下:

Excel和開發語言C#都是微軟的產品,所以它們之間互訪性和操作性溶合得很好。在開發過程中,首先需要添加Excel引用,然后導入命名空間。主要應用其中的Application、WorkBook、WorkSheet等接口,操作比較方便。
同樣,程序是隱式打開Excel文件,需要及時關閉應用進程。方法和結束LPPA進程一樣,只不過可能會同時結束掉正常顯式打開的Excel文件。所以在此處需要加一個判斷,那就是只結束掉在程式中實例化一個Excel對象所產生的進程。那么需要為Excel對象添加時間屬性,實例化對象時,構造方法自動為時間屬性賦當前時間,殺掉進程時通過實例化的時間進行判斷即可。
根據客戶要求,為了節省流水號位數,采用三十六進制編碼。即10位數字和26位字母混合編碼。這樣我們需要自己編寫十與三十六進制互換功能。如下為十轉三十六進制的遞歸調用核心算法:

為了讓打印的條碼不會出現重復,我們需要把當前打印數據存儲到配置文件中,在C#中可以通過StreamReader和StreamWriter來進行讀寫操作。在單機打印的情況下,為了防止配置文件的修改和丟失,需要做好備分工作。
首先,在每次關閉軟件的時候,軟件自動對配置文件做備份,文件后綴改為.bat,然后在操作系統計劃任務中,定期對配置文件進行備份。前者的備份位置是軟件的當前目錄下,后者用戶可以自己設定。
條碼打印是很多制造企業的主要生產步驟之一,可以發生在任何一個環節,所以對其編碼的規則也五花八門。按維數可分為一維和二維條碼,按編碼規則可分為Code39,Code128等,像這樣復雜的類型組合,如果通過開發語言自行編寫,顯然增加了開發的難度,也降低了軟件的靈活性。通過使用第三方控件,很好的解決了這些問題。
[1]楊明,WinForms高級應用開發,科學技術文獻出版社,2006,第1版.
[2]海杰爾斯伯格,C#編程語言詳解,電子工業出版社,2007,第2版.
[3]秦開涌,胡業發,丁毓峰,條形碼技術在生產信息采集系統中的應用[J],計算機工程與應用,2005年23期.
[4]Microsoft MSDN,http://msdn.microsoft.com/zh-cn/default.aspx