陳延文,陳旭文,管 永
(1.天水師范學(xué)院 電子信息與電氣工程學(xué)院,甘肅 天水 741001;2.蘭州達(dá)嘉噴碼標(biāo)識設(shè)備有限公司,甘肅 蘭州 730050)
為了實現(xiàn)工業(yè)生產(chǎn)過程中對產(chǎn)品的跟蹤和追溯,對產(chǎn)品內(nèi)外包裝進(jìn)行賦碼,并將內(nèi)外包裝的賦碼結(jié)果和內(nèi)外包裝的關(guān)聯(lián)結(jié)果保存到數(shù)據(jù)庫。通過軟件控制向打印機(jī)發(fā)送編碼或二維編碼,完成賦碼功能;內(nèi)外包裝的關(guān)聯(lián)由軟件完成,并存儲到數(shù)據(jù)庫中,要求可靠、快速、穩(wěn)定;便于企業(yè)后續(xù)利用本軟件產(chǎn)生的數(shù)據(jù),在ERP系統(tǒng)中開發(fā)更復(fù)雜的應(yīng)用。
本軟件主要解決食品飲料行業(yè)中包裝的賦碼與關(guān)聯(lián)問題。系統(tǒng)工作模型如圖1所示。
受蘭州達(dá)嘉噴碼標(biāo)識設(shè)備有限公司委托,開發(fā)設(shè)計該公司代理銷售產(chǎn)品的配套軟件,該公司主要銷售產(chǎn)品包括激光噴碼打印機(jī)、條碼打印機(jī)等產(chǎn)品,該公司還為相關(guān)企業(yè)提供產(chǎn)品集成服務(wù),包括賦碼控制、關(guān)聯(lián)軟件的開發(fā)。
向激光打印機(jī)和條碼打印機(jī)發(fā)送編碼,經(jīng)打印機(jī)打印賦碼,要求快速、準(zhǔn)確、穩(wěn)定;要求在賦碼打印的同時,還要進(jìn)行內(nèi)、外包裝碼的相互關(guān)聯(lián),并將關(guān)聯(lián)結(jié)果存入數(shù)據(jù)庫,以備后續(xù)查詢、跟蹤及ERP應(yīng)用開發(fā)。
圖1 系統(tǒng)工作模型
(1)賦碼。指將軟件根據(jù)客戶要求的格式生成的代碼按照激光打印機(jī)和條碼打印機(jī)的通訊協(xié)議要求,經(jīng)過處理后,發(fā)送給激光打印機(jī)或者條碼打印機(jī),經(jīng)過激光打印機(jī)和條碼打印機(jī)雕刻或打印在產(chǎn)品的外包裝上的過程。
(2)關(guān)聯(lián)。指產(chǎn)品的外包裝(箱)的條形碼和產(chǎn)品的內(nèi)包裝(盒或瓶)的編碼之間的對應(yīng)關(guān)系。例如:如果對于6瓶(盒)/箱的包裝形式,那么,1個箱碼則對應(yīng)6個瓶(盒)碼,箱碼和瓶(盒)碼編碼要求必須唯一,不能重復(fù),防止內(nèi)外包裝碼之間對應(yīng)關(guān)系混亂,造成竄碼。
(3)前關(guān)聯(lián)。指在賦碼前,由軟件根據(jù)廠家設(shè)置的參數(shù),形成內(nèi)包裝(盒或瓶)的編碼與外包裝(箱)的條形碼之間的對應(yīng)關(guān)系。
(1)要求計算機(jī)與激光打印機(jī)和條碼打印機(jī)通訊協(xié)議采用RS232通訊。
(2)要求激光打印機(jī)和條碼打印機(jī)在波特率為19 200和9 600的情況下,關(guān)聯(lián)速度要達(dá)到最少2箱/s的速度。
(3)要求每個產(chǎn)品批次產(chǎn)品數(shù)量在10~200 000瓶之間。
(4)要求將賦碼結(jié)果和關(guān)聯(lián)結(jié)果存入數(shù)據(jù)庫,便于數(shù)據(jù)查詢和數(shù)據(jù)導(dǎo)出。
(5)要求對賦碼出現(xiàn)失敗的情況下,可以進(jìn)行補(bǔ)救或重新打印賦碼。
(6)要求用戶界面友好、操作方便。
(1)硬件環(huán)境:X86 架構(gòu),主頻4.5GHZ,1G 內(nèi)存,天燦加密鎖,研華PCI1761-I/O卡。
(2)軟件環(huán)境:Windows XP、Windows 7、Windows 10平臺,.NET Framework 3.5以上版本,研華PCI1761 I/O卡驅(qū)動程序DAQNavi_PCI1761_PCM3761I_MIC3761_4.0.3.0以上版本,Access2010數(shù)據(jù)庫引擎。
軟件設(shè)計中的功能模塊包括:
(1)“新建任務(wù)”功能模塊。本功能模塊的功能是生成產(chǎn)品任務(wù)(實際就是生成Access 數(shù)據(jù)庫文件),將產(chǎn)品生產(chǎn)日期、產(chǎn)品批次、班次、每箱瓶數(shù)、生產(chǎn)線編碼、廠家編碼等信息存入數(shù)據(jù)庫,并根據(jù)瓶數(shù)產(chǎn)生瓶碼數(shù)據(jù)庫表(BottleTable)和箱碼數(shù)據(jù)庫表(BoxTable),BottleTable 表的記錄條數(shù)等于瓶數(shù),BoxTable表的記錄條數(shù)等于瓶數(shù)/每箱瓶數(shù)。在每條記錄中產(chǎn)生唯一的隨機(jī)碼,為在關(guān)聯(lián)時產(chǎn)生盒(或瓶)碼、箱碼做準(zhǔn)備。
(2)“產(chǎn)品信息設(shè)置”模塊。本功能模塊的功能是設(shè)置產(chǎn)品基本信息,信息包括:產(chǎn)品編碼、產(chǎn)品名稱、每箱瓶數(shù)、每垛箱數(shù)。將這些信息存入數(shù)據(jù)庫的表BasicTable中。要求實現(xiàn)增、刪、改的功能。
(3)“補(bǔ)印漏碼”模塊。本功能模塊的功能是對打印機(jī)打印賦碼過程中由于打印機(jī)故障或因打印質(zhì)量原因,對瓶(盒)碼及箱碼需要重新打印時,通過查詢箱碼,實現(xiàn)對箱碼和瓶(盒)碼的查詢和打印功能。要求通過輸入箱碼的后8位,然后查詢出箱碼以及與箱碼關(guān)聯(lián)的瓶碼,然后選擇打印。
(4)“系統(tǒng)參數(shù)設(shè)置”模塊。本功能模塊的功能是設(shè)置條碼打印機(jī)(打印箱碼)的通訊串行口及波特率、激光打印機(jī)(打印瓶(盒)碼)的通訊串行口及波特率,廠家代碼、生產(chǎn)線代碼、導(dǎo)出文件夾、備份文件夾等。這些信息保存在系統(tǒng)配置文件sysconfig.ini文件中,以備使用。
(5)“導(dǎo)出關(guān)聯(lián)數(shù)據(jù)”模塊。本功能模塊的功能是以文本文件格式(擴(kuò)展名為TXT)導(dǎo)出數(shù)據(jù)庫文件中的關(guān)聯(lián)結(jié)果數(shù)據(jù),并保存在“系統(tǒng)參數(shù)設(shè)置”中設(shè)置的“導(dǎo)出文件夾”的文件夾下,以備開發(fā)其他ERP應(yīng)用時使用。
(6)“系統(tǒng)日志瀏覽”模塊。本功能模塊的功能是在對系統(tǒng)運(yùn)行過程中產(chǎn)生的日志文件打開并進(jìn)行瀏覽,通過瀏覽日志文件,對系統(tǒng)的運(yùn)行過程中的錯誤進(jìn)行處理,對系統(tǒng)運(yùn)行性能進(jìn)行評估。
(7)“開始生產(chǎn)”模塊。本功能模塊的功能是根據(jù)生成的產(chǎn)品任務(wù),根據(jù)客戶要求格式,產(chǎn)生瓶(盒)碼和箱碼,并發(fā)送給激光打印機(jī)和條碼打印機(jī),將瓶碼存入數(shù)據(jù)庫表BottleTable中,將箱碼存入數(shù)據(jù)庫表BoxTable 中,并且進(jìn)行瓶(盒)碼和箱碼的關(guān)聯(lián),并將關(guān)聯(lián)結(jié)果存入數(shù)據(jù)庫的BoxTable 中,要求在向激光打印機(jī)發(fā)送瓶碼時,通過研華的PCI1761 I/O卡,接受激光打印機(jī)的“Marking”應(yīng)答信號的下降沿后,才發(fā)送,系統(tǒng)處理流程如圖2所示。
圖2 處理流程圖
基于物流管理的防竄碼前關(guān)聯(lián)軟件程序結(jié)構(gòu)如圖3所示。
系統(tǒng)功能需求與程序的關(guān)系見表1-表3。
表1 功能需求與程序的關(guān)系1
表2 功能需求與程序的關(guān)系2
表3 功能需求與程序的關(guān)系3
圖3 基于物流管理的防竄碼前關(guān)聯(lián)軟件程序結(jié)構(gòu)圖
在賦碼過程中,如果打印機(jī)出現(xiàn)故障、人為造成內(nèi)外包裝關(guān)聯(lián)錯誤、打印質(zhì)量不理想的情況,需要人工處理。如果打印機(jī)出現(xiàn)故障,造成漏碼,需要人工找出遺漏的碼,然后用“補(bǔ)印漏碼”的功能進(jìn)行補(bǔ)打漏碼。若打印質(zhì)量不理想,也可以利用“補(bǔ)印漏碼”的功能重新打印。
數(shù)據(jù)庫讀寫速度優(yōu)化的問題,用戶要求在打印機(jī)波特率為19 200時,根據(jù)打印內(nèi)容,賦碼打印速率達(dá)到3 箱/s,當(dāng)然這個速率和計算機(jī)配置有關(guān)系,與數(shù)據(jù)庫的讀寫方法也有關(guān)系。目前在Pentium4 3.5G,1GB 內(nèi)存配置下,能達(dá)到 3 箱/s 的速率,滿足客戶要求。這個速率越高越好。
(1)用戶主界面,啟動程序后,該界面首先顯示,實現(xiàn)與用戶總體交互,如圖4所示。
(2)“系統(tǒng)配置設(shè)置”界面,完成軟件系統(tǒng)運(yùn)行環(huán)境的信息配置,如圖5所示。
(3)“產(chǎn)品基本信息設(shè)置”界面,完成生產(chǎn)產(chǎn)品基本信息的設(shè)置,并存入數(shù)據(jù)庫,如圖6所示。
(4)“生產(chǎn)任務(wù)”界面,完成生產(chǎn)任務(wù)的生成,并把生成數(shù)據(jù)寫入數(shù)據(jù)庫,如圖7所示。
圖4 用戶主界面
圖5 “系統(tǒng)配置”設(shè)置界面
圖6 “產(chǎn)品基本信息設(shè)置”界面
(5)“打開生產(chǎn)任務(wù)”界面,完成生產(chǎn)任務(wù)的打開(打開對應(yīng)的數(shù)據(jù)庫文件),如圖8所示。
(6)“補(bǔ)印漏碼”界面,完成在賦碼過程中對漏碼或質(zhì)量不理想的碼進(jìn)行補(bǔ)打的對話框,如圖9所示。
(7)“關(guān)聯(lián)數(shù)據(jù)導(dǎo)出”界面,完成關(guān)聯(lián)數(shù)據(jù)以文本文件導(dǎo)出,以備開發(fā)ERP應(yīng)用,如圖10所示。
(8)“瀏覽日志文件”界面,完成對日志文件的瀏覽功能,如圖11所示。
圖7 “生產(chǎn)任務(wù)”界面
圖8 “打開生產(chǎn)任務(wù)”界面
圖9 “補(bǔ)印漏碼”界面
有四個外部硬件接口,分別為:
USB接口:利用第三方U盤加密鎖(天燦加密鎖)對軟件實現(xiàn)加密,防止用戶非法重復(fù)拷貝。與加密鎖有關(guān)的軟件包括:readPasswordDog 方法讀密碼,RegisterDeviceNotification()注冊設(shè)備。
PCI IO接口卡:型號為研華PCI1761 IO卡,需要安裝相應(yīng)的驅(qū)動程序。
與激光打印機(jī)連接的串行口:波特率可以設(shè)置。
與條形碼打印機(jī)連接的串行口:波特率可以設(shè)置。
外部軟件接口:access2010數(shù)據(jù)庫驅(qū)動引擎。
圖10 “關(guān)聯(lián)數(shù)據(jù)導(dǎo)出”界面
圖11 “瀏覽日志文件”界面
軟件中有一個類,是接口類,為串行通信提供統(tǒng)一接口,接口中有兩個方法。一個是事件處理方法Datareceived,另一個是數(shù)據(jù)發(fā)送方法SendData()。
操作步驟:參考圖2處理流程。
在圖12所示的主界面中,點擊“開始”按鈕,程序開始運(yùn)行,開始賦碼并關(guān)聯(lián)。在運(yùn)行過程中,如果要停止系統(tǒng),可以在圖12所示的主界面中,點擊“停止”按鈕,使程序停止運(yùn)行。
圖12 系統(tǒng)主界面
用戶要求在打印機(jī)波特率為19 200 時,根據(jù)打印內(nèi)容,賦碼打印速率達(dá)到3箱/s,經(jīng)過測試,在生成任務(wù)為20萬瓶時,賦碼打印速率可以達(dá)到5箱/s。
(1)產(chǎn)品基本信息E-R圖,如圖13所示。
圖13 產(chǎn)品基本信息E-R圖
(2)瓶(盒)碼信息E-R圖,如圖14所示。
圖14 瓶(盒)碼信息E-R圖
(3)箱信息E-R圖,如圖15所示。
圖15 箱信息E-R圖
通過本軟件系統(tǒng)的設(shè)計,實現(xiàn)了客戶提出的要求和功能,并很好地利用C#提供的多線程并行運(yùn)算功能解決了數(shù)據(jù)庫的快速讀寫,提供了在C#中通過網(wǎng)口和串口與賦碼設(shè)備的接口設(shè)計規(guī)范,為研華PCI卡在工控機(jī)中的工業(yè)應(yīng)用提供了參考。