【WinCC】使用VBS读取报警记录数据到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表格中写数据。
在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,<ValueID或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]4 字节长ValueID 的请求:TAG:R,<ValueID 或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]其中:ValueID:过程值归档变量的唯一标识符。
报警记录的导入导出

wincc的报警记录可以通过excel批量的编辑和导入、导出
假设现在有两个wincc项目,我想把项目1的报警记录导入到项目2,那么按照如下操作即可。
1. 将项目1的报警信息导出:打开项目1--》报警记录--》消息--》导出单个消息,在弹出的对话框设置
一下文件名,然后单击“导出”既可以导出名为*.txt的文件。
2. 将txt文件改名字为.csv文件即可用excel打开
3. 用excel打开后将消息编号那一列(第一列就是)编辑一下,避免和项目2的消息号重复。
4. 将修改好的csv文件重新改名为txt文件。
5. 打开项目2--》报警记录--》消息--》导入单个消息--》选择修改好的txt文件,选择“只导入新消息”--》
单击“导入”即可导入项目1的报警消息
注意:导入之前请确保消息变量存在于项目中,否则会报错。
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通过工业数据桥将数据记录导出到Excel

WINCC通过工业数据桥将数据记录导出到ExcelWINCC通过工业数据桥将数据记录导出到Excel表格一软件版本说明1.经典版WINCC V7.4SP12.Industrial Data Bridge V7.4SP13.Excel 2007 包含多种版本都可使用,本实例为2007版本。
二组态wincc画面1.组态内部变量tag2_datalog:用不变量记录数据tag1_tigger:触发变量,用于触发记录数据2.组态变量记录4.组态画面准备工作:在计算机-属性-启动-选择变量记录运行系统。
组态画面三工业数据桥设置1.创建连接打开工业数据桥组态软件,创建一个新的连接数据提供方:OPC Data Access数据消费方:Excel分别在下拉列表中选择上述参数。
2.设置数据提供方数据点击Provide(OPCDA)组态数据OPC服务器:OPC Server. WINCC节点名称:Localhost 本地主叫2.消费方组态设置文件路径为设计文件夹下-IDB文件夹。
高级选项中的设置可全部为默认设置即可。
3 设置项目设置传送选项触发变量:选择定义好的触发变量触发值为1:当触发值设置为1时记录一次数据。
确认值2:将提供方数据与消费方数据一一映射。
3.保存工业数据桥组态数据点击下图红色圈内的箭头,将数据保存在设计文件-IDB文件夹下即可。
四.设置工业数据桥运行系统1 选择组态文件双击打开idb2即可。
接下来电机connect 和start 即可进行数据传送传送结束,点击stop和disconnect即可完成数据传输,自动生成Excel数据表格。
在设计文件下-IDB文件夹下打开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(附带程序)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 新增参数运行效果。
将WinCC的历史数据写入Excel文件
将WinCC的历史数据写入Excel文件最近,几个客户提到了一个共性的需求:定期将WinCC的历史归档数据导出到Excel文件中,供第三应用去访问。
实现这个需求的方法很多,如:1)通过IDB(Industrial Databridge工业数据桥选件), 通过简单的组态就能实现,操作视频链接:/xxym.aspx?id=124622)手动点击画面中的表格或趋势控件上的导出按钮,将数据导出;或通过定期(如每小时)执行全局脚本控制表格或趋势控件上的导出按钮导出数据。
核心VBS代码如下:TableControl1.Online = 0 '设置表格控件停止实时更新TableControl1.TimeColumnRangeType=1'设置表格控件时间范围为“开始到结束”TableControl1.TimeColumnBeginTime=XXX'设置表格控件的开始时间TableControl1.TimeColumnEndTime=YYY'设置表格控件的结束时间TableControl1.ExportShowDialog=False'取消表格控件导出时弹出对话框TableControl1.ExportDirectoryname=BBB'设置导出的目录TableControl1.ExportFilename=AAA'设置导出的文件名TableControl1.Export()'执行表格控件的导出动作注意:此种方式,控件所在画面要为当前运行画面或用全局脚本将其置为当前画面,否则全局脚本无法操作此控件。
3)通过脚本调用WinCC OLE DB接口直接读取历史数据,写入到Excel文件中----------------------------------------------这里重点介绍第3)种:VBS访问WinCC OLE DB接口读取历史数据,写入Excel(Connectivitypack连通包提供此接口)这种方式核心代码包括A和B这2部分A. 调用WinCC OLE DB接口读取历史数据核心代码及注解:A1. 查询归档数据scon='Provider=WinCCOLEDBProvider.1;Catalog=CC_test03 _20_06_12_17_50_01R;Data Source=.\WinCC''建立到归档数据库的连接字符串'Catalog为WinCC数据库的名称(内部系统变量@DatasourceNameRT的值),Data Source为服务器名称,本地用“.\WinCC”即可。
【WinCC】使用VBS读取报警记录数据到EXCEL
【WinCC】使用VBS读取报警记录数据到EXCEL1概述介绍如何在WinCC项目中使用VBS脚本读取报警记录归档数据,并把获取的数据保存成新的Excel文件。
2软件环境Windows XP SP3 中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20073访问原理WinCC报警记录数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据。
当使用OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。
连接字符串格式为“ Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中:Catalog为WinCC运行数据库的名称,当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。
建议使用WinCC内部变量“@DatasourceNameRT”获得当前项目的Catalog。
Data 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 (协调世界时)时间保存的。
(完整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字节长ValuelD 的请求:TAG_LLVID:R,<ValuelD 或ValueName>,<TimeBegin>,vTimeEnd>[,<SQL_clause>][,vTimeStep>]4字节长ValuelD 的请求:TAG:R,<ValueID 或ValueName>,vTimeBegin>,vTimeEnd>[,vSQL_clause>][,vTimeStep>]其中:ValuelD :过程值归档变量的唯一标识符。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【WinCC】使用VBS读取报警记录数据到EXCEL1概述介绍如何在WinCC项目中使用VBS脚本读取报警记录归档数据,并把获取的数据保存成新的Excel文件。
2软件环境Windows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20073访问原理WinCC报警记录数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据。
当使用OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。
连接字符串格式为“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中:Catalog为WinCC运行数据库的名称,当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。
建议使用WinCC内部变量“@DatasourceNameRT”获得当前项目的Catalog。
Data 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)?242011134组态介绍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 的名字。
需要注意模板文件的存储路径。
Set objExcelApp = CreateObject("Excel.Application")objExcelApp.Visible = FalseobjExcelApp.Workbooks.Open "D:\WinCCWriteExcel\abc.xlsx"objExcelApp.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,oComDim tagDSNNameDim m,iDim objExcelApp,objExcelBook,objExcelSheet,sheetnameDim MySqlStrSet MySqlStr = HMIRuntime.Tags("MySqlStr")item.Enabled = False'On Error Resume Nextsheetname="Sheet1"'打开Excel模板Set objExcelApp = CreateObject("Excel.Application") objExcelApp.Visible = FalseobjExcelApp.Workbooks.Open "D:\WinCCWriteExcel\abc.xlsx" objExcelApp.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.Value HMIRuntime.Trace "Sql is: " & sSql & vbCrLfSet oRs = CreateObject("ADODB.Recordset")Set oCom = CreateObject("mand")mandType = 1Set oCom.ActiveConnection = connmandText = sSql'填充数据到Excel中Set oRs = oCom.Executem = oRs.RecordCountIf (m > 0) ThenoRs.MoveFirstDo While Not oRs.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.MoveNexti=i+1LoopoRs.CloseElseMsgBox "没有所需数据……"item.Enabled = TrueSet oRs = Nothingconn.CloseSet conn = NothingobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp= NothingExit SubEnd If'释放资源Set oRs = Nothingconn.CloseSet conn = Nothing'生成新的文件,关闭ExcelDim patch,filenamefilename=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.SaveAs patchobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp= NothingMsgBox "成功生成数据文件!"item.Enabled = True5结果和建议下图为程序执行的结果。
仅供参考:图8输出结果建议:为了改善本地访问期间的性能,请输入“<计算机名称>\WinCC”作为数据源,而不是“.\WinCC”。
为了提高系统的执行效率,建议仅读取少量的数据。