如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序) 您所在的位置:网站首页 wincc怎么做表格 如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)

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

2023-10-17 12:29| 来源: 网络整理| 查看: 265

1、概述

本文主要介绍如何通过 VBS 操作 WINCC 在线数据表格控件。

开发环境:PCS7 V8.2 SP1 / WINCC 7.4 SP1使用限制:

1) 时间间隔最多至 1 分钟

2) 时间范围太长,数据加载可能会比较慢

3) 导出文件 EXCEL 没有置顶,导出后要切换到 EXCEL 程序。

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

本例采用将参数提前组态在控件内,运行中通过复选框来实现选择。也可完全使用脚本实现参数添加。

详见附加信息>通过脚本新增参数

2、运行效果

图 1 根据选择查询数据

图 2 导出数据成功

图 3 在 EXCEL 中查看导出的数据文件

图 4 在 EXCEL 中查看导出的数据文件(选择部分列)

3、项目组态

3.1

画面部件说明

图 5 测试画面部件说明

3.1.1 添加时间控件

添加 WINCC Activex 控件 Date and time picker,如下图:

图 6 添加时间控件

3.1.2 设置导出模板

本例设置的 excel 文件模板路径:"\\"+ServerName +"\Export\Export.xlsx",可根据项目情况采用其它导出路径和模板。如果更换了模板或路径,必须修改导出脚本内的路径。

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

3.2

画面打开

在画面打开事件内,设置如下脚本,用于初始化画面内各控件:

Sub OnOpen() Dim ioTimeFactor,tbl1,dtpStart,dtpEnd Set tbl1=ScreenItems("tbl1") Set ioTimeFactor = ScreenItems("ioTimeFactor") Set dtpStart = ScreenItems("dtpStart") Set dtpEnd = ScreenItems("dtpEnd") '将实际设置的系数显示在设定值上 ioTimeFactor. OutputValue = tbl1.TimeStepFactor '设置时间系数设置 IO 域类型为输入 ioTimeFactor.BoxType =1 '设定表格为开始-结束时间范围 tbl1.TimeColumnRangeType=1 '设置时间控件显示格式 dtpStart.Format=3 dtpStart.CustomFormat= "yyyy/MM/dd HH:mm:ss" dtpEnd.Format=3 dtpEnd.CustomFormat= "yyyy/MM/dd HH:mm:ss" '设置默认时间范围为当天 dtpStart.Value=FormatDateTime(Year(Now) & "/" & Month(Now) & "/" & Day (Now),1)'当天 0 点 dtpEnd.Value=Now'当前时间 End Sub

图 7 画面打开事件脚本

3.3

选择数值参数版设计

图 8 添加参数选择复选框

设置复选框,在复选框更改事件下添加脚本:

Sub Process_OnPropertyChanged(Byval Item, Byval value) Dim i,j,tbl1 Set tbl1 = ScreenItems("tbl1") For i = 0 To item.BoxCount-1 tbl1.ValueColumnIndex= i '判断筛选框是否被选中,如果是,则设置曲线可见 If (value And 2^i) > 0 Then tbl1.ValueColumnVisible = 1 Else tbl1.ValueColumnVisible = 0 End If Next End Sub

图 9 数据参数显示隐藏设置脚本

图 10 脚本与控件属性对应关系

3.4

设置时间系数

属性:TimeStepFactor

图 11 修改时间间隔脚本

Sub InputValue_OnPropertyChanged(ByVal Item, ByVal value) Dim tbl1 Set tbl1 = screenitems("tbl1") tbl1.TimeStepFactor=value End Sub

图 12 修改时间系数

3.5

设定时间范围

图 13 添加时间控件

在查询按钮释放左键事件里:

Sub OnLButtonUp(Byval Item, Byval Flags, Byval x, Byval y) Dim tbl1,dtpStart,dtpEnd Set tbl1 = ScreenItems("tbl1") Set dtpStart = ScreenItems("dtpStart") Set dtpEnd = ScreenItems("dtpEnd") '设置表格的时间范围 tbl1.TimeColumnIndex=0 If dtpStart.Value < dtpEnd.Value Then tbl1.TimeColumnBeginTime=dtpStart.Value tbl1.TimeColumnEndTime =dtpEnd.Value Else Msgbox "开始时间小于结束时间,请正确设置!",vbOKonly+vbExclamation End If End Sub

图 14 时间范围查询按钮事件

图 15 修改起始时间范围

3.6

导出

在导出按钮释放左键事件里:

