通过VBS脚本在ListView控件中显示WinCC的变量记录_第1页
通过VBS脚本在ListView控件中显示WinCC的变量记录_第2页
通过VBS脚本在ListView控件中显示WinCC的变量记录_第3页
通过VBS脚本在ListView控件中显示WinCC的变量记录_第4页
通过VBS脚本在ListView控件中显示WinCC的变量记录_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通过VBS脚本在ListView控件中显示WinCC的变量记录在实际应用中,客户对于WinCC变量记录的显示需求各式各样,比如在Excel或者Word中显示变量记录,以特定的表格显示历史数据等等。当WinCC集成的在线表格控件不能满意客户需要时,就需要通过自定义的方式来显示变量归档。主要分为两部分:

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

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

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

本文档基于WinCCV7.0ASIA,并通过MSWindowsCommonControls6.0ListView控件来显示读取的归档数据。需要的授权如下:授权名称个数备注WinCCRCV7.01WinCC连通性软件包V7.01订货号为:6AV6371-1DR07-0AX0,授权通过WinCCOLEDB访问过程值归档。表012.实现方式总体思路介绍

本文档通过调用WinCCOLEDB数据库接口驱动(需要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的变量归档为压缩数据,所以必需通过WinCCOLEDB来读取归档数据。对于已经安装WinCC的计算机,不需要安装WinCC连通性软件包。对于未安装WinCC的客户端,必需安装WinCC连通性软件包。该软件包含在WinCCV7.0的安装光盘中。

数据库连接的脚本如下所示:

'定义数据库连接变量

DimconnSetconn=CreateObject("ADODB.Connection")'定义数据库查询脚本(可以依据需要自定义修改)

DimsSQLsSQL="Tag:R,'ProcessValueArchive\Tag1','0000-00-0000:01:00.000','0000-00-0000:00:00.000'"'通过调用自定义的数据库连接函数,建立与数据库的连接

DimoRsSetoRs=WinCCDataSourceAccess(conn,sSQL)其中,自定义的数据库连接函数WinCCDataSourceAccess(connObj,pSQL),参数connObj为连接对象(ADODB.Connection),参数pSQL为要执行的SQL查询语句,详细代码如下所示:

FunctionWinCCDataSourceAccess(connObj,pSQL)

'建立到数据库的连接

OnErrorResumeNext

'读取本地的WinCC运行数据库名称

DimDatasourceNameRT,DataConnectionName

SetDatasourceNameRT=hmiRuntime.Tags("@DatasourceNameRT")

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

DimsPro,sDsn,sSersPro="Provider=WinCCOLEDBProvider.1;"sDsn="Catalog="DatasourceNameRT.Value";"sSer="DataSource=.\WinCC"DataConnectionName=sPro+sDsn+sSer

'定义查询语句字符串

DimsSQL

sSQL=pSQL'建立连接

DimoRs,oCom,conn

Setconn=CreateObject("ADODB.Connection")

Setconn=connObj

conn.ConnectionString=DataConnectionName

conn.CursorLocation=3

conn.Open

'创建查询的命令文本

SetoRs=CreateObject("ADODB.Recordset")SetoCom=CreateObject("ADODB.Command")oCom.CommandType=1SetoCom.ActiveConnection=connoCom.CommandText=sSQL

'执行查询

SetoRs=oCom.Execute'返回结果

SetWinCCDataSourceAccess=oRsIferr.number0ThenMsgBox"errorCode"Err.Number"Source:"Err.Source"errordescription"Err.Description

err.clearEndIfOnErrorGoto0EndFunction自定义函数的创建过程为:在WinCC项目管理器中右键点击全局脚本打开VBS全局脚本编辑器项目函数新建函数。详细如下图所示:

图2

3.2注册MicrosoftListViewControl6.0控件

打开WinCC图形编辑器。在右侧的对象选项板中单击“控件”,选中“ActiveXControl”,点击右键,选择“添加移除”。在弹出菜单中,选择“MicrosoftListViewControl6.0”,点击“OK”确认。

图3

之后,将“MicrosoftListViewControl6.0”拖动到画面编辑器中,并将对象名称设置为Control1。

留意:在脚本中,当定义ListView对象时用到对象名称Control1。详情请参考图1的步骤2。3.3添加ListView控件的列名

在ListView中添加列名,步骤如图1的步骤3。自定义函数AddListViewHeaderColumn(pRecordset,pListView)的详细代码如下所示:

FunctionAddColumnHeader(pRecordset,pListView)

'添加ListView列名'用于错误捕获和处理

OnErrorResumeNextDimoRs,columnCountSetoRs=CreateObject("ADODB.Recordset")SetoRs=pRecordset'猎取数据库中的列数

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

DimListViewTSetListViewT=pListView

'清空ListView对象的列数

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

DimAddColumnIndexForAddColumnIndex=0TocolumnCount-1ListViewT.ColumnHeaders.Add,,CStr(oRs.Fields(AddColumnIndex).Name)Next

'发生错误,提示消息框

Iferr.number0ThenMsgBox"AddColumnHeader函数报错,Source:"Err.SourcevbCr"Errordescription:"Err.Descriptionerr.clearEndIfOnErrorGoto0EndFunction3.4填充ListView控件

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

FunctionFillListView(pRecordset,pListView)

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

OnErrorResumeNext'猎取查询记录条数

DimrecordsCount,oRs

SetoRs=CreateObject("ADODB.Recordset")

SetoRs=pRecordset

recordsCount=oRs.RecordCount'定位到第一条记录

If(recordsCount0)Then

oRs.MoveFirst'定义最大的查询条目(*3)

DimmaxLine,nmaxLine=10

n=0

'填充数据值列

DoWhile(NotoRs.EOFAndnmaxLine)n=n+1DimoItem,ListViewT

SetListViewT=pListView

SetoItem=ListViewT.ListItems.Add()oItem.text=oRs.Fields(0).ValueoItem.SubItems(1)=oRs.Fields(1).ValueoItem.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.MoveNextLoop3.5关闭到归档数据库的连接

关闭与数据库的连接并释放资源,步骤如图1的步骤5。自定义函数WinCCDataSourceClose(pRecordset,connObj)的详细代码如下图所示:

FunctionWinCCDataSourceClose(pRecordset,connObj)

'关闭数据库连接,释放资源

'猎取连接和查询对象

DimoRs,connSetoRs=pRecordset

Setconn=connObjoRs.CloseSetoRs=Nothingconn.CloseSetconn=NothingEndFunction3.6运行结果

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

图4

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

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

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

'修转变量sSQL的值

DimsSQL

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

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

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

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

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

修改函数FillList

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论