1、概述
本文主要介绍如何通过 VBS 操作 WINCC 在线数据表格控件。
1) 时间间隔最多至 1 分钟
2) 时间范围太长,数据加载可能会比较慢
3) 导出文件 EXCEL 没有置顶,导出后要切换到 EXCEL 程序。
本例采用将参数提前组态在控件内,运行中通过复选框来实现选择。也可完全使用脚本实现参数添加。
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 © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有