Sub OnLButtonUp(Byval Item, Byval Flags, Byval x, Byval y) Dim objExcelApp,objExcelSheet,sheetname,ServerName,DataFirstRow,TagValue TagValue=1 DataFirstRow=1 sheetname="sheet1" ServerName = HMIRuntime.Tags("@ServerName").Read '获取表格内数据 Dim tbl1,col,RowCount,row Dim Value() Dim i,j,k Set tbl1 = ScreenItems("tbl1") Set row = tbl1.GetRowCollection'行 RowCount=row.count Redim Value(RowCount+1,tbl1.ValueColumnCount+2)'重定义数值数组,存储时间、数值。行:记 录,列:参数 Set col = tbl1.GetValueColumnCollection'数值列 '序号 Value(0,0)="序号" For j = 1 To RowCount Value(j,0)=j Next '时间列名称 tbl1.TimeColumnIndex=0 Value(0,1)=tbl1.TimeColumnName k=1 For i = 1 To tbl1.ValueColumnCount + 1 '列可见时写数,否则跳出 tbl1.ValueColumnIndex= i-2 If tbl1.ValueColumnVisible Or (i = 1) Then '时间列,或数值列显示 '数值列名称 If i > 1 Then tbl1.ValueColumnIndex= i-2 Value(0,k)=tbl1.ValueColumnName End If For j = 1 To RowCount Value(j,k)=tbl1.GetRow(j).celltext(i)'注意:celltext()指向数据列(不考虑是否隐藏), 当 celltext()指向隐藏的列时,数据为空。cell Next k=k+1 End If Next '打开 Excel 模板 Set objExcelApp = CreateObject("Excel.Application") objExcelApp.Visible = True Set objExcelSheet = objExcelApp.Workbooks.Open("\\"+ServerName +"\Export\Export.xlsx") '模板文件存放位置 objExcelSheet.Activate '写数据至 EXCEL With objExcelApp.Worksheets(sheetname) .Range(.Cells(1,1),.Cells(RowCount+1,tbl1.ValueColumnCount+2))= Value .Cells(RowCount+2,1)="导出人:" .Cells(RowCount+2,2)=HMIRuntime.Tags("@CurrentUserName").Read .Cells(RowCount+3,1)="导出位置:" .Cells(RowCount+3,2)=HMIRuntime.Tags("@LocalMachineName").Read .Cells(RowCount+4,1)="导出时间:" .Cells(RowCount+4,2)=Now .Cells(RowCount+5,1)="数据库:" .Cells(RowCount+5,2)=HMIRuntime.Tags("@DatasourceNameRT").Read .Cells(RowCount+6,1)="软件版本:" .Cells(RowCount+6,2)=HMIRuntime.Tags("@ServerVersion").Read End With 'Msgbox "导出成功,请在 EXCEL 中查看数据",vbOKonly+vbInformation '生成新的文件,关闭 Excel Dim path1,path2,fso,filename Set fso=CreateObject("Scripting.FileSystemObject") filename= CStr(Year(Now)) & CStr(Month(Now)) & CStr(Day(Now))& CStr(Hour(Now))& CStr(Minute(Now))& CStr(Second(Now)) path1= "C:\Users\wq_07\Documents\Export\"&filename&".xlsx" If fso.FileExists(path1) Then '删除重复文件 fso.DeleteFile(path1) End If 'objExcelSheet.ExportAsFixedFormat 0,path1 '0-xlTypePDF ,1-xlTypeXPS,直接另存发现 PDF 软件不能打开文件,因此改用导出 PDF 'CreateReport_RH=path1 objExcelApp.Worksheets(sheetname).SaveAs path1 objExcelSheet.close False'关闭 EXCEL,不保存 objExcelApp.Quit '打开导出文件所在的文件夹 Dim objShell,strFolder strFolder=fso.GetParentFolderName(path1) Set objShell=CreateObject("Wscript.Shell") objshell.Run strFolder End Sub

图 16 导出按钮脚本

图 17 导出后自动打开文件夹

4、附加信息

4.1

通过脚本新增参数

Sub OnLButtonUp(ByVal Item, ByVal Flags, ByVal x, ByVal y) Dim tbl1,col Set tbl1 = ScreenItems("tbl1") '新增参数 Set col = tbl1.GetValueColumnCollection.AddItem("R1-Script") '参数列名 col.Caption = "R1-Script" '归档变量 col.Provider = 1 '归档变量名称 col.TagName = "TBL\R1" '时间轴 col.TimeColumn = "时间" End Sub

图 18 新增参数脚本

图 19 新增参数运行效果

王琦



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有