APP下载

基于OPC技术的WinCC实时数据归档

2015-12-15强明辉张琳琳马永炜

电气自动化 2015年3期
关键词:窗体控件客户端

强明辉,张琳琳,马永炜

(兰州理工大学电气工程与信息工程学院,甘肃 兰州 730050)

0 引言

SIMATIC WinCC是由西门子公司和微软公司共同开发的一款功能强大的HMI/SCADA应用软件系统[1]。WinCC本身具有自己的归档数据库,但其进行归档后的数据库为压缩格式,需要通过WinCC专门集成的工具分析并显示数据,这为第三方的访问带来了很多不便。由于WinCC集成了OPC技术,所以可以对其进行二次开发。本文是利用VB编写OPC客户端,以WinCC作为OPC的服务器,利用OPC协议实现VB和OPC之间的动态数据交换,然后通过VB的ADO数据接口,把数据存储到数据库中。解决了WinCC实时数据转存到标准数据库的难题,为企业管理和监控系统提供了标准的数据源。

1 OPC技术

OPC是针对于不同供应厂商的设备和应用程序之间的软件接口标准化,使其间的数据交换更加简单化的目的而提出的。OPC技术将各个设备驱动程序和通讯程序封装成独立的OPC服务器,OPC客户端无需知道系统的性能特点,而只需通过标准的OPC接口访问OPC服务器[2-5]。

OPC的核心是COM/DCOM技术,COM技术是一种软件组件间相互数据交换的有效方法,COM对象分为客户端和服务器两类,客户端通过COM接口访问服务器。

OPC数据访问提供从数据源读取和写入特定数据的功能。OPC客户程序通过接口从服务器读取数据或写入数据。在OPC客户机访问服务器时,需要创建一个服务器对象,调用这个服务器对象的接口,服务器对象创建组对象并返回组对象的指针,客户程序获得组对象的指针后调用其接口。OPC客户程序访问服务器的结构图如图1。

2 WinCC与数据库的数据交换

2.1 WinCC与VB的数据交换

2.1.1 WinCC的OPC服务器设置

WinCC的OPC服务器设置需要分几步完成:

图1 OPC客户程序访问服务器结构图

1)在安装WinCC的时候需要安装OPC Server,具体方法是在安装选项的Communication组件中,选择OPC Server项。

2)对 WinCC的 OPC服务器进行DCOM设置。具体方法是单击“开始”菜单并选择“运行”,输入dcomcnfg,打开“组件服务”对话框;在此对话框中,单击“组件服 务”——“我 的 电 脑 ”——“DCOM配置”——选择“OPCServer.WinCC”——右键“属性”按钮,打开“OPCServer.WinCC 属性”对话框;在此对话框中,单击“安全”选项中自定义启动和激活权限,在“标识”标签中选择“交互式用户”选项。

3)在完成上述步骤以后,打开组态好的WinCC监控界面。参数设置界面如图2所示。

2.1.2 OPC客户端的设计及编程

利用Visual Basic开发OPC客户程序时,要对DLL进行注册。具体的方法是从VB菜单中选择“工程”——“引用”,在可用的引用一览表中,选择OPC Automation 2.0后按确定。

图2 WinCC人机界面显示

1)VB窗体设计

注册完DLL以后,就要设计VB的窗体。在窗体上添加两个Command按钮,分别命名为连接服务器和退出。根据项目要求,需同步传输23个数据,在窗体上布局23个Text控件会比较麻烦,本文采用编程的方式,在程序运行时,将23个Text控件同时显示在窗体上。部分代码如下:

Load Text1(I)//上载Text控件数组

Load Label1(I)//上载Label控件数组

Label1(I).Left=((I-1)10)*(Label1(1).Width+2000)+Label1(1).Left //Label控件的横坐标

Label1(I).Top=((I-1)Mod 10)*(Label1(1).Height+100)+Label1(1).Top//Label控件的纵坐标

Text1(I).Left=((I-1)10)*(Text1(1).Width+2200)+Text1(1).Left //Text控件的横坐标

Text1(I).Top=((I-1)Mod 10)*(Text1(1).Height+100)+Text1(1).Top//Text控件的纵坐标

Label1(I).Visible=True

Text1(I).Visible=True

VB窗体如图3。

