电工知识|通过VBS脚本在ListView控件中显示WinCC的变量记录

   更新日期:2017-03-26     来源:建材之家    作者:水电之家    浏览:55    评论:0    
核心提示:在实际应用中,客户对于WinCC变量记录的显示需求各式各样,比如在Excel或者Word中显示变量记录,以特定的表格显示历史数据等等。当WinCC集成的在线表格控件不能满足客户需要时,就需要通过自定义的方式来显示变量归档。主要分为两部分:(1)从WinCC中读取归档数据(2)将归档数据以特定的格式显示出来 本文档介绍从WinCC读取归档数据的通用方法,并以ListVie

对焊机操作时候要注意的问题—苏州安嘉

推荐简介:对焊机首要由焊接变压器、左电极、右电极、沟通接触器、送料机构和控制元件等组成。控制元件的控制程序是:按下接触器按钮,接通继电器,使沟通接触器效果,所以焊接变压器被接通。移动操纵杆使两焊件压紧,并通电加热。1.对焊机应安置在室内,并应有可靠的接零保护。当多台对焊机并列安装时,相百间距不得小于3m,应分别接在不同相位的电网上,并应分别有各自的刀型开关。2.焊机电源引线不宜过细过长,焊接时的电压降不得......
水电之家讯:在实际应用中,客户对于WinCC变量记录的显示需求各式各样,比如在Excel或者Word中显示变量记录,以特定的表格显示历史数据等等。当WinCC集成的在线表格控件不能满足客户需要时,就需要通过自定义的方式来显示变量归档。主要分为两部分:

(1)从WinCC中读取归档数据

(2)将归档数据以特定的格式显示出来

本文档介绍从WinCC读取归档数据的通用方法,并以ListView为例,介绍如何显示归档数据。对于其它控件,客户也可以参考本文档的脚本和编程思路。 1.测试环境

本文档基于WinCC V7.0 ASIA,并通过MS Windows Common Controls 6.0 ListView 控件来显示读取的归档数据。需要的授权如下: 授权名称个数备注WinCC RC V7.01WinCC连通性软件包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 = CreateObject("ADODB.Connection") '定义数据库查询脚本(可以根据需要自定义修改)

Dim sSQL sSQL="Tag:R,'ProcessValueArchive\Tag1','0000-00-00 00:01:00.000','0000-00-00 00: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 = hmiRuntime.Tags("@DatasourceNameRT")

DatasourceNameRT.Read '定义数据库连接字符串

Dim sPro, sDsn,sSer sPro = "Provider=WinCCOLEDBProvider.1;" sDsn = "Catalog=" & DatasourceNameRT.Value & ";" sSer = "Data Source=.\WinCC" DataConnectionName = sPro + sDsn + sSer

' 定义查询语句字符串

Dim sSQL

sSQL=pSQL '建立连接

Dim oRs,oCom,conn

Set conn = CreateObject("ADODB.Connection")

Set conn=connObj

conn.ConnectionString = DataConnectionName

conn.CursorLocation = 3

conn.Open

' 创建查询的命令文本

