1 引言
在大型的企業(yè)中,對生產(chǎn)的產(chǎn)品進行一定的噴碼標識是必不可少的。在一些企業(yè)中主要采用人工噴碼的方式,隨著噴碼機的應用,噴碼的效果大大提高。但大多數(shù)仍然是人通過每次對噴印機的設定來實現(xiàn)噴碼變更的,這樣做對小批量的產(chǎn)品來說比較實用,但是如果對大批量的產(chǎn)品而言就不能勝任了。本文提出通過對企業(yè)產(chǎn)品條碼的自動掃描,獲取條碼中包含的需要噴印的參數(shù),然后通過pc監(jiān)控機實現(xiàn)對產(chǎn)品的自動噴印控制功能。
2 系統(tǒng)的需求分析
某企業(yè)目前有正在運行的erp系統(tǒng),卷紙傳輸線路中的硬件設備已經(jīng)安裝完畢,監(jiān)控系統(tǒng)建設主要實現(xiàn)對生產(chǎn)的卷紙自動噴印的監(jiān)控功能;并要求與原來的erp系統(tǒng)進行緊密的集成,由于現(xiàn)場可能出現(xiàn)故障,需要實現(xiàn)手動調(diào)節(jié)和自動運行功能,對實施噴印和掃描的設備進行有效的控制。
3 系統(tǒng)建設的總體規(guī)劃
通過對卷紙輸送線路的需求分析,可以采用如圖1所示的架構(gòu)圖實現(xiàn)對整個輸送線和噴印的控制。
[align=center]

圖1 噴印自動化監(jiān)控系統(tǒng)架構(gòu)圖[/align]
為滿足系統(tǒng)的正常自動運行,需要滿足以下條件:
(1) 入庫噴印的卷紙必須是已經(jīng)在生產(chǎn)線上經(jīng)過備案的(企業(yè)的erp系統(tǒng)有記錄);
(2) 卷紙上貼有與該卷紙相關的條形碼;
(3) 企業(yè)erp系統(tǒng)的相關記錄已經(jīng)傳送到監(jiān)控電腦的數(shù)據(jù)庫中。
隨著整個輸送線路的連續(xù)運作,卷紙傳送到噴印現(xiàn)場,首先,位于噴印設備前部的條碼掃描儀掃描該卷紙的條形碼,根據(jù)得到的條形碼中的信息,監(jiān)控電腦分析出該卷紙中的重量、制造編號、類別編號等信息;然后監(jiān)控電腦根據(jù)制造編號在數(shù)據(jù)庫中查詢是否有該記錄,如果有,從數(shù)據(jù)庫中提取與該卷紙有關的需要噴印的信息,并將該信息發(fā)送給噴印機控制器,然后plc發(fā)送1個噴印信號,由噴頭實施噴印。
關于網(wǎng)絡線路的選擇方面,由于車間級服務器離監(jiān)控現(xiàn)場比較遠,所以采用光纖連接方式,在監(jiān)控機房再通過雙絞線連接監(jiān)控pc和光纖收發(fā)器。至于微機與plc、噴印控制器以及條碼掃描儀,考慮到plc、噴印控制器以及條碼掃描儀的rs232通訊接口,主要采用了一個rs232 4口的擴展卡來實現(xiàn)通訊。
在整個自動化輸送線路中,關于如何檢測卷紙的位置以便來控制噴印之間的協(xié)調(diào)工作,主要采用的是紅外位置檢測裝置,當某個卷紙的末端進入噴印設備之后,檢測裝置將該信息發(fā)送給plc,以控制噴印設備中的輸送帶的動作,并控制噴槍的位置以便實施噴印。當然,每個輸送帶的連接處都有該檢測裝置,便于各條輸送帶之間的協(xié)調(diào)。
在噴印系統(tǒng)中,采用了瑪仕ml8大字符墨水噴碼系統(tǒng) marsh lcp/ml8,該系統(tǒng)適合包裝流水線在線的紙箱噴印,提供良好的大字符墨水噴碼技術,滿足客戶所有的標識要求。尤其是適合在惡劣環(huán)境下多行打印標識的要求,ml8大字符墨水噴碼系統(tǒng)可噴印多至8行的字符、徽標等信息,清晰易分辨。適合在嚴酷的生產(chǎn)環(huán)境下提供流暢的產(chǎn)品噴碼。該噴印系統(tǒng)配有打印頭、墨水系統(tǒng) 、光電眼、輸入裝置、數(shù)據(jù)行數(shù)打印以及支架和附件。其中打印頭提供多至8行的打印,而且可打印雙重字符和空框的特殊字符,打印高度可從7.9mm(0.312英寸)7x5點陣至203.2mm(8英寸)7x5點陣,噴印速度可以達到每分鐘噴印6.1-100m;其墨水系統(tǒng)采用非接觸的墨水噴印技術,清潔、易分辨,適合在凸凹不平的材質(zhì)表面上進行標識。
在該系統(tǒng)的構(gòu)建中,plc發(fā)揮著重要的控制作用。plc與監(jiān)控pc的通訊,主要是上傳監(jiān)控信息以及接受pc的控制信息;對輸送線的協(xié)調(diào)控制,主要是通過紅外位置檢測裝置輸入的位置信息來實現(xiàn)的;plc與電子秤的連接,主要是接受電子秤的重量信息;plc與噴印控制器的連接主要是發(fā)送開始噴印的控制信號。本系統(tǒng)采用的是日本三菱plc。
4 系統(tǒng)的軟件設計與實現(xiàn)
4.1 總體流程圖
通過對現(xiàn)場的總體分析,以及客戶對系統(tǒng)流程的要求,系統(tǒng)設計的總體流程如圖2所示。
[align=center]