图3 VB窗体设计

2)OPC客户端编程

VB的OPC客户端和OPC服务器之间数据互相通讯的主要源代码如下:

变量声明

Dim WithEvents objServer As OPCServer //OPC服务

Dim WithEvents objGroup As OPCGroup //OPC组

Dim objGroups As OPCGroups

Dim objTestGrp As OPCGroup

Dim objItems As OPCItems

Dim lClientHandles(23)As Long//客户句柄

Dim ServerHandles()As Long//服务器句柄

Dim lErrors()As Long

Dim ItemIDs(23)As String//OPC的标签

Dim vtItemValues()As Variant//用于存储OPC数据的地址

Dim a(1 To 23)As Variant

连接服务器

Set objServer=New OPCServer//创建新的OPC服务器

objServer.Connect("OPCServer.WinCC.1")

//连接OPC服务器

If objServer.ServerState=OPCRunning Then

Option1.Value=True//连接服务器成功的标志

添加OPC组和OPC标签

Set objGroups=objServer.OPCGroups//添加一个OPC组集合

Set objTestGrp=objGroups.Add("TestGrp")

//添加一个OPC组

Set objItems=objTestGrp.OPCItems//建立OPC标签集合

For I=1 To 23//生成23个项标识符

ItemIDs(I)="bb"&I

lClientHandles(I)=I

objItems.AddItems 23,ItemIDs,lClientHandles,ServerHandles,lErrors//添加OPC标签

断开服务器

objItems.Remove 23,ServerHandles,lErrors

//清除OPC的标签

objGroups.Remove"TestGrp"//清除 OPC 组

objServer.Disconnect//断开 OPC 的服务器

Set objItems=Nothing

Set objTestGrp=Nothing

Set objServer=Nothing

本程序是利用Timer1的Timer事件来进行数据更新的显示,如果数据有新的更新就要导入到数据库中,有关定时器的代码将在下面介绍。

2.2 VB与数据库的数据交换

当数据由WinCC传输到VB以后,由于VB不是一个存储单元,所以要将数据存储到指定的归档数据库中,以备报表查询。因为该项目的数据量不大,选用Access为归档数据库。

2.2.1 VB访问数据库的ADO接口

在VB中,常用的数据访问接口有下列几种:Active数据对象ADO,开放式数据库连接ODBC,远程数据库对象RDO,数据库访问对象DAO。其中ADO接口是Microsoft开发数据库应用程序面向对象的新接口。采用了OLE DB的数据访问模式,是数据访问对象DAO、远程数据对象RDO和开放数据库互联ODBC三种方式的扩展,具有更加简单、灵活的操作性能[6]。

ADO对象模型定义了一个可编程的分层对象集合,主要有三个对象成员Connection、Command和Recordset对象,以及几个集合对象Errors、Parameters和Fileds等组成。

2.2.2 VB利用ADO接口访问数据库

在VB使用ADO控件访问Access前,先要在Access中进行归档数据库环境设置。在Access中建立一个名为温度的数据库,并在该数据库的子目录中新建一张表,命名为现场温度记录,这张表用于存储从WinCC服务器中获得的现场温度数据。接着,在VB的开发环境下开发与数据库连接的程序,本次使用的VB控件主要是Timer和Adodc,相应的程序设计步骤如下。

1)建立VB与归档数据库链接。在VB中使用Adodc控件前,必须先对其进行设置,具体方法是:

首先,通过“工程”——“部件”菜单命令选择“Microsoft ADO Data Control 6.0(SP6)(OLEDB)”选项,将ADO数据控件添加到工具箱,点击ADO数据控件,将其添加到窗体上。

然后,设置Adodc2的ConnectionString属性,在Adodc2控件上右键“Adodc属性”——使用连接字符串——单击“生成”按钮——选择 Microsoft Jet 4.0 OLE DB Provider——单击“下一步”按钮——选择或输入数据库名称——单击“测试连接”按钮——弹出测试连接成功对话框—点击“确定”按钮即可。

最后,设置Adodc2的RecordSource属性,选择命令类型为2-adCmdTable,在表名项选择现场温度记录。

根据工艺要求,本项目需要同步传输23个数据,所以需要23个Text控件,这些控件是通过编程来显现在VB的窗体上的,对于这些控件的ADO属性设置,我们也需编程实现,部分代码如下:

