WinCC数据报表实现方法介绍 您所在的位置:网站首页 wincc保存数据 WinCC数据报表实现方法介绍

WinCC数据报表实现方法介绍

2023-09-22 00:56| 来源: 网络整理| 查看: 265

5.使用脚本和EXCEL实现实时数据报表

      论坛中很多人使用VBS和EXCEL实现报表功能。下面做了一个示例仅供参考:

5.1在WINCC中使用VBS脚本通过EXCEL实现实时数据报表

      使用VBS脚本和EXCEL工具,同样可以生成需要的报表。一般的思路是:预先使用excel设计好报表的样式,然后在WinCC中使用VBS脚本把相应的数据写入事先定义好的表格中。下面给出实现的方法。

      右键点击按钮打开属性对话框,在事件页右键单击鼠标动作选择VBS动作。如下图:

image058.jpg 图26. 动作定义

在该事件中写入如下脚本:

‘定义变量

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))+CStr(Minute(Now))&CStr(Second(Now))

patch= "d:\"&filename&"demo.xls"

objExcelApp.ActiveWorkbook.SaveAs patch

objExcelApp.Workbooks.Close

objExcelApp.Quit

Set objExcelApp= Nothing

输出结果如下图:

image060.jpg 

图27. 输出结果

5.2如何使用EXCEL访问WinCC中的实时数据实现报表

      如果项目已经做好了,不想改动现有项目。那么可以使用EXCEL通过OPC方式访问WinCC项目的数据。预先定义好EXCEL表格样式,通过以下方式实现。

      通过以下步骤打开EXCEL中的VB编辑器。

 image062.jpg

图28.打开编辑器

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

 image066.jpg

图29.打开引用界面

 image068.jpg

图30.对象引用

 

创建起始画面

image069.jpg 

图31.创建画面

编程实现

‘变量声明

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))

End Sub

‘打印预览的代码

UserForm.Hide

Sheet1.PrintPreview

‘退出画面

UserForm.Hide

打开EXCEL激活宏。运行的界面如下,在服务器名称中输入相应的计算机节点名称,点击“启动OPC客户端”。就能得到相应的数据。

 image072.jpg

图32.操作界面

至此完成了使用EXCEL通过OPC方式访问WinCC项目中数据的方法。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

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