在WinCC中如何使用VBS读取变量归档数据到EXCEL

合集下载

使用Wincc中的VBS进行变量读取

使用Wincc中的VBS进行变量读取

使用Wincc中的VBS进行变量读取Wincc6包含了VBS脚本编程,对于我等熟悉VB编程的可谓带来的福音,但是,由于西门子的C脚本编程功能实在太强大,加上要保持以前版本的一致性和用户编程习惯的延伸性,所以对于VBS脚本并没有太多的介绍。

这里我先来介绍一下Wincc中对于控件引用的一般性论述。

Wincc对于控件引用一般都采取定义变量-》使用Set 变量=对象.(方法或属性)->引用变量来做的。

在变量读取或写入的过程中,我们要接触到一些属性和方法,例如,Read和Write 方法,变量的Value属性,熟练掌握这些属性和方法相当重要。

下面解释一下Write和Read方法的语法:Read data 其中data是读取变量的方法,如果data=1,直接从AS系统读取,相当于C脚本中的Get*****wait()函数,如果省略,则从Wincc变量管理器中建立的变量中读取。

Write data,1 其中data是需要写入变量的数值,1代表直接写入AS系统,相当于C 脚本中的Set*****wait()函数,1省略,则写入到由Wincc变量管理器建立的变量中去。

实例:读取变量的方法:1 Dim objTagSet objTag=HMIRunTime.Tags("变量名")objTag.Read2 HMIRunTime.Tags("变量名").Read如果以上例程改成直接读取AS系统变量的话,程序为:1 Dim objTagSet objTag=HMIRunTime.Tags("变量名")objTag.Read,12 HMIRunTime.Tags("变量名").Read,1写变量的方法:1 Dim objTagSet objTag=HMIRunTime.Tags("变量名")objTag.Write 1 '向变量写入数值1'也可以写为 objTag.Write 10 向变量写入数值102 HMIRunTime.Tags("变量名").Write 1'也可以写为 objTag.Write 10除了以上方法外,你也可以将一个中间变量的值写入:Dim objTag,valSet objTag=HMIRunTime.Tags("变量名")objTag.Readval=objTag.Value '中间变量val存放了变量的值objtag.Write val '写入变量中去当然,其余的方法还有很多,这些都需要自己在编程过程中总结和灵活运用。

vbs将wincc数据写入数据库+导入到excel

vbs将wincc数据写入数据库+导入到excel

WinCC V6.0 VBS 脚本在自动汽车检测与识别系统中的应用钟时(西门子工厂自动化工程有限公司工程部北京)摘要:本文描述了如何运用西门子上位监控软件WinCC V6.0集成的VBS脚本在自动汽车检测与识别系统中将实时车体信息记录到数据库中,并最终通过用户查询,以报表的形式打印出来。

关键词:WinCC V6.0,VBS,AVIAbstractThis paper introduces that how to store and query the datum by using VBScript -Editor integrating SIEMENS HMI software WinCC V6, then output datum as report style auto-matically.Key Words:WinCC V6.0,VBS,AVI一、项目简介项目的所在地位于山东省烟台市经济技术开发区内的上海通用东岳汽车有限公司。

其油漆车间新上的一套AVI(自动汽车识别)系统通过采用安装在车体滑撬上的西门子MOBY传感器将实时车体信息传递到主控PLC中,再由上位监控计算机采集存入数据库并最终由用户有选择的以报表形式将信息打印输出。

各AVI信息采集站除装有MOBY自动读写头外,还各有一套ET200S远程站和操作员面板采集现场其它信号。

整套AVI系统的现场级均采用西门子PROFIBUS-DP总线来传递信息,PLC与上位监控计算机采用工业以太网进行实时通讯。

二、系统介绍2.1 工艺需求由于油漆车间有其自身的生产工艺,诸如:电泳,喷漆,烘房等,因此各车辆的车体信息会在其进入油漆车间之前被自动存储在车体所对应的滑撬上的MOBY存储单元中。