Set Text1(I).DataSource=Adodc2'将所有 Text控件的 DataSource 属性设置为Adodc2

设置所有Text控件的DataFiled属性

For I=1 To 8

Text1(I).DataField="体热风"& I& "温度"

Next

For I=9 To 16

Text1(I).DataField="帽热风"&I-8&"温度"Next

Text1(17).DataField="体水槽温度"

Text1(18).DataField="体胶罐温度"

Text1(19).DataField="体胶液温度"

Text1(20).DataField="帽水槽温度"

Text1(21).DataField="帽胶罐温度"

Text1(22).DataField="帽胶液温度"

Text1(23).DataField="厂房温度"

2)实现实时数据的存储。在窗体上插入一个定时器控件,命名为Timer1,将其Interval属性设置为100,在Timer1_Timer()事件中编程。为了不产生冗余,建了一个数据缓冲数组,把每次提取出来的数据同之前的数据缓冲组中的值作对比,若不同就插入数据库,同时更新数据缓冲数组中的值。部分代码如下:

PrivateSub Timer1_Timer()

Dim Update As Boolean

Dim I As Integer

SyncRead OPCCache,vtItemValues,lErrors

//同步读取WinCC的数据

For I=1 To 23

If vtItemValues(I)<>a(I)Then//将OPC标签数组中的数和缓冲数组中的数进行对比

Update=True

Exit For

End If

Next

If Update Then

Adodc2.Recordset.AddNew//向 Access数据库中插入数据

Adodc2.Recordset.Fields("日期及时间")=Now//向 Access数据库中插入当前的日期和时间

For I=1 To 23

Text1(I).Text=vtItemValues(I)

a(I)=vtItemValues(I)

Next

Adodc2.Recordset.Update//保存插入到数据库中的数据

End If

End Sub

部分实时数据进入表后如图4。

图4 数据存入Access数据库

3 实时数据的查询

由图4可知,只要WinCC从下位机采集的这一组数据中的任何一个数据有变化,那么该组数据就会传入到数据库中。根据工艺要求可知,每个采集点的温度均有一定的范围,超过这个范围就会对设备或产品产生一定的损害,所以需建立一个查询,当温度高于该范围时,将其筛选出来,插入到该数据库的另外一个表中,供以后的分析。构造的SQL语句通式如下:

Insert into+“表名”+select+“选择内容”+from+“表名”+where+“条件”

建立查询的相关步骤如下:

1)在数据库温度中再建立一张新表,命名为查询温度,用来存储查询出来的超出范围的温度。

2)在VB窗体上再布局一个ADO控件,命名为Adodc1,将其的ConnectionString设置的与Adodc2一样,RecordSource属性设置为查询温度。然后编写代码:Adodc1.RecordSource="SQL语句"即可以进行相关的查询。

4 结束语

利用VB设计的OPC客户端数据接口,传输数据稳定,实时性好,能同时传输大批量数据。ADO数据库接口简单,传输稳定,实时性好,技术成熟。通过OPC技术和ADO接口有效地完成了WinCC到数据库转储功能。为企业进一步分析数据,利用数据,提供了可靠的数据源。

[1]甄立东.西门子 WinCC V7基础与应用[M].北京:机械工业出版社,2011.

[2]日本OPC协会.OPC应用程序入门[M].日本:2002.

[3]韦源,于平.Visual Basic程序设计基础[M].北京:清华大学出版社,2001.

[4]朱翠苗,郑广成.VB访问SQL Server数据库的几种方案[J].河南科技大学学报,2004,3(25):66-69.

[5]林启宽.用 VB开发 WinCC的OPC客户机[J].工业控制计算机,2006,19(8):80-81.

[6]赵秀梅.基于WinCC工控组态软件的关系数据库的研究[J].微型机与应用,2010,29(6):1-2.

猜你喜欢

窗体控件客户端
基于.net的用户定义验证控件的应用分析
如何看待传统媒体新闻客户端的“断舍离”?
试谈Access 2007数据库在林业档案管理中的应用
关于.net控件数组的探讨
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
巧设WPS窗体控件让表格填写更规范
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
WinCE.net下图形用户界面的开发