在大型的企业中,对生产的产品进行一定的喷码标识是必不可少的。在一些企业中主要采用人工喷码的方式,随着喷码机的应用,喷码的效果大大提高。但大多数仍然是人通过每次对喷印机的设定来实现喷码变更的,这样做对小批量的产品来说比较实用,但是如果对大批量的产品而言就不能胜任了。本文提出通过对企业产品条码的自动扫描,获取条码中包含的需要喷印的参数,然后通过pc监控机实现对产品的自动喷印控制功能。
2 系统的需求分析
某企业目前有正在运行的erp系统,卷纸传输线路中的硬件设备已经安装完毕,监控系统建设主要实现对生产的卷纸自动喷印的监控功能;并要求与原来的erp系统进行紧密的集成,由于现场可能出现故障,需要实现手动调节和自动运行功能,对实施喷印和扫描的设备进行有效的控制。
3 系统建设的总体规划
通过对卷纸输送线路的需求分析,可以采用如图1所示的架构图实现对整个输送线和喷印的控制。
图1 喷印自动化监控系统架构图
为满足系统的正常自动运行,需要满足以下条件:
(1) 入库喷印的卷纸必须是已经在生产线上经过备案的(企业的erp系统有记录);
(2) 卷纸上贴有与该卷纸相关的条形码;
(3) 企业erp系统的相关记录已经传送到监控电脑的数据库中。
随着整个输送线路的连续运作,卷纸传送到喷印现场,首先,位于喷印设备前部的条码扫描仪扫描该卷纸的条形码,根据得到的条形码中的信息,监控电脑分析出该卷纸中的重量、制造编号、类别编号等信息;然后监控电脑根据制造编号在数据库中查询是否有该记录,如果有,从数据库中提取与该卷纸有关的需要喷印的信息,并将该信息发送给喷印机控制器,然后plc发送1个喷印信号,由喷头实施喷印。
关于网络线路的选择方面,由于车间级服务器离监控现场比较远,所以采用光纤连接方式,在监控机房再通过双绞线连接监控pc和光纤收发器。至于微机与plc、喷印控制器以及条码扫描仪,考虑到plc、喷印控制器以及条码扫描仪的rs232通讯接口,主要采用了一个rs232 4口的扩展卡来实现通讯。
在整个自动化输送线路中,关于如何检测卷纸的位置以便来控制喷印之间的协调工作,主要采用的是红外位置检测装置,当某个卷纸的末端进入喷印设备之后,检测装置将该信息发送给plc,以控制喷印设备中的输送带的动作,并控制喷枪的位置以便实施喷印。当然,每个输送带的连接处都有该检测装置,便于各条输送带之间的协调。
在喷印系统中,采用了玛仕ml8大字符墨水喷码系统 marsh lcp/ml8,该系统适合包装流水线在线的纸箱喷印,提供良好的大字符墨水喷码技术,满足客户所有的标识要求。尤其是适合在恶劣环境下多行打印标识的要求,ml8大字符墨水喷码系统可喷印多至8行的字符、徽标等信息,清晰易分辨。适合在严酷的生产环境下提供流畅的产品喷码。该喷印系统配有打印头、墨水系统 、光电眼、输入装置、数据行数打印以及支架和附件。其中打印头提供多至8行的打印,而且可打印双重字符和空框的特殊字符,打印高度可从7.9mm(0.312英寸)7x5点阵至203.2mm(8英寸)7x5点阵,喷印速度可以达到每分钟喷印6.1-100m;其墨水系统采用非接触的墨水喷印技术,清洁、易分辨,适合在凸凹不平的材质表面上进行标识。
在该系统的构建中,plc发挥着重要的控制作用。plc与监控pc的通讯,主要是上传监控信息以及接受pc的控制信息;对输送线的协调控制,主要是通过红外位置检测装置输入的位置信息来实现的;plc与电子秤的连接,主要是接受电子秤的重量信息;plc与喷印控制器的连接主要是发送开始喷印的控制信号。本系统采用的是日本三菱plc。
4 系统的软件设计与实现
4.1 总体流程图
通过对现场的总体分析,以及客户对系统流程的要求,系统设计的总体流程如图2所示。
图2 系统总体流程图
4.2 软件开发工具选择
在系统的软件开发部分,由于系统中要涉及到数据在数据库中的存储等功能,本系统实现采用微软的sql server 2000作为本地的数据库系统;visual basic 6.0作为应用程序开发平台。由于wonderware i/o server软件产品通过简单的配置就能够实现与plc的通讯,这样屏蔽了与plc通信中的各种细节,而且便于系统的向上集成和节约成本,所以本系统在与plc通讯中采用了wonderware i/o server来实现。
4.3 监控界面的设计
根据生产线监控界面的设计原则:
(1) 直观地反映现场系统和设备的运行状态;
(2) 既可以满足系统整体运行的联动控制和对单体设备的单独控制,又允许现场单动控制;设计了如图3所示的监控界面。其中“l”形表示该系统中的输送线的逻辑位置关系;位于图形中部的控制按钮是单独对某条输送线进行控制的;位于右下角部分表示踢出输送线的控制按钮,主要完成对喷印后的卷纸踢出生产线的控制;位于右上方部分是系
图3 监控界面效果图
统自动和系统手动切换开关,系统自动状态主要是反映plc控制的整个生产联动状况,在该状态下不能单独调节,只有在切换到手动状态以后,可以实现对某个控制设备的单独控制。
在系统手动状态中,对某个控制设备的单独控制按钮的软件实现,采用“1”、“2”、“4”3个状态分别表示“停止”、“前进”、“后退”。以下是以m5为例的详细实现代码:
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分别是实现“前进”、“停止”、“后退”的按钮名称。
4.4 通讯设计
(1) 与plc通讯的设计
由于采用了wonderware的i/o server实现与plc的通讯,在程序中实现与plc的通讯只要是实现基本的连接功能,无需了解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()中调用就可以实现与plc的通讯。
(2) 与喷印机通讯的设计
与喷印机的通讯主要是通过mscomm控件来实现的,由于系统中有2台喷印控制器,所以需要2个mscomm控件,在系统设计中分别为labelprint_1和labelprint_2,与喷印控制器的通讯协议均采用2400,n,8,2,通讯端口分别为4,5端口。每个喷印控制器控制8个喷枪,每个喷枪对应1个缓冲区以存储要喷印的信息。以下是通讯的详细代码:
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)
`跳至第二个缓冲区
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控件来实现的,在系统设计中为barcodecomm,通讯协议为9600,n,8,1,通讯端口为6端口。条码扫描仪详细的实现代码如下:
sub readbarcode()
dim readbuf as string
`供条码扫描仪读取的数据用
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` `设定通讯协议
barcodecomm.portopen=true `开启通讯端口?
sindex=1
rmode=1
readbuf=barcodecomm.input
if (readbuf <> ",") then
`处理条码扫描仪读取的数据
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 搜寻指令,搜索数据库中该信息是否存在
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://从数据库中提取需要喷印的信息
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
只需要添加一个定时器,就可以实现条码扫描仪的自动读取数据的功能。
4.5 与erp的接口设计
该监控系统的建立需要与现有企业运行的erp系统紧密的集成,以便发挥总体管理效益。通过规划,根据上述,决定采用文本型的数据格式作为二者联系的桥梁。据此系统建设需要满足以下功能要求:(1)现有erp系统对已生产的卷纸的相关信息自动产生文本文件;(2)监控系统自动下载文本文件,并分离其中的参数数据,存入本地数据库中;(3)对已经喷印入库的信息,监控系统自动产生供erp系统使用的文本文件;(4)现有的erp系统自动读取已入库卷纸的信息。
针对监控系统的设计而言,主要是满足(2)(3)的功能,也就是资料的下载设计与资料的上传设计。首先需要解决文件的存放位置问题,由于erp系统在远程的车间级服务器上,而本系统路径的位置选择限于本地硬盘,所以采用建立远程机特定文件目录在本地的映射来实现。
(1) 资料自动下载的程序设计
程序设计中主要采用定时器的定时方式来实现资料的自动下载功能,以下是具体的下载实现代码:
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://根据条码的格式进行信息的截取
strbuf01 = mid(onestring, 1, 6)
strbuf02 = mid(onestring, 7, 4)
strbuf03 = mid(onestring, 11, 8)
。。。。。。
strbuf13 = mid(onestring, 45, 14)
file://根据扫描到的数据在数据库中添加信息
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(“生产班别”) & lcp.dbmanager.rsuploaddb(“保留”)
sfile.writeline (onestring)
lcp.dbmanager.rsuploaddb(“updated”)=“1”
lcp.dbmanager.rsuploaddb.movenext
wend
sfile.close
5 结束语
该喷印自动化监控系统的实施,大大提高了卷纸的喷印效率和喷印的质量,取得了良好的经济效益。