上位机监控软件中的数据库操作

更新时间:2024-02-01 作者:用户投稿原创标记本站原创 点赞:23655 浏览:107841

【摘 要】本文结合工程实例,采用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功能实现了格式多样报表.

相关论文范文