2023年11月30日发(作者:)

基于OPC技术实现Wincc归档数据的Excel报表自动生成

任子强

【摘 要】本文首先介绍了生产现场遇到的报表需求及传统解决方案的局限性,进而

提出了利用OPC通讯实现通过微软Excel方式展示西门子归档变量的解决办法及

具体实施步骤,最后总结了该种报表的实际使用情况.

【期刊名称】《电子制作》

【年(),期】2015(000)022

【总页数】2(P22-23)

【关键词】OPC;EXCEL;报表;WinCC;VBA

【作 者】任子强

【作者单位】河北钢铁集团宣钢公司计控中心信息开发维护检修站 张家口宣化

075100

【正文语种】

目前在我单位自动化项目中,西门子S7系列PLC及其配套上位机组态软件WinCC

使用非常广泛。但是WinCC中的报表格式设计不够灵活方便,功能不能适用于所

有的工程项目需求,并且WinCC按使用变量点数销售,使用成本高。相比之下,

办公软件Office Excel却有着非常强大的制表功能。为了满足现场对生产报表的

个性化格式功能要求,我们决定采用Excel实现对WinCC归档数据进行报表开发。

2.1 OPC的概念

OPCOLE for Process Control,是在工业控制和生产自动化领域中使用的硬件

和软件的接口标准,它的制定是通过提供一套标准的OLE/COM接口完成的,采用

客户/服务器的模式。

2.2 OPC的意义

在传统的控制系统中,针对同一个硬件设备,每个应用软件都要根据自己的需求开

发一套专用的接口函数,这给用户和软件开发商带来了巨大的工作负担。系统集成

商和开发商急需一种高效、可靠、开放、可互操作的的设备驱动程序。在这种情况

下,OPC标准应运而生。

2.3 OPC接口与对象

OPC服务器支持两种类型的访问接口,它们分别为不同的编程语言环境提供访问

机制。这两种接口是:自动化接口(Automation interface)、自定义接口

Custom interface)。自动化接口是为基于脚本编程语言而定义的标准接口,

可以使用Visual BasicDelphiPower Builder等编程语言开发OPC服务器的

客户应用。而自定义接口是专门为C++等高级编程语言而制定的标准接口。

OPC服务器由三类对象组成:服务器(Server)、组(Group)和数据项

Item)。服务器对象拥有服务器的所有信息,同时也是组对象的容器,在一个

Server中可以有若干个组。

组对象拥有本组的所有信息,同时包容并逻辑组织OPC数据项。在一个组中,可

以有若干个项。数据项是读写数据的最小逻辑单位,OPC项则与现场设备中的模

块相对应,它包含数据项的值、品质和时间戳。

WinCCWINDOWS CONTROL CENTER)是西门子公司在自动化领域与微软公

司在共同开发的工控软件。它集成的OPC服务器使得过程数据可由其它应用程序

(OPC客户机)访问。WinCC在安装时提供了OPC的客户端控件∶Siemens OPC

DA Automation2.0,这个控件就是我们在VB中要用到的控件。

WinCCOPCserver,所有的WinCC内部和外部变量都可以提供给客户端使用,

WinCC项目中无需做任何设置,只需要启动相应工程便可自动运行。

VBAVisual Basic的一种宏语言,是由微软公司开发的应用程序共享一种通用

的自动化语言,是一种应用程式视觉化的Basic脚本。我们在Microsoft Excel

VBA脚本语言建立OPC客户端,并通过OPC接口读取WinCC中的数据。通

OPC接口,Microsoft Excel作为OPC客户端发起通讯并发送读请求到OPC

服务器,OPC服务器执行这些请求。

Excel中创建一个接口,在Visual Basic编辑器中的“工具->引用”中,选中

“Siemens

OPC DA Automation2.0”组 件,使Visual Basic能够识别OPC对象。

为了能够运行VBA宏脚本,首先需要调整安全性设置,将Excel的安全级别设置

为“低”,在“安全警告”中选择“启用宏”。

新建一个Excel空白表格,按照现场要求设计报表格式,之后添加“本班开

始”“本班结束(打印报表)”两个按钮,分别用来启动和断开OPC连接。

通过“工具->宏-VisualBasic编辑器”打开VBA编辑画面开始写连接代码(

例中共计5个料仓,以1个的部分代码为例)

建立opc连接:

ClientHandles(1) = 11 '8仓毛重

ClientHandles(6) = 16 '8仓皮重

ClientHandles(11) = 26 '8仓净重

ClientHandles(16) = 5 '8仓状态句柄GroupName = "MyGroup"

NodeName = "QT-2" '计算机名

ServerName = "" 'OPC的类型

Set MyOPCServer = New OpcServer'MyOPCServer分配内存

t ServerName, NodeName

Set MyOPCGroupColl = MyOPCServer. OPCGroups

tGroupIsActive = True

Set MyOPCGroup = MyOPCGroupColl. Add(GroupName)

Set MyOPCItemColl = MyOPCGroup. OPCItems

ms 20, ItemIDs, ClientHandles, ServerHandles,

Errors cribed = True断开opc连接∶

All nect

Set MyOPCItemColl = Nothing Set MyOPCGroup = Nothing Set

MyOPCGroupColl = Nothing Set MyOPCServer = Nothing

通过MyOPCGrouptDataChange事件来读取OPC标签(皮重和净重与毛重

原理相同,只举毛重的例子)。

For i = 1 To NumItems

vv = CStr(ClientHandles(i))

If 5 = vv Then '判断是否是8#仓改变

vvA = vv + zz1

TimeStamps(i) = DateAdd("h", 8, TimeStamps(i)) '转换北京时间

Range("D" + vvA).Value = CStr(TimeStamps(i)) '获取时间

For i1 = 1 To NumItems

vv1 = CStr(ClientHandles(i1))

If vv1 = 11 Then '判断是否是8#仓毛重改变Range("B" + vvA).Value =

CStr(ItemValues(i1)) '获取毛重

GoTo AA1'跳出循环End If Next i1 AA1∶

If i1 NumItems Then '相同数据的插入

vv2 = vvA - 1 Range("B" + vvA).Value = Range("B" +vv2).Value '获取上一行

数据

End If

End If

zz1 = zz1 + 1 '换行

'保存工作簿End If Next i

通过使用一些小的技巧便可以实现报表自动保存在指定路径、按钮防误触、数据自

动累加或者自动打印等功能。

岗位人员只需通过点击按钮便可开始本班5个料仓皮重、毛重、净重及完成时间

的自动记录,同时完成产量的仓累计和总累计,点击“结束本班”便可自动保存、

打印并弹出新的报表。经观察,报表数据稳定准确,通过使用OPC方式生成

WinCC报表,在降低投资成本的基础上极大地满足了现场个性化的报表需求,也

为相类似的场合提供了思路。

任子强(1980-),男,本科,自动化工程师,从事工业自动化及信息开发工作