Set oRs = CreateObject("ADODB.Recordset") Set oCom = CreateObject("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 description" & Err.Description

err.clear 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列名 '用于错误捕获和处理

On Error Resume Next Dim oRs,columnCount Set oRs=CreateObject("ADODB.Recordset") Set oRs=pRecordset '获取数据库中的列数

columnCount=oRs.Fields.Count '定义操作的ListView对象

Dim ListViewT Set ListViewT=pListView

'清空ListView对象的列数

ListViewT.ColumnHeaders.Clear '用查询的数据库表格列名来为ListView添加列名(*2)

Dim AddColumnIndex For AddColumnIndex=0 To columnCount-1 ListViewT.ColumnHeaders.Add , , CStr(oRs.Fields(AddColumnIndex).Name) Next

'发生错误,提示消息框

If err.number <> 0 Then MsgBox "AddColumnHeader函数报错,Source:" & Err.Source & vbCr & "Error description:" & Err.Description err.clear End If On Error Goto 0 End Function 3.4 填充ListView 控件

在ListView中添加列名,步骤如图1的步骤4。自定义函数FillListView (pRecordset, pListView) 的具体代码如下所示:

Function FillListView(pRecordset,pListView)

'用数据库查询的值填充ListView

On Error Resume Next '获取查询记录条数

Dim recordsCount,oRs

Set oRs=CreateObject("ADODB.Recordset")

Set oRs=pRecordset

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 ListViewT=pListView

Set oItem = ListViewT.ListItems.Add() oItem.text = oRs.Fields(0).Value oItem.SubItems(1) = oRs.Fields(1).Value oItem.SubItems(2) = FormatNumber(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 Set oRs=pRecordset

Set conn=connObj oRs.Close Set oRs = Nothing conn.Close Set conn = Nothing End Function 3.6 运行结果

本文档介绍的脚本,其运行结果如下图所示:

图4

3.7 更改代码以满足更广泛的需求

对于不同客户的定制化需求,可以通过修改少量代码实现。

(1) 不同的查询需求,修改sSQL变量的值。

'修改变量sSQL的值

Dim sSQL

sSQL="Tag:R,'ProcessValueArchive\Tag1','0000-00-00 00:01:00.000','0000-00-00 00:00:00.000'" 比如,如果需要动态制定查询时间,可以在画面中输入查询日期,然后通过HMIRuntime.Tags(“变量名”)来获得查询条件,再赋值给sSQL。

(2) ListView需要使用不同的列名。

修改函数AddListViewHeaderColumn中的如下内容:

‘用查询的数据库表格列名来为ListView添加列名 (*2)

Dim AddColumnIndex For AddColumnIndex=0 To columnCount-1 ListViewT.ColumnHeaders.Add , , CStr(oRs.Fields(AddColumnIndex).Name) Next (3) ListView需要填充不一样的行数和内容。

修改函数FillListView中的如下内容:

Dim maxLine,n maxLine = 10 '改变此值,可以更改最大显示的条目数

n=0

'修改填充内容,请修改下面Do While循环中的代码

Do While (Not oRs.EOF And n < maxLine) n = n + 1 Dim oItem,ListViewT

Set ListViewT=pListView

Set oItem = ListViewT.ListItems.Add() oItem.text = oRs.Fields(0).Value oItem.SubItems(1) = oRs.Fields(1).Value oItem.SubItems(2) = FormatNumber(oRs.Fields(2).Value, 4) oItem.SubItems(3) = Hex(oRs.Fields(3).Value) oItem.SubItems(4) = Hex(oRs.Fields(4).Value) oRs.MoveNext Loop 本文档中提供的脚本尽量通用化,方便客户修改和复用。并加入了错误处理机制,保证脚本的正确运行,并提高了诊断的方便性。 声明:

本文所述的方法为WinCC的高级用法,提供的代码程序仅供用户参考,西门子公司不提供任何调试和热线支持。敬请谅解!

水电之家为您提供最全面的管材,管件,水电,电线,电工,管材水电品牌的装修知识点和各种管材水电的导购与在线购买服务,拥有最便宜的管材水电价格和最优质的售后服务,每天都有秒杀的抢购活动哦!敬请登陆水电之家:http://shuidian.jc68.com/
小程序码
 
打赏
 
更多>文章标签:水电
更多>同类水电电工资讯
0相关评论

推荐图文更多...
点击排行更多...
最新视频更多...
推荐产品更多...
老姚之家 | 全景头条 | 照明之家 | 防水之家 | 防盗之家 | 区快洞察 | 潜江建材 | 仙桃建材 | 恩施建材 | 随州建材 | 咸宁建材 | 黄冈建材 | 荆州建材 | 孝感建材 | 荆门建材 | 鄂州建材 | 襄樊建材 | 宜昌建材 | 十堰建材 | 黄石建材 | 长沙建材 | 湘西建材 | 娄底建材 | 怀化建材 | 永州建材 | 郴州建材 |
建材 | 720全景 | 企业之家 | 移动社区 | 关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图 | 排名推广 | 广告服务 | 积分换礼 | RSS订阅 | sitemap | 粤ICP备14017808号-1
(c)2015-2017 BYBC.CN SYSTEM All Rights Reserved
Powered by 电工之家