如何实现wincc用VBS做报表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何实现wincc用VBS做报表
1概述
介绍如何在WinCC项目中使用VBS脚本读取变量归档值,并把获取的数据保存成新的Excel 文件。文中示例代码仅适用于以绝对时间间隔方式访问。
2软件环境
Windows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2007
3访问原理
WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据。关于WinCC连通性软件包的详细信息请参考连接:37436159
当使用OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。连接字符串格式为“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中Catalog 为WinCC运行数据库的名称,当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。建议使用WinCC内部变量“@DatasourceNameRT”获得当前项目的Catalog。Data Source 为服务器名称,格式为“<计算机名称>\WinCC”。
3.1 查询语句格式
数据的查询语句的格式要求如下:
8 字节长ValueID 的请求:
TAG_LLVID:R, ValueName>, 4 字节长ValueID 的请求: TAG:R, ValueName>, 其中: ValueID:过程值归档变量的唯一标识符。 ValueName:过程值归档变量的名称,格式为“ArchiveName\Value_Name”,可以使用多个名称。TimeBegin,TimeEnd:时间范围,格式“YYYY-MM-DD hh:mm:ss.msc”。 SQL_Clause:SQL 语法中的过滤标准。 TimeStep:时间间隔。使用 其中ValueID和ValueName的对应关系如下图所示: 图1 ValueID和ValueName的对应关系 3.2几种常用的查询需求和语句 1)绝对时间间隔 2)相对时间间隔 请注意,查询不能包含任何空格。习惯上,执行绝对时间查询时需要将查询的时间条件转换成UTC (协调世界时)时间。执行相对时间查询时请一定要注意相对时间的格式。建议使用MsgBox 或者HMIRuntime.Trace等方式输出数值以检查格式是否正确。 3.3 查询结果 查询结果作为记录集返回。过程值归档的记录集结构如下表所示: 表1记录集结构 注意,WinCC的归档数据是使用UTC(协调世界时)时间保存的。因此在对数据进行查询和显示时,需要对时间进行适当的转换。 4组态介绍(以绝对时间间隔为例) 4.1准备工作 1)创建变量 其中:NewTag用于创建过程值归档,strBeginTime 和strEndTime用于存储查询条件。sVal 是时间间隔参数。如下图所示: 图2 变量 2)创建过程值归档 创建归档周期为一分钟的过程值归档。如下图所示: 图3 归档配置 3)创建Excel模板 在特定的路径下预先创建一个Excel文件作为模板,这样可以很好的控制输出格式。本例中在D:\WinCCWriteExcel下创建一个名称为abc.xlsx的Excel文件。如下图所示: 图4 Excel模板 4.2组态查询界面 画面上新建三个输入/输出域,分别用于输入开始时间、结束时间和间隔时间。按钮中执行用于访问变量归档数据的VBS脚本。 图5 查询界面 4.3关键脚本介绍 1)打开Excel模板 以后台方式打开之前创建好的Excel模板。其中sheetname作为变量可以定义Excel中Sheet 的名字。 Set objExcelApp = CreateObject("Excel.Application") objExcelApp.Visible = False objExcelApp.Workbooks.Open "D:\WinCCWriteExcel\abc.xlsx" objExcelApp.Worksheets(sheetname).Activate 2)准备查询条件 主要是确定和格式化Catalog、UTC开始时间、UTC结束时间、时间间隔等查询条件。因为北京时间和UTC(协调世界时)时间相差8个小时,所以直接在程序中写入固定的时间差值。Set tagDSNName = HMIRuntime.Tags("@DatasourceNameRT") tagDSNName.Read Set LocalBeginTime = HMIRuntime.Tags("strBeginTime") LocalBeginTime.Read Set LocalEndTime = HMIRuntime.Tags("strEndTime") LocalEndTime.Read UTCBeginTime = DateAdd("h" ,-8,LocalBeginTime.Value) UTCEndTime= DateAdd("h" ,-8,LocalEndTime.Value) UTCBeginTime = Year(UTCBeginTime) & "-" & Month(UTCBeginTime) & "-" & Day(UTCBeginTime) & " " & Hour(UTCBeginTime) & ":" & Minute(UTCBeginTime) & ":" & Second(UTCBeginTime) UTCEndTime = Year(UTCEndTime) & "-" & Month(UTCEndTime) & "-" & Day(UTCEndTime) & " " & Hour(UTCEndTime) & ":" & Minute(UTCEndTime) & ":" & Second(UTCEndTime) HMIRuntime.Trace "UTC Begin Time: " & UTCBeginTime & vbCrLf HMIRuntime.Trace "UTC end Time: " & UTCEndTime & vbCrLf Set sVal = HMIRuntime.Tags("sVal")