前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)

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

作者头像
剑指工控
发布于 2021-11-04 03:21:17
发布于 2021-11-04 03:21:17
8.9K00
代码可运行
举报
文章被收录于专栏:剑指工控剑指工控
运行总次数:0
代码可运行

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

画面打开

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 添加参数选择复选框

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 修改时间间隔脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub InputValue_OnPropertyChanged(ByVal Item, ByVal value) 
 Dim tbl1
 Set tbl1 = screenitems("tbl1")
 tbl1.TimeStepFactor=value
End Sub

图 12 修改时间系数

3.5

设定时间范围

图 13 添加时间控件

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

导出

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

通过脚本新增参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 新增参数运行效果

王琦

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 剑指工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档