在WINCC中使用脚本和EXCEL实现实时数据报表
本文介绍了两种在WinCC中实现Excel实时数据报表的方法。第一种通过VBS脚本操作Excel模板,将WinCC变量数据写入预定义表格并自动保存;第二种通过Excel的OPC客户端功能直接读取WinCC数据。详细说明了VBS脚本的变量声明、数据写入逻辑(包括温度、压力等过程变量)和错误处理机制,以及OPC方式下的连接配置、数据订阅和实时刷新实现。
在WINCC中使用VBS脚本通过EXCEL实现实时数据报表
使用 VBS 脚本和 EXCEL 工具,同样可以生成需要的报表。一般的思路是:预先使用 excel 设计好报表的样式,然后在 WinCC 中使用 VBS 脚本把相应的数据写入事先定义好的 表格中。下面给出实现的方法。
右键点击按钮打开属性对话框,在事件页右键单击鼠标动作选择 VBS 动作。如下图:

在该事件中写入如下脚本:
‘定义变量
Dim objExcelApp,objExcelBook,objExcelSheet
Dim tagwendu,tagyali,tagliuliang,tagzhongliang,tagyuanliao,tagchengfen
Dim tagshijian,sheetname,username,zhushi
Dim qushi1,qushi2,qushi3,qushi4,qushi5,qushi6,qushix,tagstring,qushivalue
Dim x,y,z,i,j
Dim msg
'声明
Set tagwendu=HMIRuntime.Tags("wendu")
Set tagyali=HMIRuntime.Tags("yali")
Set tagliuliang=HMIRuntime.Tags("liuliang")
Set tagzhongliang=HMIRuntime.Tags("zhongliang")
Set tagyuanliao=HMIRuntime.Tags("yuanliao")
Set tagchengfen=HMIRuntime.Tags("chengfen")
Set username=HMIRuntime.Tags("@CurrentUserName")
Set zhushi=HMIRuntime.Tags("zhushi")
msg="ok"
sheetname="sheetdemo"
'判断是否打开模版,如果打开先关闭保存
On Error Resume Next
Dim ExcelApp,ExcelBook
Set ExcelApp = GetObject(,"Excel.Application")
If TypeName(ExcleApp) = "Application" Then
For Each ExcelBook In ExcelApp.WorkBooks
If ExcelBook.FullName = "D:\excelreport\winccvbsexcel.xls" Then
ExcelApp.ActiveWorkbook.Save
ExcelApp.Workbooks.Close
ExcelApp.Quit
Set ExcelApp= Nothing
Exit For
End If
Next
End If
'创建对象
Set objExcelApp =CreateObject("Excel.Application")
'open file
objExcelApp.Visible=True
objExcelApp.Workbooks.Open"D:\excelreport\winccvbsexcel.xls"
objExcelApp.Worksheets(sheetname).Activate
'清除模版数据
With objExcelApp.Worksheets(sheetname)
For i=5 To 25
For j=1 To 7
.cells(i,j)=Null
Next
Next
For i=26 To 26
For j=1 To 6
.cells(i,j)=Null
Next
Next
End With
'实时数据写入
tagshijian=Now
objExcelApp.Worksheets(sheetname).cells(2,2).value= tagshijian
username.Read
objExcelApp.Worksheets(sheetname).cells(2,7).value= username.Value
zhushi.Read
objExcelApp.Worksheets(sheetname).cells(27,7).value= zhushi.Value
objExcelApp.Worksheets(sheetname).cells(27,7).Font.Bold = TRUE
objExcelApp.Worksheets(sheetname).cells(27,7).Interior.ColorIndex = 25
objExcelApp.Worksheets(sheetname).cells(27,7).Font.ColorIndex = 7
objExcelApp.Worksheets(sheetname).cells(27,7).Font.size=18
tagstring="qushi"
For i=1 To 6
For j=30 To 35
qushix=tagstring&CStr(i)
Set qushivalue=HMIRuntime.Tags(qushix)
qushivalue.Read
objExcelApp.Worksheets(sheetname).cells(j,2).value=
qushivalue.Value
Next
Next
For i=5 To 25
With objExcelApp.Worksheets(sheetname)
.cells(i,1).value= tagshijian
tagwendu.Read
.cells(i,2).value= tagwendu.Value
tagyali.Read
.cells(i,3).value= tagyali.Value
tagliuliang.Read
.cells(i,4).value= tagliuliang.Value
tagzhongliang.Read
.cells(i,5).value= tagzhongliang.Value
tagyuanliao.Read
.cells(i,6).value= tagyuanliao.Value
tagchengfen.Read
.cells(i,7).value= tagchengfen.Value
End With
Next
MsgBox msg
'关闭保存
Dim patch,filename
filename=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))&CStr(Hour(Now))+C
Str(Minute(Now))&CStr(Second(Now))
patch= "d:\"&filename&"demo.xls"
objExcelApp.ActiveWorkbook.SaveAs patch
objExcelApp.Workbooks.Close
objExcelApp.Quit
Set objExcelApp= Nothing
输出结果如下图:

2、如何使用EXCEL访问WinCC中的实时数据实现报表
如果项目已经做好了,不想改动现有项目。那么可以使用 EXCEL 通过 OPC 方式访问 WinCC 项目的数据。预先定义好 EXCEL 表格样式,通过以下方式实现。
通过以下步骤打开 EXCEL 中的 VB 编辑器。