当车体到达首个固定的AVI读写站时,自动条码扫描枪会读取贴在车体上的条形码信息,同时,MOBY读写头会自动从滑撬上的MOBY存储单元中读出车体信息并与扫描枪扫到的信息进行比对,如果两者比较结果一致,则主控PLC会返回机运线放行信号将此车辆放行。

Wincc V7.3用户归档深入5-用vbs将用户归档的内容导出到excel

Wincc V7.3用户归档深入5-用vbs将用户归档的内容导出到excel

Wincc V7.3用户归档深入5-用vbs将用户归档的内容导出到excel我们在用户归档中得到数据之后,如果想导出到excel,思路是和把MSHFGrid数据导出类似的。

网上有些文章是直接从后台数据表读取数据,本文介绍从数据归档控件导出数据。

1. 假设wincc项目已经创建了用户归档,画面上有一个用户归档控件,名字叫做UA,设置一个按钮,按钮点击事件添加以下vbs脚本Sub OnClick(ByVal Item)Dim UA,col,row,rowsDim xlapp,objsheetDim i,j,k,m,n,filenameSet UA=ScreenItems("UA")Set rows=UA.GetRowCollectionm=rows.Countn=UA.ColumnCountIf m>1 Then '如果用户归档控件有记录Set xlapp=CreateObject("Excel.Application")xlapp.visible=Falsexlapp.workbooks.addSet objsheet=xlapp.worksheets(1)For k=1 To nua.ColumnIndex=kobjsheet.cells(3,k)=ua.ColumnCaption '字段名称Nextobjsheet.cells(1,1)="XX用户归档"For i=1 To mFor j= 1 To nobjsheet.cells(i+3,j)=ua.GetRow(i).celltext(j)NextNext'以下代码处理日期时间数据格式以及表格边框线、标题合并单元格等排版objsheet.range("a1:d1").mergecells=True'objsheet.range("a1").ColumnWidth =20 '列宽度objsheet.cells(2,1)="生成时间:"objsheet.cells(2,2)=Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日"objsheet.cells(1,1).HorizontalAlignment = 3objsheet.range("a3:d" & CStr(3+m)).borders(1).linestyle=9objsheet.range("a3:d" & CStr(3+m)).borders(1).weight=2objsheet.range("a3:d" & CStr(3+m)).borders(2).linestyle=9objsheet.range("a3:d" & CStr(3+m)).borders(2).weight=2objsheet.range("a3:d" & CStr(3+m)).borders(3).linestyle=9objsheet.range("a3:d" & CStr(3+m)).borders(3).weight=2objsheet.range("a3:d" & CStr(3+m)).borders(4).linestyle=9objsheet.range("a3:d" & CStr(3+m)).borders(4).weight=2'保存文件filename= "c:\" & Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日-" & Hour(Now) & "点" & Minute(Now) & "分" & Second(Now) & "秒生成用户归档.xlsx"xlapp.Activeworkbook.saveas (filename) xlapp.workbooks.closexlapp.quitMsgbox "成功导出到C:\"ElseMsgbox "用户归档没有记录"End IfEnd Sub。

用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例

用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例

用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例(2009-12-30 16:47:45)用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例子程序求用VBS实现WINCC的用户归档输出到固定格式的EXCEL表格的方法和例子程序!我主要问题在SQL数据库的查询语句不会。

看见论坛里有关用VBS实现EXCEL的数据查询和导出,我现在想要完成如下功能:每分钟将数据归档,用户可以输入任意的时刻时间查询从任意时刻开始的之后每隔1小时的数据(有点像日报里的24个小时)。

