15221406036
6SL3060-4AC50-0AA0连接电缆
报价: 666.00元/件
最小起订: 1
有效期至: 长期有效
发布时间: 2023-04-15 15:51
发布IP: 116.224.103.5
浏览次数: 70
手机号: 15221406036
电话: 15221406036
在线咨询: 点击这里给我发消息
15221406036
详细信息

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.01
wincc连通性软件包v7.01订货号为: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循环中的代码


相关产品
相关6sl3060产品
新闻中心
产品分类
最新发布
企业新闻
站内搜索
 
联系方式
  • 地址:上海市松江区广富林路4855弄88号3楼
  • 电话:15221406036
  • 手机:15221406036
  • 联系人:聂航