引用 WinCC 提供的 OPC 客户端 Control 控件: Siemens OPC DAAutomation 2.0( SOPCDAAuto.dll)。


创建起始画面

编程实现
‘变量声明
Option Explicit
Option Base 1
Const ServerName = "OPCServer.WinCC"
Dim WithEvents MyOPCServer As OPCServer
Dim WithEvents MyOPCGroup As OPCGroup
Dim MyOPCGroupColl As OPCGroups
Dim MyOPCItemColl As OPCItems
Dim MyOPCItems As OPCItems
Dim MyOPCItem As OPCItem
Dim ClientHandles(10) As Long
Dim ServerHandles() As Long
Dim Values(1) As Variant
Dim Errors() As Long
Dim ItemIDs(10) As String
Dim GroupName As String
Dim NodeName As String
Dim fxItemValue(10) As Variant
‘在按钮“启动 OPC 客户端”中添加以下代码
'---------------------------------------------------------------------
' 目的: 连接到 OPC_server,创建组并添加条目
'---------------------------------------------------------------------
' 发生错误则转到 ErrorHandler
'----------- 可以自由选择 ClientHandle 和 GroupName
Dim i As Integer
‘On Error GoTo HANDLEeRROR
For i = 1 To 7
ClientHandles(i) = i
' 先配置名柄索引 这将在读取 OPC 标签值时可要用到
Next i
' ClientHandles(1) = 1
GroupName = "MyGroup"
'----------- 从窗口对话框中取得 ItemID
NodeName = txtNoteName.Value
ItemIDs(1) = Range("j5").Value’从 EXCEL 表格 j5 中读取变量名称
ItemIDs(2) = Range("j6").Value
ItemIDs(3) = Range("j7").Value
ItemIDs(4) = Range("j8").Value
ItemIDs(5) = Range("j9").Value
ItemIDs(6) = Range("j10").Value
'----------- 取得 OPC-Server 实例
Set MyOPCServer = New OPCServer
MyOPCServer.Connect ServerName, NodeName
Set MyOPCGroupColl = MyOPCServer.OPCGroups
'----------- 设置用于添加组的默认活动状态
MyOPCGroupColl.DefaultGroupIsActive = True
'----------- 将我们的组添加到集合中
Set MyOPCGroup = MyOPCGroupColl.Add(GroupName)
Set MyOPCItemColl = MyOPCGroup.OPCItems
'----------- 调价一个条目,即返回 ServerHandle
MyOPCItemColl.AddItems 10, ItemIDs, ClientHandles, ServerHandles, Errors
'----------- 订阅的组收到异步通知
MyOPCGroup.IsSubscribed = True
Exit Sub
ErrorHandler:
MsgBox "Error: " & Err.Description, vbCritical, "ERROR"
‘在按钮“停止 OPC 客户端”中添加以下代码
'---------------------------------------------------------------------
' 目的: 释放对象并断开与服务器的连接
'---------------------------------------------------------------------
'----------- 释放组和服务器对象
MyOPCGroupColl.RemoveAll
'----------- 断开与服务器的连接并清除
MyOPCServer.Disconnect
Set MyOPCItemColl = Nothing
Set MyOPCGroup = Nothing
Set MyOPCGroupColl = Nothing
Set MyOPCServer = Nothing
‘创建实时刷新数据的函数
' 目的: 组中的数值、质量或时间标志改变时,该事件激活
'----------- 如果安装了 OPC-DA Automation 2.1,使用:
Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal
NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long,
TimeStamps() As Date)
'----------- 将数据表单元格的值设置为读取的数值
Dim ii As Integer
For ii = 1 To NumItems
fxItemValue(ClientHandles(ii)) = ItemValues(ii)
Next ii
Range("A5").Value = CStr(TimeStamps(1))
Range("B5").Value = CStr(fxItemValue(1))
' Range("C5").Value = Hex(Qualities(1))
Range("C5").Value = CStr(fxItemValue(2))
Range("D5").Value = CStr(fxItemValue(3))
Range("E5").Value = CStr(fxItemValue(4))
Range("F5").Value = CStr(fxItemValue(5))
Range("G5").Value = CStr(fxItemValue(6))
‘打印预览的代码
UserForm.Hide
Sheet1.PrintPreview
‘退出画面
UserForm.Hide
打开 EXCEL 激活宏。运行的界面如下,在服务器名称中输入相应的计算机节点名称,
点击“启动 OPC 客户端”。就能得到相应的数据
End Sub

至此完成了使用 EXCEL 通过 OPC 方式访问 WinCC 项目中数据的方法。
微信群:PLC自动化技术交流(加好友入群,请标注:姓名-单位)工控王工:188****7316***6826
S7-200 SMART 与 S7-1200 之间 TCP 通信— S7-200 SMART 作为服务器
如何在 WinCC Runtime Professional 中自动调整画面分辨率适应窗口的大小?
巨控协议转换网关GRM321GRM322GRM323应用场景
精智面板/二代精简PN面板如何使用Modbus TCP/IP 通信组态
WinCC Flexible Smart快速导入 Smart PLC变量
S7_1200配方功能快速入门
更多推荐


所有评论(0)