我现在对于VBS查询数据库的语句不懂,望大大赐教!谢谢''SQL查询语句Dim strc as stringstrc = "provider=WinCCOLEDBProvider.1;catalog=CC_RebdI_09_06_22_10_3 8_35R;data source=ComputerName\WinCC"''这个连接字符串可以在SQl2000中看到Dim cc1Set cc1=CreateObject("adodb.connection")cc1.ConnectionString=strccc1.CursorLocation=3cc1.openDim rst As ObjectSet rst = CreateObject("adodb.recordset")dim ssql as stringssql = "Tag:R,'Archive_3\DB1DBD0','2009-7-29 00:00:00.0000','200 9-7-29 23:59:59.999','timestep=3600,258'"''Archive_3\I_DB1DBD0归档和变量''2009-7-29 00:00:00.0000,2009-7-29 23:59:59.999时间段''timestep=3600,258每阁多少秒拿一个数据(3600=1小时),258表示每个时间段取最后一个数据rst.Open ssql, cc1''这样查出来的数据就是一天的每小时的数据''对rst记录集处理就可以得到你要的数据==========================Function actionDim objExcelAppDim i,TimeM,TimeNow,TimeSSet TimeM=HMIRuntime.Tags("TimeM")i=1+TimeM.ReadTimeNow=CStr(Year(Now))&"年"&CStr(Month(Now))&"月"&CStr(Day(Now))&"日"&CStr(Hour(Now))&"-"&CStr(Minute(Now))&":"&CStr(Second(Now))TimeS=Second(Now)Set objExcelApp = CreateObject("Excel.Application")objExcelApp.Visible = FalseobjExcelApp.Workbooks.Open"E:\ExcelTest.xls"objExcelApp.Cells(i, 2).Value =123.47objExcelApp.Cells(i, 1).Value = TimeNowobjExcelApp.DisplayAlerts = FalseobjExcelApp.ActiveWorkbook.SaveobjExcelApp.Workbooks.CloseobjExcelApp.quitSet objExcelApp =NothingEnd Function以上代码用于往指定的Excel表格中写数据。

(完整word版)在WinCC中如何使用VBS读取变量归档数据到EXCEL

(完整word版)在WinCC中如何使用VBS读取变量归档数据到EXCEL

