文档详情

WinCC使用VBS读取报警记录数据到EXCEL

工****
实名认证
店铺
DOC
303.50KB
约10页
文档ID:465150463
WinCC使用VBS读取报警记录数据到EXCEL_第1页
1/10

WinCC】使用VBS读取报警记录数据到E*CEL1概述介绍如何在WinCC工程中使用VBS脚本读取报警记录归档数据,并把获取的数据保存成新的E*cel文件2软件环境Windows *P SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office E*cel 20073访问原理WinCC报警记录数据是以压缩的形式存储在数据库中,需要通过 WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据当使用 OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式连接字符串格式为"Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;〞,其中:Catalog为WinCC运行数据库的名称, 当修改工程名称或在其它计算机上翻开原工程时, Catalog会发生变化建议使用WinCC部变量 "DatasourceNameRT〞 获得当前工程的CatalogData Source 为效劳器名称,格式为"<计算机名称>\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)"242021134组态介绍4.1准备工作1〕创立变量其中AlmTagA、AlmTagB和AlmTagC用于组态报警,MySqlStr用于动态化查询条件如以以下图所示:图1变量2〕组态报警在报警记录中组态如下报警:图2报警信息图3单个消息组态界面3〕创立E*cel模板在特定的路径下预先创立一个E*cel文件作为模板,这样可以很好的控制输出格式。

本例中在D:\WinCCWriteE*cel下创立一个名称为abc.*ls*的E*cel文件如以以下图所示:图4E*CEL模板4.2组态查询界面画面上新建五个按钮,上面的四个按钮分别用于设置不同的查询条件按钮下方的静态文本用于显示查询条件最下方的按钮用于执行查询报警记录的VBS脚本其中查询条件的设定是通过按钮的直接连接方式实现图5 查询界面在按钮属性对话框的鼠标动作中选择直接连接翻开如下界面,配置查询条件其中来源局部为查询字符串,目标局部为存储查询条件的变量图6按钮直接连接配置4.3详细脚本介绍1〕翻开E*cel模板以后台方式翻开之前创立好的E*cel模板其中sheetname作为变量可以定义E*cel中Sheet的名字需要注意模板文件的存储路径Set objE*celApp = CreateObject("E*cel.Application")objE*celApp.Visible = FalseobjE*celApp.Workbooks.Open "D:\WinCCWriteE*cel\abc.*ls*"objE*celApp.Worksheets(sheetname).Activate2〕准备查询条件主要是确定和格式化Catalog和查询条件。

关键脚本如下:'准备查询条件 CatalogSet tagDSNName = HMIRuntime.Tags("DatasourceNameRT")tagDSNName.Read‘拼接查询条件MySqlStr.ReadsSql = "ALARMVIEW:Select * FROM AlgViewCHT "&MySqlStr.Value其中MySqlStr为定义的部字符串类型的变量,当点击查询条件中的按钮时 ,就会把相应的查询条件字符串传给该变量〔需要根据工程的实际情况调整查询条件〕本例中的四条查询条件的完整语句如以以下图所示:图7查询条件3〕完整的代码'变量定义和初始化Dim sPro,sDsn,sSer,sCon,conn,sSql,oRs,oDim tagDSNNameDim m,iDim objE*celApp,objE*celBook,objE*celSheet,sheetnameDim MySqlStrSet MySqlStr = HMIRuntime.Tags("MySqlStr")item.Enabled = False'On Error Resume Ne*tsheetname="Sheet1"'翻开E*cel模板Set objE*celApp = CreateObject("E*cel.Application")objE*celApp.Visible = FalseobjE*celApp.Workbooks.Open "D:\WinCCWriteE*cel\abc.*ls*"objE*celApp.Worksheets(sheetname).Activate'准备查询条件 CatalogSet tagDSNName = HMIRuntime.Tags("DatasourceNameRT")tagDSNName.Read'创立数据库联接sPro = "Provider=WinCCOLEDBProvider.1;"sDsn = "Catalog=" &tagDSNName.Value& ";"sSer = "Data Source=.\WinCC"sCon = sPro + sDsn + sSerSet conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3conn.Open'定义查询的命令文本 SQLMySqlStr.ReadsSql = "ALARMVIEW:Select * FROM AlgViewCHT "&MySqlStr.ValueHMIRuntime.Trace "Sql is: " & sSql & vbCrLfSet oRs = CreateObject("ADODB.Recordset")Set o = CreateObject("ADODB.mand")o.mandType = 1Set o.ActiveConnection = conno.mandTe*t = sSql'填充数据到E*cel中Set oRs = o.E*ecutem = oRs.RecordCountIf (m > 0) ThenoRs.MoveFirsti=3Do While Not oRs.EOF '是否到记录末尾,循环填写表格objE*celApp.Worksheets(sheetname).cells(i,1).value= CStr(oRs.Fields(0).Value)objE*celApp.Worksheets(sheetname).cells(i,2).value= CStr(oRs.Fields(1).Value)objE*celApp.Worksheets(sheetname).cells(i,3).value= CStr(oRs.Fields(2).Value)objE*celApp.Worksheets(sheetname).cells(i,4).value= CStr(oRs.Fields(37).Value)oRs.MoveNe*ti=i+1LoopoRs.CloseElseMsgBo* "没有所需数据……"item.Enabled = TrueSet oRs = Nothingconn.CloseSet conn = NothingobjE*celApp.Workbooks.CloseobjE*celApp.QuitSet objE*celApp= NothingE*it SubEnd If'释放资源Set oRs = Nothingconn.CloseSet conn = Nothing'生成新的文件,关闭E*celDim patch,filenamefilename=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))&CStr(Hour(Now))+CStr(Minute(Now))&CStr(Second(Now))patch= "d:\"&filename&"demo.*ls*"objE*celApp.ActiveWorkbook.SaveAs patchobjE*celApp.Workbooks.CloseobjE*celApp.QuitSet objE*celApp= NothingMsgBo* "成功生成数据文件!"item.Enabled = True5结果和建议以以下图为程序执行的结果。

仅供参考:图8输出结果建议:为了改善本地访问期间的性能,请输入"<计算机名称>\WinCC〞作为数据源,而不是".\WinCC〞为了提高系统的执行效率,建议仅读取少量的数据为了防止可能造成的数据损失,建议在执行操作之前先退出E*cel应用程序声明:本文所述的方法为WinCC的高级用法,提供的代码程序仅供用户参考,西门子公司不提供任何调试和热线支持敬请谅解!关键词WinCC、E*cel、VBS、脚本、连通性软件包. z.。

下载提示
相似文档
正为您匹配相似的精品文档