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的概念
OPC(OLE for Process Control),是在工业控制和生产自动化领域中使用的硬件
和软件的接口标准,它的制定是通过提供一套标准的OLE/COM接口完成的,采用
客户/服务器的模式。
2.2 OPC的意义
在传统的控制系统中,针对同一个硬件设备,每个应用软件都要根据自己的需求开
发一套专用的接口函数,这给用户和软件开发商带来了巨大的工作负担。系统集成
商和开发商急需一种高效、可靠、开放、可互操作的的设备驱动程序。在这种情况
下,OPC标准应运而生。
2.3 OPC接口与对象
OPC服务器支持两种类型的访问接口,它们分别为不同的编程语言环境提供访问
机制。这两种接口是:自动化接口(Automation interface)、自定义接口
(Custom interface)。自动化接口是为基于脚本编程语言而定义的标准接口,
可以使用Visual Basic、Delphi、Power Builder等编程语言开发OPC服务器的
客户应用。而自定义接口是专门为C++等高级编程语言而制定的标准接口。
OPC服务器由三类对象组成:服务器(Server)、组(Group)和数据项
(Item)。服务器对象拥有服务器的所有信息,同时也是组对象的容器,在一个
Server中可以有若干个组。
组对象拥有本组的所有信息,同时包容并逻辑组织OPC数据项。在一个组中,可
以有若干个项。数据项是读写数据的最小逻辑单位,OPC项则与现场设备中的模
块相对应,它包含数据项的值、品质和时间戳。
WinCC(WINDOWS CONTROL CENTER)是西门子公司在自动化领域与微软公
司在共同开发的工控软件。它集成的OPC服务器使得过程数据可由其它应用程序
(OPC客户机)访问。WinCC在安装时提供了OPC的客户端控件∶Siemens OPC
DA Automation2.0,这个控件就是我们在VB中要用到的控件。
WinCC做OPCserver,所有的WinCC内部和外部变量都可以提供给客户端使用,
WinCC项目中无需做任何设置,只需要启动相应工程便可自动运行。
VBA是Visual 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
通过MyOPCGroupt的DataChange事件来读取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-),男,本科,自动化工程师,从事工业自动化及信息开发工作


发布评论