【摘 要】本文结合工程实例,采用VB设计上位机的外挂界面和数据库管理平台;后台数据库软件采用ACCESS 2003;上位机与PLC之间采用ROCKWELL的RSLink作为OPC协议.本设计中将ACCESS 2003与PLC结合起来,用户可方便地在上位机中存储、查看和打印下位机(PLC)中的信息,监视PLC的工作状态,并制作生产报表.
【关 键 词 】上位机;ACCESS2003;PLC;报表
1.引言
本系统是一个粉料加料系统,分为六个部分:加料区、一号粉料区、二号粉料区、三号粉料区、混合搅拌区及下料包装区.其加料区由一个加料罐和一些泵和阀组成;一号粉料区由四个粉料罐和一个称量罐及泵和阀组成;二号粉料区同一号粉料区;三号粉料区同一号粉料区;混合搅拌区由混合罐及内部搅拌浆组成.根据实际情况需要完成下列功能.
功能一:监视功能.将现场设备的信息,如阀的位置,变频器的电流功率,储罐内的液位,称重罐的重量等显示在上位机上,可以实时的监视现场的情况,并可以手动控制单个设备,比如开启一个阀活电机等,并将相应的信息存入数据库,使其能看到历史曲线及历史事件与报警的记录.
功能二:管理功能.在上位机上能储存不定量配方,可以新建修改配方,也可以删除不用的配方,根据生产的需要选择不同的配方,系统将根据该配方的要求运行.
功能三:报表功能.由于批次生产的特殊性,一般需查看打印不同的报表,以供生产管理,这里需要日报,月报,按配方查询,成分统计,配方统计等.
2.系统的硬件设计
该系统的硬件由1台上位机(电脑),1组PLC通过以太网连接上位机,另通过以太网配有两个触摸屏连接PLC,供现场操作.
3.VB设计上位机的外挂界面和数据库管理平台
3.1 上位机与PLC之间的通信
本设计中,上位机与PLC之间的通信协议有两种:一种是用来实现监视功能的.用INTOUCH作为上位机软件,通过ROCKWELL的RSLINX作为OPC通讯连接上位机与PLC,这样就能把PLC的点与上位机的点一一对应起来,在上位机上就能监视控制现场的设备了,这个在这里就不做具体说明.
另一种是用来实现管理的,即把上位机的配方指令下达给PLC,我们选择一个合适的配方,按下确定键后,PLC就会收到该配方的所有信息,并将根据此配方进行工作.这个功能由于设计很多数据的上下载及数据库的应用,用上位机软件自身的功能很难实现,所以采用了一个外挂的VB程序作为实现该功能的相似度检测,这里采用了DDE协议,使得VB界面中的数据下载到PLC中,代码如下:
start_recipe.Text等于1
start_recipe.LinkTopic等于"RSLinx|menniu"
start_recipe.LinkItem等于"Weigh_Start,L1,C1"
start_recipe.LinkMode等于2
start_recipe.LinkPoke
start_recipe.LinkMode等于0
start_recipe.Text等于0
start_recipe.LinkTopic等于"RSLinx|menniu"
start_recipe.LinkItem等于"Weigh_Start,L1,C1"
start_recipe.LinkMode等于2
start_recipe.LinkPoke
start_recipe.LinkMode等于0
Text1.Text等于Combo1.Text
Text1.LinkTopic等于"RSLinx|menniu"
Text1.LinkItem等于"Recipe_Name"
Text1.LinkMode等于2
Text1.LinkPoke
Text1.LinkMode等于0
3.2 上位机与数据库之间的通信
(1)INTOUCH与数据库间的通信:在一定的条件下,需要从上位机上把特定的数据传到数据库中,作为报表的数据源,这时就要建立上位机(INTOUCH)与数据库(ACCESS)之间的通信.本设计中,InTouch通过ODBC和Access进行数据交互,通过InTouch SQL访问管理器将InTouch的数据记录到关系数据库中.具体的步骤如下:首先,创建Microsoft Access数据库并配置ODBC数据源.先在ACCESS数据库中建立一个表,将需要记录的数据分别列到每列中,分配好数据类型,记住数据库名和表名.然后配置ODBC数据源,新建一个数据源,选择刚刚建的数据库,测试成功后就结束了这步.
然后,配置InTouch SQL访问管理器.首先在InTouch标记名字典创建和Access列名相同的标记名,其类型也要一致;然后编写连接与断开数据库脚本;最后,启动InTouch SQL访问管理器,建立绑定列表BlindedList,绑定列表把InTouch中的标记名和数据库中表里的列名映射起来.其连接与断开数据库脚本如下:
连接数据库:ResultCode等于SQLConnect(ConnectionId,"DSN等于数据源名");
断开数据库:ResultCode等于SQLDisconnect(ConnectionId);最后,验证数据通信是否正常.
(2)VB与数据库的通信:由于客户需要增加减少配方,Intouch又不好做这么麻烦的Recipe,所以用VB做一个外挂程序与数据库通讯,专门用来做配方管理.这里使用OLE DB接口连接VB与数据库,首先在VB的界面上加一个Adodc的控件,这个控件就是一个数据通讯的接口,在需要采集数据的时候,写下下面的脚本: Adodc1.ConnectionString等于"Provider等于Microsoft.Jet.OLEDB.4.0;Data Source等于G:\VBNEW\mengniu.mdb;Persist Security Info等于False"(通过OLEDB连接数据库)
Adodc1.RecordSource等于"select*from product where[product code]等于'"& Combo1.Text &"'"(通过select语句在数据库中查找记录)
这样,数据库就能和VB连接起来了.
3.3 数据操作的实现
此配方管理由六个部分组成,分别为成分配置,罐子配置,配方管理,生产,报表,备料;其中成分配置,罐子配置,配方管理是需要用户名及才可以进入,具有一定的保密性.生产,报表,备料是一般操作员所要使用的.
点击主页上的“配方管理”按钮,输入准确的用户名和,就能进入罐子配置窗口.当一打开该窗口的时候,列表中显示的是当前所有配方的大概信息,从产品代码的下拉框中选择一个配方代码,该窗口将显示该配方的详细信息,包括该配方的成分配比,需要的总重,混合时间等等,VB的实现过程是这样的:
Adodc1.Visible等于False
Adodc1.ConnectionString等于"Provider等于Microsoft.Jet.OLEDB.4.0;Data Source等于G:\VBNEW\mengniu.mdb;Persist Security Info等于False"
Adodc1.RecordSource等于"select*from product"
Adodc1.Refresh
Set DataGrid1.DataSource等于Adodc1
Dim b(0 To 100)As String
Dim d As Boolean
Adodc1.Recordset.MoveFirst
For i等于1 To Adodc1.Recordset.RecordCount
b(i)等于Adodc1.Recordset.Fields("product code")
For j等于1 To i-1
If b(i)等于b(j)Then
d等于1
End If
Next j
If d等于0 Then
Combo1.AddItem Adodc1.Recordset.Fields("product code")
End If
d等于0
Adodc1.Recordset.MoveNext
Next i
3.4 报表功能的实现
在主页上点击“报表”,出现如下窗口.
在这里可以查看日报,月报,并可以通过分类查询各种数据.这里使用VB的DataReport做的报表.
首先添加一个Data Environment并打开它,然后鼠标右键单击Connection1,选择属性后弹出一数据库连接属性窗体选择"Microsoft Jet 4.0 OLE DB Provider",单击"下一步",选择所须要的数据库确定.
然后鼠标右键单击Connection1,选择"Add Command",Data Environment就创建了一个Command1,然后鼠标右键单击Command1,选择属性后弹出一Command1属性窗体,在Database Object属性中选择Table,在Object中选择Employee,然后单击Command1属性窗体中的Grouping,然后复选"Group Command Object",在Fields in中双击"TitleOfCourtesy",然后确定(即按TitleOfCourtesy分组).
添加一报表名为DataReport1,在DataReport1的DataSource属性中填入"DataEnvironment1",在DataMember中填入"Command1_Grouping",然后鼠标右键单击报表窗体选择Retrieve Structure,并确认这样就定义了一个报表结构.在报表的"Command1_Grouping_Header"一栏中摆上一RptTextBox控件,并设置DataField属性为"TitleOfCourtesy",在报表的"Command1_Detail"一栏中摆上三个RptTextBox控件,设置DataField属性分别为"EmployeeID","LastName"和"FirstName",并将其DataMember属性设置为"Command1".
双击报表,在代码窗体中输入以下代码:
Private Sub DataReport_Initialize()
Dim strShape As String
Dim nReport As New ADODB.Connection
Dim rstReport As New ADODB.Recordset
strShape等于"SHAPE{SELECT*FROM`batch_recipe`WHERE[STOP TIME]BETWEEN #"& Form5.Text5 &"# AND #"& Form5.Text6 &"#}AS Command1 COMPUTE sum(Command1.[TARGET QUANTITY])as[TARGET QUANTITY],sum(Command1.[REAL QUANT])as[REAL QUANT],Command1 BY'INGREDIENT'"
Set nReport等于New ADODB.Connection
With nReport
.Provider等于"MSDataShape.1"
.Open"Data Source等于G:\VBNEW\mengniu.mdb;Data Provider等于Microsoft.Jet.OLEDB.4.0"
End With
Set rstAgmRpt等于New ADODB.Recordset
With rstAgmRpt
Set.ActiveConnection等于nReport
.CursorLocation等于adUseClient
.CursorType等于adOpenStatic
.LockType等于adLockReadOnly
.Source等于strShape
.Open
End With
Set Me.DataSource等于rstAgmRpt
End Sub
这样,就能做出想要的任何格式的报表了.
4.结束语
在本设计中,使用VB与数据库的操作实现更多的单纯利用上位机软件无法实现的功能,特别是利用VB的DataReport功能实现了格式多样报表.