(完整word版)在WinCC中如何使⽤VBS读取变量归档数据到EXCEL⽂档类型常问问题, 条⽬ID:77940055, ⽂档发布⽇期2013年7⽉23⽇4)(评估在WinCC中如何使⽤VBS读取变量归档数据到EXCEL推荐⽂档: 西门⼦⼯程师推荐本⽂档!1概述介绍如何在WinCC项⽬中使⽤VBS脚本读取变量归档值,并把获取的数据保存成新的Excel⽂件。

⽂中⽰例代码仅适⽤于以绝对时间间隔⽅式访问。

2软件环境Windows XP SP3中⽂版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20073访问原理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,,,[,][,]4 字节长ValueID 的请求:TAG:R,ValueName>,,[,][,]其中:ValueID:过程值归档变量的唯⼀标识符。

ValueName:过程值归档变量的名称,格式为“ArchiveName\Value_Name”,可以使⽤多个名称。

WINCC 一起学-VBS读取变量归档

WINCC 一起学-VBS读取变量归档

WINCC 一起学-VBS读取变量归档通过脚本把变量归档里面的数据读出来,后期再导入EXCEL或者控件里面,或有其他的功能。

本文从新建项目开始,一步一步来,想到哪里写到哪里,为了减少工作量,就以温度(T),压力(P)和流量(L)3个变量为例进行读写操作。

软件基础:虚拟机WIN7 SP1 64位旗舰版和WINCC 7.3SE+UPD9+OFFICE2003为基础,未安装连通性软件包。

目的:使用VBS脚本,读取WINCC变量归档数据,然后导出到EXCEL文件或者ListView控件中。

1、参考资料先把一些参考资料放出来,大家一起学习,本文中的资料来自以下文档、手册和WINCC帮助内容,一些朋友问关于报表的问题,我给发的基本上都是这些手册。

2、准备工作2.1 新建项目在D盘目录下新建名为TAGREAD的项目2.2 建立变量在内部变量下,新建分组“TR”,在分组下面,新建名分别为为“P”、“T”、“L”的变量,类型均为:32-位浮点数IEEE 754。

图1同时变量在全局脚本里面进行周期性赋值T:画幅值是10周期10秒的正弦波T:0-10的随机数P:T/100进行累加脚本如下:图2触发方式:周期->250ms2.3 变量归档新建名为:TAGR的过程值归档,为减少数据库的大小,采样和归档时间我设置成1S,其他设置默认。

如图,前三个,下面的请忽略图32.4 设计画面本人的审美不咋的,就随便做一个画面用来测试。

画面内容:3个IO域,显示3个变量的实际值;1个在线趋势控件,显示变量趋势;标尺控件方便查看历史值,Listview控件:方便后面导出显示;应用程序:脚本诊断,用于输出脚本是否正常。

最右一个按钮,名为测试。

运行后如图图44、读取变量归档连接数据库成功,下一步就是从归档之中读取数据了,读取数据要用到两个对象,“ADODB.Recordset”和“mand”对象4.1 ADODB.Recordset4.1.1 简介ADO Recordset 对象用于容纳一个来自数据库表的记录集。

WinCC中全局脚本VBS归档到Excel

WinCC中全局脚本VBS归档到Excel

WinCC中全局脚本VBS归档到Excel中用一个变量触发数据归档到Excel中,请高手看看我写的为何不能运行。

Sub procedure1If Item.OutputValue = "NewTag" ThenDim oVar,oBlendingVar,objExcelApp,oWorkBook,ExcelTableFull,oFileNameOn Error Resume NextExcelTableFull=0Set objExcelApp=CreateObject("Excel.Application")objExcelApp.Visible=FalseSet oWorkBook=objExcelApp.Workbooks.Open("D:\BKHL_HXBJ\模板\Receipt_Table.xls") Dim iBlankLineiBlankLine=oWorkBook.ActiveSheet.Columns(1).Find("0").Row'MsgBox("iBlankLine="&iBlankLine)If iBlankLine<504 ThenobjExcelApp.Cells(iBlankLine,1).Value=HMIRuntime.SmartTags("Recipe_Number").Value objExcelApp.Cells(iBlankLine,2).Value=HMIRuntime.SmartTags("BaseOil_Percent_1").Value objExcelApp.Cells(iBlankLine,3).Value=HMIRuntime.SmartTags("BaseOil_Percent_2").Value objExcelApp.Cells(iBlankLine,4).Value=HMIRuntime.SmartTags("BaseOil_Percent_3").Value objExcelApp.Cells(iBlankLine,5).Value=HMIRuntime.SmartTags("BaseOil_Percent_4").Value objExcelApp.Cells(iBlankLine,6).Value=HMIRuntime.SmartTags("BaseOil_Percent_5").Value objExcelApp.Cells(iBlankLine,7).Value=HMIRuntime.SmartTags("BaseOil_Percent_6").Value objExcelApp.Cells(iBlankLine,8).Value=HMIRuntime.SmartTags("BaseOil_Percent_7").Value objExcelApp.Cells(iBlankLine,9).Value=HMIRuntime.SmartTags("BaseOil_Percent_8").Value objExcelApp.Cells(iBlankLine,10).Value=HMIRuntime.SmartTags("Additive_Percent_1").Value objExcelApp.Cells(iBlankLine,11).V alue=HMIRuntime.SmartTags("Additive_Percent_2").Value objExcelApp.Cells(iBlankLine,12).Value=HMIRuntime.SmartTags("Additive_Percent_3").Value objExcelApp.Cells(iBlankLine,13).Value=HMIRuntime.SmartTags("Additive_Percent_4").Value objExcelApp.Cells(iBlankLine,14).Value=HMIRuntime.SmartTags("Additive_Percent_5").Value objExcelApp.Cells(iBlankLine,15).Value=HMIRuntime.SmartTags("Additive_Percent_6").Value objExcelApp.Cells(iBlankLine,16).Value=HMIRuntime.SmartTags("Additive_Percent_7").Value objExcelApp.Cells(iBlankLine,17).Value=HMIRuntime.SmartTags("Additive_Percent_8").ValueElse'MsgBox("Data Table Full,Copy to the backup file,continue ?")objExcelApp.displayalerts=FalseoFileName=CStr("D:\BKHL_HXBJ\模板\运行数据_"&Month(Date)&"月"&Day(Date)&"日"&"_"& Hour(Time)&"时"&Minute(Time)&"分"&".xls")oWorkBook.Saveas(oFileName)ExcelTableFull=1objExcelApp.displayalerts=TrueEnd IfoWorkBook.SaveobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp=NothingSet oWorkBook=NothingIf ExcelTableFull=1 Then'MsgBox("Data Table Full, Clear the current data table, continus?")Set objExcelApp=CreateObject("Excel.Application")objExcelApp.Visible=FalseSet oWorkBook=objExcelApp.Workbooks.Open("D:\BKHL_HXBJ\模板\Receipt_Table_Templet.xls")objExcelApp.displayalerts=FalseoWorkBook.Saveas("D:\BKHL_HXBJ\模板\Receipt_Table.xls")objExcelApp.displayalerts=TrueoWorkBook.SaveobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp=NothingSet oWorkBook=NothingEnd IfEnd IfEnd Sub本文转自亿万论坛:/a/a.asp?B=302&ID=1218853&q=1&r=140751。

如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)

