6SL3060-4AC50-0AA0连接电缆
关于如何使用wincc industrial data bridge将wincc的实时数据通过opc da记录到ms access、ms sql server和oracle数据库中
1 wincc industrial data bridge简介
1.1 功能
wincc/industrialdatabridge(工业数据桥)利用标准接口将自动化层(控制器)连接到it世界,并保证了双向的信息流。这些类型接口的例子包括自动化领域里的opc和it世界内的sql数据库。你可利用众多不同的标准接口(其中包括opc,sql, ole-db,office格式),将不同制造商生产的系统集成在一起。你可在合宜定价的基础上,利用标准软件包完成系统组态(不需要编程)。通常,带有opc da服务器接口的 wincc是数据源,而一个外部数据库则是数据目的地。
取决于数据数量,授权可以128、 512、2k和10k个变量提供。
在不同的制造商生产的自动化系统之间,通过“industrialdatabridge” 进行数据交换(例如通过opc)。通过“ industrialdatabridge” 连接 opc服务器能在不同设备数据源和目的地之间通讯。
· 通过opc接口,可以连接由众多不同制造商生产的scada和监视系统。
· 将过程数据存储在excel或acces 等办公软件内。也可集成数据库,以便归档大量数据。
· sql数据库可用作已采集到的生产数据目的地。系统可在事件驱动基础上,使用opc模块,从数据源传输数据,或者利用发送/接收模块直接从控制器传输数据。
· 应用一个数据库作为数据源,你可将配方或设定值直接传输到 wincc或传输到一个控制器。当这样做时,你可应用opc da数据访问,winac odk或发送/接收模块作为到达数据目的地的接口。
1.2 优点
· 将自动化层连接到it环境
· 使用众多不同的标准接口(其中包括opc,sql,ole-db,office 格式)集成由不同制造商生产的系统
· 使用标准软件的简单、价格合理的组态(不需要编程)
· 在几个系统之间同时进行高性能的数据交换
2 使用wincc industrial data bridge将wincc的实时数据通过opc da记录到oracle数据库中
2.1 wincc industrial data bridge支持oracle 9i数据库。在oracle 9i数据库管理台的表空间中建立相应的数据表结构。如图1所示。
图1:建立oracle表结构
2.2 打开industrial data bridge,根据向导新建连接,数据源类型选择”opc data access”,数据目标类型选择”database”。 如图2所示。
图2:新建连接
2.3 单击上方的”browse”按钮浏览本地或网络计算机的opc server,选择”opcserver.wincc”。 如图3所示。
图3:选择数据源的opc server
2.4 单击下方的”browse”按钮指定ole db provider,即数据库驱动。并在连接中指定数据库名称,登录的用户名和密码,系统生成连接字符串。如图4和图5所示。
图4:选择数据库驱动
图5:输入数据库名称,登录用户名和密码
2.5 新建组,在组设定中指定更新周期、发送数据的死区以及发送条件。如图6所示。
图6:设定组属性
2.6 在连接?组的导航台右侧,单击”add”,在组态数据源的opc条目中添加wincc变量管理器中的变量,指定相应的数据类型。在组态数据目标数据库变量中选择相应的数据库和表格,以及数据列和时间列。完成组态后保存.xml文件。如图7和图8所示。
注意:
添加变量时须激活wincc项目,开启wincc的opc server。
确认数据源的变量和数据目标的列名类型一致,实际应用中,数据源和数据库中某些数据类型并不吻合。
图7:选择数据源变量
图8:选择数据库表格列名
2.7 用industrial data bridge runtime打开.xml文件,单击”connect”连接数据库,连接初始化后,单击”start”开始运行。如图9所示。
图9:运行industrial data bridge runtime
2.8 在oracle数据库管理台中查看数据记录。如图10所示。
图10:oracle数据记录
如果数据库选择ms access和ms sql server,组态步骤和oracle一样
在实际应用中,客户对于wincc变量记录的显示需求各式各样,比如在excel或者word中显示变量记录,以特定的表格显示历史数据等等。当wincc集成的在线表格控件不能满足客户需要时,就需要通过自定义的方式来显示变量归档。主要分为两部分:
(1)从wincc中读取归档数据
(2)将归档数据以特定的格式显示出来
本文档介绍从wincc读取归档数据的通用方法,并以listview为例,介绍如何显示归档数据。对于其它控件,客户也可以参考本文档的脚本和编程思路。
1.测试环境
本文档基于wincc v7.0 asia,并通过ms bbbbbbs common controls 6.0 listview 控件来显示读取的归档数据。需要的授权如下:
授权名称 | 个数 | 备注 |
wincc rc v7.0 | 1 | |
wincc连通性软件包v7.0 | 1 | 订货号为:6av6371-1dr07-0ax0,授权通过wincc ole db访问过程值归档。 |
表 01
2.实现方式总体思路介绍
本文档通过调用wincc ole db数据库接口驱动(需要wincc连通性软件包的授权)来访问wincc的变量归档,并在微软的listview控件中显示归档数据。程序结构如下所示:
图1
其中,自定义函数的说明如下表所示:
函数名称 | 功能 |
winccdatasourceaccess(connobj, psql) | 建立到数据库的连接。参数connobj为连接对象(adodb.connection),参数psql为要执行的sql查询语句 |
winccdatasourceclose(precordset, connobj) | 断开与数据库的连接,释放资源。参数precordset为adodo.recordset对象,参数connobj为连接对象(adodb.connection) |
addlistviewheadercolumn(precordset, plistview) | 添加listview的列名。参数precordset为adodo.recordset对象,参数plistview为listview对象 |
filllistview (precordset, plistview) | 参数precordset为adodo.recordset对象,参数plistview为listview对象。 |
表 02
具体代码见附件。
3.具体实现方法和代码
3.1 创建到归档数据库的连接
由于wincc的变量归档为压缩数据,所以必须通过wincc ole db来读取归档数据。对于已经安装wincc的计算机,不需要安装wincc连通性软件包。对于未安装wincc的客户端,必须安装wincc连通性软件包。该软件包含在wincc v7.0的安装光盘中。
数据库连接的脚本如下所示:
'定义数据库连接变量
dim conn
set conn = createbbbbbb("adodb.connection")
'定义数据库查询脚本(可以根据需要自定义修改)
dim ssql
ssql="tag:r,'processvaluearchive\tag1',':01:00.000',':00:00.000'"
'通过调用自定义的数据库连接函数,建立与数据库的连接
dim ors
set ors= winccdatasourceaccess(conn,ssql)
其中,自定义的数据库连接函数winccdatasourceaccess(connobj,psql),参数connobj为连接对象(adodb.connection),参数psql为要执行的sql查询语句,具体代码如下所示:
function winccdatasourceaccess(connobj,psql)
'建立到数据库的连接
on error resume next
'读取本地的wincc运行数据库名称
dim datasourcenamert,dataconnectionname
set datasourcenamert =runtime.tags("@datasourcenamert")
datasourcenamert.read
'定义数据库连接字符串
dim spro, sdsn,sser
spro = "provider=winccoledbprovider.1;"
sdsn = "catalog=" & datasourcenamert.value & ";"
sser = "data source=.\wincc"
dataconnectionname = spro + sdsn + sser
' 定义查询语句字符串
ssql=psql
'建立连接
dim ors,ocom,conn
set conn=connobj
conn.connectionbbbbbb = dataconnectionname
conn.cursorbbbbbbbb = 3
conn.open
' 创建查询的命令文本
set ors = createbbbbbb("adodb.recordset")
set ocom = createbbbbbb("adodb.command")
ocom.commandtype = 1
set ocom.activeconnection = conn
ocom.commandtext=ssql
'执行查询
set ors = ocom.execute
'返回结果
set winccdatasourceaccess=ors
if err.number <>; 0 then
msgbox "error code" & err.number & "source:" & err.source & "error debbbbbbion" & err.debbbbbbion
err.bbbbb
end if
on error go to 0
end function
自定义函数的创建过程为:在wincc项目管理器中右键点击全局脚本?打开vbs全局脚本编辑器?项目函数?新建函数。具体如下图所示:
图2
3.2 注册microsoft listview control 6.0控件
打开wincc图形编辑器。在右侧的对象选项板中单击“控件”,选中“activex control”,点击右键,选择“添加移除”。在弹出菜单中,选择“microsoft listview control 6.0”,点击“ok”确认。
图3
之后,将“microsoft listview control 6.0”拖动到画面编辑器中,并将对象名称设置为control1。
注意:在脚本中,当定义listview对象时用到对象名称control1。详情请参考图1的步骤2。
3.3 添加listview 控件的列名
在listview中添加列名,步骤如图1的步骤3。自定义函数addlistviewheadercolumn(precordset, plistview)的具体代码如下所示:
function addcolumnheader(precordset, plistview)
'添加listview列名
'用于错误捕获和处理
dim ors,columncount
set ors=createbbbbbb("adodb.recordset")
set ors=precordset
'获取数据库中的列数
columncount=ors.fields.count
'定义操作的listview对象
dim listviewt
set listviewt=plistview
'清空listview对象的列数
listviewt.columnheaders.bbbbb
'用查询的数据库表格列名来为listview添加列名(*2)
dim addcolumnindex
for addcolumnindex=0 to columncount-1
listviewt.columnheaders.add , , cstr(ors.fields(addcolumnindex).name)
next
'发生错误,提示消息框
msgbox "addcolumnheader函数报错,source:" & err.source & vbcr & "error debbbbbbion:" & err.debbbbbbion
on error goto 0
3.4 填充listview 控件
在listview中添加列名,步骤如图1的步骤4。自定义函数filllistview (precordset, plistview) 的具体代码如下所示:
function filllistview(precordset,plistview)
'用数据库查询的值填充listview
'获取查询记录条数
dim recordscount,ors
recordscount=ors.recordcount
'定位到第一条记录
if (recordscount >; 0) then
ors.movefirst
'定义*大的查询条目(*3)
dim maxline,n
maxline = 10
n=0
'填充数据值列
do while (not ors.eof and n < maxline)
n = n + 1
dim oitem,listviewt
set oitem = listviewt.listitems.add()
oitem.text = ors.fields(0).value
oitem.subitems(1) = ors.fields(1).value
oitem.subitems(2) = bbbbatnumber(ors.fields(2).value, 4)
oitem.subitems(3) = hex(ors.fields(3).value)
oitem.subitems(4) = hex(ors.fields(4).value)
ors.movenext
loop
3.5 关闭到归档数据库的连接
关闭与数据库的连接并释放资源,步骤如图1的步骤5。自定义函数winccdatasourceclose(precordset, connobj)的具体代码如下图所示:
function winccdatasourceclose(precordset,connobj)
'关闭数据库连接,释放资源
'获取连接和查询对象
dim ors,conn
ors.close
set ors = nothing
conn.close
set conn = nothing
3.6 运行结果
本文档介绍的脚本,其运行结果如下图所示:
图4
3.7 更改代码以满足更广泛的需求
对于不同客户的定制化需求,可以通过修改少量代码实现。
(1) 不同的查询需求,修改ssql变量的值。
'修改变量ssql的值
比如,如果需要动态制定查询时间,可以在画面中输入查询日期,然后通过hmiruntime.tags(“变量名”)来获得查询条件,再赋值给ssql。
(2) listview需要使用不同的列名。
修改函数addlistviewheadercolumn中的如下内容:
‘用查询的数据库表格列名来为listview添加列名 (*2)
(3) listview需要填充不一样的行数和内容。
修改函数filllistview中的如下内容:
maxline = 10 '改变此值,可以更改*大显示的条目数
'修改填充内容,请修改下面do while循环中的代码