圖2 系統(tǒng)總體流程圖[/align]
4.2 軟件開發(fā)工具選擇
在系統(tǒng)的軟件開發(fā)部分,由于系統(tǒng)中要涉及到數(shù)據(jù)在數(shù)據(jù)庫中的存儲等功能,本系統(tǒng)實現(xiàn)采用微軟的sql server 2000作為本地的數(shù)據(jù)庫系統(tǒng);visual basic 6.0作為應用程序開發(fā)平臺。由于wonderware i/o server軟件產(chǎn)品通過簡單的配置就能夠?qū)崿F(xiàn)與plc的通訊,這樣屏蔽了與plc通信中的各種細節(jié),而且便于系統(tǒng)的向上集成和節(jié)約成本,所以本系統(tǒng)在與plc通訊中采用了wonderware i/o server來實現(xiàn)。
4.3 監(jiān)控界面的設計
根據(jù)生產(chǎn)線監(jiān)控界面的設計原則:
(1) 直觀地反映現(xiàn)場系統(tǒng)和設備的運行狀態(tài);
(2) 既可以滿足系統(tǒng)整體運行的聯(lián)動控制和對單體設備的單獨控制,又允許現(xiàn)場單動控制;設計了如圖3所示的監(jiān)控界面。其中“l(fā)”形表示該系統(tǒng)中的輸送線的邏輯位置關系;位于圖形中部的控制按鈕是單獨對某條輸送線進行控制的;位于右下角部分表示踢出輸送線的控制按鈕,主要完成對噴印后的卷紙?zhí)叱錾a(chǎn)線的控制;位于右上方部分是系
[align=center]