如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)

如何通过VBS 操作WINCC 在线数据控件并导出至EXCEL(附带程序)1 概述本文主要介绍如何通过 VBS 操作 WINCC 在线数据表格控件。

开发环境:PCS7 V8.2 SP1 / WINCC 7.4 SP1使用限制:1) 时间间隔最多至 1 分钟2) 时间范围太长,数据加载可能会比较慢3) 导出文件 EXCEL 没有置顶,导出后要切换到 EXCEL 程序。

扩展性:可扩展选择参数、保存导出文件、生成 PDF 等功能。

本例采用将参数提前组态在控件内,运行中通过复选框来实现选择。

也可完全使用脚本实现参数添加。

详见附加信息>通过脚本新增参数图 1 根据选择查询数据图 2 导出数据成功图 3 在 EXCEL 中查看导出的数据文件3.1 画面部件说明图 5 测试画面部件说明3.1.1 添加时间控件添加 WINCC Activex 控件 Date and time picker,如下图:图 6 添加时间控件3.1.2 设置导出模板本例设置的 excel 文件模板路径:"\\"+ServerName+"\Export\Export.xlsx",可根据项目情况采用其它导出路径和模板。

如果更换了模板或路径,必须修改导出脚本内的路径。

模板内主要设置了字体、数据格式、显示的小数点位数和列宽,也可再增加页眉、页脚、LOGO 等,以达到更好的显示效果。

3.2 画面打开在画面打开事件内,设置如下脚本,用于初始化画面内各控件:图 7 画面打开事件脚本3.3 选择数值参数版设计图 8 添加参数选择复选框设置复选框,在复选框更改事件下添加脚本:图 9 数据参数显示隐藏设置脚本图 10 脚本与控件属性对应关系 3.4 设置时间系数属性:TimeStepFactor图 11 修改时间间隔脚本图 12 修改时间系数 3.5 设定时间范围在查询按钮释放左键事件里:图 14 时间范围查询按钮事件图 14 时间范围查询按钮事件 3.6 导出在导出按钮释放左键事件里:图 16 导出按钮脚本图 17 导出后自动打开文件夹图 18 新增参数脚本图 19 新增参数运行效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文档类型常问问题, 条目ID:77940055, 文档发布日期2013年7月23日4)(评估在WinCC中如何使用VBS读取变量归档数据到EXCEL推荐文档: 西门子工程师推荐本文档!1概述介绍如何在WinCC项目中使用VBS脚本读取变量归档值,并把获取的数据保存成新的Excel文件。

文中示例代码仅适用于以绝对时间间隔方式访问。

2软件环境Windows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20073访问原理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,<ValueID或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]4 字节长ValueID 的请求:TAG:R,<ValueID 或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]其中:ValueID:过程值归档变量的唯一标识符。

