WinCC使用VBS读取报警记录数据到EXCELWord下载.docx
- 文档编号:20630657
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:11
- 大小:265.50KB
WinCC使用VBS读取报警记录数据到EXCELWord下载.docx
《WinCC使用VBS读取报警记录数据到EXCELWord下载.docx》由会员分享,可在线阅读,更多相关《WinCC使用VBS读取报警记录数据到EXCELWord下载.docx(11页珍藏版)》请在冰豆网上搜索。
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模板
创建数据库联接
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
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
释放资源
生成新的文件,关闭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
成功生成数据文件!
5结果和建议
下图为程序执行的结果。
仅供参考:
图8输出结果
建议:
为了改善本地访问期间的性能,请输入“<
\WinCC”作为数据源,而不是“.\WinCC”。
为了提高系统的执行效率,建议仅读取少量的数据。
为了避免可能造成的数据损失,建议在执行操作之前先退出Excel应用程序。
声明:
本文所述的方法为WinCC的高级用法,提供的代码程序仅供用户参考。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WinCC 使用 VBS 读取 报警 记录 数据 EXCEL
![提示](https://static.bdocx.com/images/bang_tan.gif)