WinCC使用VBS读取报警记录数据到EXCEL.docx
- 文档编号:7518924
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:11
- 大小:265.50KB
WinCC使用VBS读取报警记录数据到EXCEL.docx
《WinCC使用VBS读取报警记录数据到EXCEL.docx》由会员分享,可在线阅读,更多相关《WinCC使用VBS读取报警记录数据到EXCEL.docx(11页珍藏版)》请在冰豆网上搜索。
WinCC使用VBS读取报警记录数据到EXCEL
【WinCC】使用VBS读取报警记录数据到EXCEL
1、概述
介绍如何在WinCC项目中使用VBS脚本读取报警记录归档数据,并把获取的数据保存成新的Excel文件。
2、软件环境
WindowsXPSP3中文版、WinCC7.0SP2ASIA、MicrosoftofficeExcel2007
3、访问原理
WinCC报警记录数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据。
当使用OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。
连接字符串格式为“Provider=WinCCOLEDBProvider.1;Catalog=***;DataSource=***;”,其中:
Catalog为WinCC运行数据库的名称,当修改项目名称或在其它计算机上打开原项目时,Catalog会发生变化。
建议使用WinCC内部变量“@DatasourceNameRT”获得当前项目的Catalog。
DataSource为服务器名称,格式为“<计算机名称>\WinCC”。
3.1查询语句格式
查询语句的格式要求如下:
AlARMVIEW:
SELECT*FROM[WHERE……optional]
其中参数信息如下所示:
ViewName:
数据库表名。
必须用需要的语言指定该表。
比如:
中文字符表名为:
ALGVIEWCHT,英文字符表明为:
ALGVIEWENU等。
Condition:
为过滤标准。
详细说明请参见下表:
表1查询参数表
3.2查询结果
查询结果作为记录集返回。
可以根据需要有选择的返回特定的数据集。
例如:
oRs.Fields(0).Value返回的是消息的编号;oRs.Fields
(2).Value返回的是消息的时间戳;oRs.Fields(37).Value返回的是消息文本的内容。
记录集的结构如下表所示:
表2记录集结构
表3记录集结构(续表)
注意:
WinCC的归档数据是使用UTC(协调世界时)时间保存的。
本例中所采用的时间均为UTC时间,如果需要实现在本地时间和UTC时间之间的转换,请参考下列连接:
如何计算本地时间和UTC时间的时间差,如何转换UTC时间成SQL语句格式?
22115636
如何将本地计算机时间的时间戳(日期时间)转换成协调世界时(UTC)?
24201113
4、组态介绍
4.1准备工作
1)创建变量:
其中AlmTagA、AlmTagB和AlmTagC用于组态报警,MySqlStr用于动态化查询条件。
如下图所示:
图1变量
2)组态报警:
在报警记录中组态如下报警:
图2报警信息
图3单个消息组态界面
3)创建Excel模板:
在特定的路径下预先创建一个Excel文件作为模板,这样可以很好的控制输出格式。
本例中在D:
\WinCCWriteExcel下创建一个名称为abc.xlsx的Excel文件。
如下图所示:
图4EXCEL模板
4.2组态查询界面:
画面上新建五个按钮,上面的四个按钮分别用于设置不同的查询条件。
按钮下方的静态文本用于显示查询条件。
最下方的按钮用于执行查询报警记录的VBS脚本。
其中查询条件的设定是通过按钮的直接连接方式实现。
图5查询界面
在按钮属性对话框的鼠标动作中选择直接连接打开如下界面,配置查询条件。
其中来源部分为查询字符串,目标部分为存储查询条件的变量。
图6按钮直接连接配置
4.3详细脚本介绍
1)打开Excel模板
以后台方式打开之前创建好的Excel模板。
其中sheetname作为变量可以定义Excel中Sheet的名字。
需要注意模板文件的存储路径。
SetobjExcelApp=CreateObject("Excel.Application")
objExcelApp.Visible=False
objExcelApp.Workbooks.Open"D:
\WinCCWriteExcel\abc.xlsx"
objExcelApp.Worksheets(sheetname).Activate
2)准备查询条件
主要是确定和格式化Catalog和查询条件。
关键脚本如下:
'准备查询条件Catalog
SettagDSNName=HMIRuntime.Tags("@DatasourceNameRT")
tagDSNName.Read
‘拼接查询条件
MySqlStr.Read
sSql="ALARMVIEW:
Select*FROMAlgViewCHT"&MySqlStr.Value
其中MySqlStr为定义的内部字符串类型的变量,当点击查询条件中的按钮时,就会把相应的查询条件字符串传给该变量(需要根据项目的实际情况调整查询条件)。
本例中的四条查询条件的完整语句如下图所示:
图7查询条件
3)完整的代码
'变量定义和初始化
DimsPro,sDsn,sSer,sCon,conn,sSql,oRs,oCom
DimtagDSNName
Dimm,i
DimobjExcelApp,objExcelBook,objExcelSheet,sheetname
DimMySqlStr
SetMySqlStr=HMIRuntime.Tags("MySqlStr")
item.Enabled=False
'OnErrorResumeNext
sheetname="Sheet1"
'打开Excel模板
SetobjExcelApp=CreateObject("Excel.Application")
objExcelApp.Visible=False
objExcelApp.Workbooks.Open"D:
\WinCCWriteExcel\abc.xlsx"
objExcelApp.Worksheets(sheetname).Activate
'准备查询条件Catalog
SettagDSNName=HMIRuntime.Tags("@DatasourceNameRT")
tagDSNName.Read
'创建数据库联接
sPro="Provider=WinCCOLEDBProvider.1;"
sDsn="Catalog="&tagDSNName.Value&";"
sSer="DataSource=.\WinCC"
sCon=sPro+sDsn+sSer
Setconn=CreateObject("ADODB.Connection")
conn.ConnectionString=sCon
conn.CursorLocation=3
conn.Open
'定义查询的命令文本SQL
MySqlStr.Read
sSql="ALARMVIEW:
Select*FROMAlgViewCHT"&MySqlStr.Value
HMIRuntime.Trace"Sqlis:
"&sSql&vbCrLf
SetoRs=CreateObject("ADODB.Recordset")
SetoCom=CreateObject("ADODB.Command")
oCom.CommandType=1
SetoCom.ActiveConnection=conn
oCom.CommandText=sSql
'填充数据到Excel中
SetoRs=oCom.Execute
m=oRs.RecordCount
If(m>0)Then
oRs.MoveFirst
i=3
DoWhileNotoRs.EOF'是否到记录末尾,循环填写表格
objExcelApp.Worksheets(sheetname).cells(i,1).value=CStr(oRs.Fields(0).Value)
objExcelApp.Worksheets(sheetname).cells(i,2).value=CStr(oRs.Fields
(1).Value)
objExcelApp.Worksheets(sheetname).cells(i,3).value=CStr(oRs.Fields
(2).Value)
objExcelApp.Worksheets(sheetname).cells(i,4).value=CStr(oRs.Fields(37).Value)
oRs.MoveNext
i=i+1
Loop
oRs.Close
Else
MsgBox"没有所需数据……"
item.Enabled=True
SetoRs=Nothing
conn.Close
Setconn=Nothing
objExcelApp.Workbooks.Close
objExcelApp.Quit
SetobjExcelApp=Nothing
ExitSub
EndIf
'释放资源
SetoRs=Nothing
conn.Close
Setconn=Nothing
'生成新的文件,关闭Excel
Dimpatch,filename
filename=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))&CStr(Hour(Now))+CStr(Minute(Now))&CStr(Second(Now))
patch="d:
\"&filename&"demo.xlsx"
objExcelApp.ActiveWorkbook.SaveAspatch
objExcelApp.Workbooks.Close
objExcelApp.Quit
SetobjExcelApp=Nothing
MsgBox"成功生成数据文件!
"
item.Enabled=True
5结果和建议
下图为程序执行的结果。
仅供参考:
图8输出结果
建议:
为了改善本地访问期间的性能,请输入“<计算机名称>\WinCC”作为数据源,而不是“.\WinCC”。
为了提高系统的执行效率,建议仅读取少量的数据。
为了避免可能造成的数据损失,建议在执行操作之前先退出Excel应用程序。
声明:
本文所述的方法为WinCC的高级用法,提供的代码程序仅供用户参考。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WinCC 使用 VBS 读取 报警 记录 数据 EXCEL