ValueName:过程值归档变量的名称,格式为“ArchiveName\Value_Name”,可以使用多个名称。

TimeBegin,TimeEnd:时间范围,格式“YYYY-MM-DD hh:mm:ss.msc”。

SQL_Clause:SQL 语法中的过滤标准。

TimeStep:时间间隔。

使用<TimeStep> 时,必须将<TimeBegin> 指定为绝对时间。

禁止使用相对语句“0000-00-00 00:00:00.000”。

其中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 = FalseobjExcelApp.Workbooks.Open "D:\WinCCWriteExcel\abc.xlsx"objExcelApp.Worksheets(sheetname).Activate2)准备查询条件主要是确定和格式化Catalog、UTC开始时间、UTC结束时间、时间间隔等查询条件。

因为北京时间和UTC(协调世界时)时间相差8个小时,所以直接在程序中写入固定的时间差值。

Set tagDSNName = HMIRuntime.Tags("@DatasourceNameRT")tagDSNName.ReadSet LocalBeginTime = HMIRuntime.Tags("strBeginTime")LocalBeginTime.ReadSet LocalEndTime = HMIRuntime.Tags("strEndTime")LocalEndTime.ReadUTCBeginTime = 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 & vbCrLfHMIRuntime.Trace "UTC end Time: " & UTCEndTime & vbCrLfSet sVal = HMIRuntime.Tags("sVal")sVal.Read另外,因为WinCC中对访问数据库的时间格式有特殊的要求。

所以程序中增加了格式化时间的代码。

更多详细资料请参考连接:如何计算本地时间和UTC 时间的时间差,如何转换UTC 时间成SQL 语句格式?221156363)读取数据并写入Excel中本段代码主要是获取数据并按照一定的格式填写到打开的Excel文件中。

其中sSql可以很灵活的定义开始和结束时间、排序方法和数据分析方法等。

'创建数据库联接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'定义查询的命令文本SQLsSql = "Tag:R,('PVArchive\NewTag'),'" & UTCBeginTime & "','" & UTCEndTime & "',"sSql=sSql+"'order by Timestamp ASC','TimeStep=" & sVal.Value & ",1'"Set oRs = CreateObject("ADODB.Recordset")Set oCom = CreateObject("mand")mandType = 1Set oCom.ActiveConnection = connmandText = sSql'填充数据到Excel中Set oRs = oCom.Executem = oRs.RecordCountIf (m > 0) ThenobjExcelApp.Worksheets(sheetname).cells(2,1).value=oRs.Fields(0).NameobjExcelApp.Worksheets(sheetname).cells(2,2).value=oRs.Fields(1).NameobjExcelApp.Worksheets(sheetname).cells(2,3).value=oRs.Fields(2).NameobjExcelApp.Worksheets(sheetname).cells(2,4).value=oRs.Fields(3).NameobjExcelApp.Worksheets(sheetname).cells(2,5).value=oRs.Fields(4).NameoRs.MoveFirsti=3Do While Not oRs.EOF '是否到记录末尾,循环填写表格objExcelApp.Worksheets(sheetname).cells(i,1).value= oRs.Fields(0).ValueobjExcelApp.Worksheets(sheetname).cells(i,2).value=GetLocalDate(oRs.Fields(1).Value)objExcelApp.Worksheets(sheetname).cells(i,3).value= oRs.Fields(2).ValueobjExcelApp.Worksheets(sheetname).cells(i,4).value= oRs.Fields(3).ValueobjExcelApp.Worksheets(sheetname).cells(i,5).value= oRs.Fields(4).ValueoRs.MoveNexti=i+1LoopoRs.CloseElseMsgBox "没有所需数据……"item.Enabled = TrueSet oRs = Nothingconn.CloseSet conn = NothingobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp= NothingExit SubEnd If注意:因为数据库中数据存储的时间戳是UTC时间,所以在显示的时候需要把UTC时间转换为本地时间,上段代码中的GetLocalDate函数就是实现这样的功能。

相关文档
最新文档