圖3 監(jiān)控界面效果圖 [/align]
統(tǒng)自動和系統(tǒng)手動切換開關,系統(tǒng)自動狀態(tài)主要是反映plc控制的整個生產(chǎn)聯(lián)動狀況,在該狀態(tài)下不能單獨調(diào)節(jié),只有在切換到手動狀態(tài)以后,可以實現(xiàn)對某個控制設備的單獨控制。
在系統(tǒng)手動狀態(tài)中,對某個控制設備的單獨控制按鈕的軟件實現(xiàn),采用“1”、“2”、“4”3個狀態(tài)分別表示“停止”、“前進”、“后退”。以下是以m5為例的詳細實現(xiàn)代碼:
private sub ccm5_click()
tagman.d370.text="4"
tagman.d370.linkpoke
end sub
private sub sm5_click()
tagman.d370.text="1"
tagman.d370.linkpoke
end sub
private sub cm5_click()
tagman.d370.text="2"
tagman.d370.linkpoke
end sub
其中cm5、sm5以及ccm5分別是實現(xiàn)“前進”、“停止”、“后退”的按鈕名稱。
4.4 通訊設計
(1) 與plc通訊的設計
由于采用了wonderware的i/o server實現(xiàn)與plc的通訊,在程序中實現(xiàn)與plc的通訊只要是實現(xiàn)基本的連接功能,無需了解plc的通訊信息格式。與plc通訊的詳細代碼如下:
sub linktodde()
tagman.m112.linkmode = 1
tagman.m113.linkmode = 1
。 。 。 。 。 。
tagman.d348.linkmode = 1
tagman.d349.linkmode = 1
tagman.d350.linkmode = 1
plcstatus.linkmode = 1
end sub
只要在主界面中form_load()中調(diào)用就可以實現(xiàn)與plc的通訊。
(2) 與噴印機通訊的設計
與噴印機的通訊主要是通過mscomm控件來實現(xiàn)的,由于系統(tǒng)中有2臺噴印控制器,所以需要2個mscomm控件,在系統(tǒng)設計中分別為labelprint_1和labelprint_2,與噴印控制器的通訊協(xié)議均采用2400,n,8,2,通訊端口分別為4,5端口。每個噴印控制器控制8個噴槍,每個噴槍對應1個緩沖區(qū)以存儲要噴印的信息。以下是通訊的詳細代碼:
sub testreadbc()
file://先開啟print_a的通訊端口,并傳送資料,然后關閉通訊端口
lcp.outsidetest.labelprint_1.portopen=true
`開啟通訊端口
lcp.outsidetest.labelprint_1.output=chr$(4)
`清除以前的資料
lcp.outsidetest.labelprint_1.output=tpinstr(0).text
lcp.outsidetest.labelprint_1.output=chr$(10)
`跳至第二個緩沖區(qū)
lcp.outsidetest.labelprint_1.output=tpinstr(1).text
lcp.outsidetest.labelprint_1.output=chr$(10)
`跳至第3行
lcp.outsidetest.labelprint_1.output=tpinstr(2).text
。。。。。。
lcp.outsidetest.labelprint_1.output=chr$(10)
`跳至第8行
lcp.outsidetest.labelprint_1.output=tpinstr(7).text
lcp.outsidetest.labelprint_1.output=chr$(1)
`資料傳送完成
lcp.outsidetest.labelprint_1.portopen=false
`關閉通訊端口
file://對噴印控制器b的通訊同上
end sub
(3) 與條碼掃描儀通訊的設計
與條碼掃描儀通訊也是通過mscomm控件來實現(xiàn)的,在系統(tǒng)設計中為barcodecomm,通訊協(xié)議為9600,n,8,1,通訊端口為6端口。條碼掃描儀詳細的實現(xiàn)代碼如下:
sub readbarcode()
dim readbuf as string
`供條碼掃描儀讀取的數(shù)據(jù)用
dim classcode, productcode as string
`存儲班別標識碼和制造代碼
dim match as boolean
dim sqlstr as string
dim cusid as string
dim sindex, rmode as integer
barcodecomm.commport=`6` `設定通訊端口
barcodecomm.settings=`9600,n,8,1` `設定通訊協(xié)議
barcodecomm.portopen=true `開啟通訊端口
sindex=1
rmode=1
readbuf=barcodecomm.input
if (readbuf <> ",") then
`處理條碼掃描儀讀取的數(shù)據(jù)
while rmode < 2
while mid(readbuf, sindex, sindex) <> ","
classcode = classcode & mid(readbuf, sindex, sindex)
sindex = sindex + 1
wend
rmode = rmode + 1
while mid(readbuf, sindex, sindex) <> ","
productcode = productcode & mid(readbuf, sindex, sindex)
sindex = sindex + 1
wend
wend
match = false
`sql 搜尋指令,搜索數(shù)據(jù)庫中該信息是否存在
sqlstr= "select * from indata where 制造號碼=`" & productcode & "`"
outsidetest.scandb.recordsource = sqlstr
outsidetest.scandb.refresh
if outsidetest.scandb.recordset.recordcount = 0 then
match = false
else
match = true
end if
if match then
file://從數(shù)據(jù)庫中提取需要噴印的信息
bufcusid = outsidetest.scandb.recordset(“客戶代號”)
bufcusname = outsidetest.scandb.recordset(“客戶名稱”)
。。。。。。
bufhold=outsidetest.scandb.recordset(“保留”)
`將資料寫入 plc
tagman.d340.text=asc(mid(bufcusid, 1, 1)) * 100+asc(mid(bufcusid, 2, 1))
。。。。。。
tagman.d349.text = int(buflengh)
tagman.d340.linkpoke
。。。。。。
tagman.d349.linkpoke
else
msgbox “沒有符合條件的資料,或資料錯誤,請重新掃描一次!”, vbokonly, “錯誤”
end if
end if
end sub
只需要添加一個定時器,就可以實現(xiàn)條碼掃描儀的自動讀取數(shù)據(jù)的功能。
4.5 與erp的接口設計
該監(jiān)控系統(tǒng)的建立需要與現(xiàn)有企業(yè)運行的erp系統(tǒng)緊密的集成,以便發(fā)揮總體管理效益。通過規(guī)劃,根據(jù)上述,決定采用文本型的數(shù)據(jù)格式作為二者聯(lián)系的橋梁。據(jù)此系統(tǒng)建設需要滿足以下功能要求:(1)現(xiàn)有erp系統(tǒng)對已生產(chǎn)的卷紙的相關信息自動產(chǎn)生文本文件;(2)監(jiān)控系統(tǒng)自動下載文本文件,并分離其中的參數(shù)數(shù)據(jù),存入本地數(shù)據(jù)庫中;(3)對已經(jīng)噴印入庫的信息,監(jiān)控系統(tǒng)自動產(chǎn)生供erp系統(tǒng)使用的文本文件;(4)現(xiàn)有的erp系統(tǒng)自動讀取已入庫卷紙的信息。
針對監(jiān)控系統(tǒng)的設計而言,主要是滿足(2)(3)的功能,也就是資料的下載設計與資料的上傳設計。首先需要解決文件的存放位置問題,由于erp系統(tǒng)在遠程的車間級服務器上,而本系統(tǒng)路徑的位置選擇限于本地硬盤,所以采用建立遠程機特定文件目錄在本地的映射來實現(xiàn)。
(1) 資料自動下載的程序設計
程序設計中主要采用定時器的定時方式來實現(xiàn)資料的自動下載功能,以下是具體的下載實現(xiàn)代碼:
dim fileobj as new filesystemobject
dim sfile as textstream
dim onestring as string
dim strbuf01, strbuf02, strbuf03, strbuf04, strbuf05, strbuf06, strbuf07 as string
dim strbuf08, strbuf09, strbuf10, strbuf11, strbuf12, strbuf13 as string
set sfile = fileobj.opentextfile(lcp.sysparset.setreadfile.text, forreading, false)
while not sfile.atendofstream
onestring = sfile.readline
file://根據(jù)條碼的格式進行信息的截取
strbuf01 = mid(onestring, 1, 6)
strbuf02 = mid(onestring, 7, 4)
strbuf03 = mid(onestring, 11, 8)
。。。。。。
strbuf13 = mid(onestring, 45, 14)
file://根據(jù)掃描到的數(shù)據(jù)在數(shù)據(jù)庫中添加信息
downloaddb.recordset.addnew
downloaddb.recordset(“客戶代號”) = strbuf01
。。。。。。
downloaddb.recordset(“保留”) = strbuf13
downloaddb.recordset.update
wend
sfile.close(2) 資料的上傳設計
以下是資料上傳的具體代碼:
dim fileobj as new filesystemobject
dim sfile as textstream
dim onestring as string
set sfile = fileobj.opentextfile(“文件存放位置”, forappending, true)
lcp.dbmanager.rsuploaddb.movefirst
while lcp.dbmanager.rsuploaddb.eof = false
onestring=lcp.dbmanager.rsuploaddb(“制造號碼”) & lcp.dbmanager.rsuploaddb(“紙別”) & _
lcp.dbmanager.rsuploaddb(“基重”) & lcp.dbmanager.rsuploaddb(“尺寸”) & _
lcp.dbmanager.rsuploaddb(“尺寸單位”) & lcp.dbmanager.rsuploaddb(“入庫重量”) & _
lcp.dbmanager.rsuploaddb(“過磅日期”) & lcp.dbmanager.rsuploaddb(“過磅時間”) & _
lcp.dbmanager.rsuploaddb(“生產(chǎn)班別”) & lcp.dbmanager.rsuploaddb(“保留”)
sfile.writeline (onestring)
lcp.dbmanager.rsuploaddb(“updated”)=“1”
lcp.dbmanager.rsuploaddb.movenext
wend
sfile.close
5 結(jié)束語
該噴印自動化監(jiān)控系統(tǒng)的實施,大大提高了卷紙的噴印效率和噴印的質(zhì)量,取得了良好的經(jīng)濟效益。