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

EXCEL+VBAOPC技术在工厂报表系统中的应用

于宏强

【摘 要】目前成熟的DCS系统基本都有OPC通信功能,因此完全可以在原来的基

础上不必增加其他投入,而大大简化报表的填报工作.概述了OPCVBA的特点,

此基础上,介绍了通过EXCEL+VBA+OPC实现中小企业报表系统的系统构架、实

施步骤及主要程序代码等.

【期刊名称】《水泥工程》

【年(),期】2012(000)001

【总页数】6(P58-62,67)

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

【作 者】于宏强

【作者单位】重庆市铜梁中联水泥有限公司,重庆402560

【正文语种】

【中图分类】TQ172

现代的工业生产中,报表是反映现场生产情况的记录性文档,有着举足轻重的作用。

以前的纸质记录文档的存放问题在较老的企业中表现的较为突出,时至今日仍有不

少老企业采用此办法,甚至安排专人整理此类文件,浪费大量的人力、物力。目前

虽然大型企业采用的ERP可以解决此类问题但投资较大,资金不是很宽裕的中小

企业无法实现此要求。而很多DCS系统出于各种考虑,又无法直接输出EXCEL

式完全兼容的报表,很多输出后还是需要人工进行修改。绝大多数目前还是属于半

自动报表状态,比如一些关键的数据还是由专门的统计人员输入,再用EXCEL

式去自动计算。目前成熟的DCS系统基本都有OPC通信功能,因此笔者认为完

全可以在原来的基础上不必增加其他投入,而大大简化报表的填报工作,而且省去

了报表的存放问题。本文就此作探讨,供参考。

OPC是工业控制标准的数据访问机制,是基于微软公司的OLE/COM技术。OPC

采用C/S结构,提供了两套接口方案,分别为COM接口和OLE自动化接口(图

1)。COM接口效率高,通过它用户能够发挥OPC服务器的最佳性能,采用

C++语言的客户一般采用此方案;OLE自动化接口使解释性语言和宏语言访问

OPC服务器成为可能,采用VB(A)语言的用户一般采用此方案。本文介绍方案就

采用了OLE接口方式。

2为最常见的OPC系统架构示意图。通过此图可知,OPC通信中数据是可以

双向传送的,因此可以以客户端为桥梁实现不同厂家设备之间的通讯。

OPC标准规定了基本OPC对象有三个:OPCServerOPCGroupOPCItem

其中OPCServerOPCGroup接口如图3和图4

VBAVisual Basic For Application)是微软开发出来的应用程序共享一种通用

的自动化语言,是寄生于VB应用程序的版本。VBA是一种通用的宏语言,可被

所有的微软可编程应用软件所共享,即VBA可跨越多个应用软件,使各应用软件

产品具有高效、灵活且一致性的开发工具。

作为一种新一代的标准宏语言,VBA可以转换到特定的应用软件上去,程序设计

人员在编程和调试代码时所看到的是相同的用户界面;而且VBA与原应用软件的

宏语言相兼容,可保障用户在代码和工作上的投资。

VBA是基于Visual Basic发展而来的,是VB的一个子集;VBA不但继承了VB

的开发机制,而且具有相似的语言结构,其集成开发环境IDEIntergrated

Development Environment)也几乎相同。但VBAVB存在以下区别:①VB

设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL)自动化;

②VB具有自己的开发环境,而VBA必须寄生于已有的应用程序;③要运行VB

发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件

(*.EXE),而VBA开发的程序必须依赖于它的父应用程序,例如EXCEL

通过EXCEL+VBA+OPC实现中小企业的报表系统,可在现有资源的基础上实现

设备使用率的最大化。设计系统架构如图5所示。

1)首先,使用者需要对和服务器有关的参数做出设置,因此服务器需要设置界

面(见图6),以方便用户更改服务器地址。

2)因OPC服务器上的数据有多种,要根据实际需要进行数据的选择,因而需

要一个可视化的位号选择界面(见图7),配合位号的描述,供报表制作员进行灵

活选择并填充到EXCEL中。

3)生成的报表需要保存,因此需要对生成的报表进行自动命名并根据需要预先

设置好保存分类(文中采用的TXT文本格式,可节约硬盘空间)。保存的报表,

在需要查阅时可根据要求自动打开。

4)在报表记录中若存在问题可以实现暂停记录,在某段时间内不需要记录报表

时能断开与服务器的链接。

5)用户可以直观地从系统菜单(见图8)中完成需要的操作。

1)首先开发人员需要对VBA语法有基本了解,因为要用VBA进行一些代码编

写的工作,且对OPC的数据架构要有所了解;

2)计算机的配置只要能满足原来DCS系统运行的即可(目前我公司采用OPC

服务器本身作为生成报表的计算机),并在计算机上安装EXCEL+ VBA,确保

EXCEL环境下可以正常运行VBA脚本;

3)根据生产报表的实际需要,制作一个报表的EXCEL模板,并对模板的单元

格格式等进行设置和保存。

作为应用程序,首先要考虑用户使用时的易用性,使用界面越简单越好。因此,根

据需要我们首先需要设置OPC服务器相关的参数(比如服务器所在的计算机名称

或者IP地址),作为OPC架构中的Node;然后在相应的Node中选择相应的

Server作为OPCServerServer参数(这两个参数在连接OPC服务器时显得尤

为重要)。注意若Node为空,客户端认为Server所在机器是本机,Server永远

不能为空;即使在本机,也应有其独一的名称,因此要设置如图6所示的窗体。

根据以上条件,对设置的参数进行验证,一旦发现错误以消息的形式给予提示,防

止在连接服务器的过程中产生错误。如没有问题则根据已设置的参数正常连接服务

器,并且在连接的过程中若服务器端返回任何错误都需要在客户端进行提示,以便

采取措施对出现的问题进行处理。

服务器的名称填写完毕后开始进行相应的Server的获取,并以下拉列表的形式展

示,供用户选择。设置后的数据为后续服务器连接提供必要的参数校验以及相应的

参数复位,而且在实际的编程中所有的错误应当尽可能便于理解的形式给出提示,

这样才能做到用户界面的友好性。

在连接服务器后的报表记录过程中,也许有种种原因会导致服务器的关闭或者连接

的不正常,因此,作为报表记录程序,尽可能的做到重试连接。比如在第一次打开

报表时,应根据需要选择相应的位号作为报表记录的数据;开始记录报表时,都需

要对服务器的连接状态进行验证,一旦连接状态为断开或者其他异常情况,就必须

做出相应的措施。相应的代码如下:

程序到此,正常情况下基本完成了服务器的连接过程;若有任何异常产生,应当以

消息的形式给予提示,直至正常。连接后,若是第一次运行报表工具,开始因报表

记录需要的相应位号的选择,因此在图8中选择【选择位号】然后会出现图7

示界面。建议对该界面中的所有位号在节点内都进行排序,以方便查找及选择,否

则在报表的第一次制作过程中可能会浪费很多的时间。所有位号在节点内都进行排

序后,当对左边的位号进行双击选择,右边便可出现相应的位号以及对应位号的描

述(该描述对应的ID值仅限于浙大中控的er,其他OPC服务器

需要自行获取后根据实际情况进行设置)和当前的实时值,供用户进行确认;若用

户在选择过程中产生误操作导致不需要的位号出现在右边的列表中,只需在右边的

列表中双击对应的位号,就可移除不需要的位号,然后可重新进行选择。

此处的代码如下:

当位号选择结束后,可以选择窗体界面下方的按钮,对报表的表头范围进行设置。

需要注意的是:所选择的表头单元格数目应与选择的数据位号数目一致,否则程序

会提醒重新确定表头单元格数目,直至和要求的数据位号数目完全一致。至于每次

选择的位号数目则没有过多的强调,理论上一个也可以,上至无限,不同的企业可

以根据实际需要进行选择。下面为本段落的主要代码:

其中的Worksheets("FETCHDATA").Unprotect "WWWW"

Worksheets("FETCHDATA").Protect "WWWW”是考虑到报表记录的过程中有

可能被误操作而进行权限设置限制。如此,报表即可以正常生成,又阻止了不必要

的误操作,可靠性大大增强(但笔者认为,还可根据实际的使用情况,进行进一步

的权限限制)。

对相应单元格的设置,包括明文提示的描述、批注形式的位号和位号及描述,见图

9

报表每一步产生的数据必须保持原有的格式,因后续的报表生成需要用到前一步的

数据。如图9中的位号数据,就是下一步提取数据的依据,因此不可以随意更改

或者删除。

重复记录报表,在本实例中我们对报表的记录进行了限制。即一旦开始记录,则

RecordStartedTrue,此后便不允许再次记录报表,直到停止记录报表时

RecordStartedFalse

报表开始记录后,一旦完成一个记录周期,则应该进行报表的保存。为了方便数据

的存放以及考虑到存储空间的限制,采用了TXT文本文档来保存数据(读者可以

根据需要,将数据选择存放到某一种数据库),当报表记录时间到达某一限定时间

值,对报表中的数据进行保存。执行如下代码:

为了方便以后的报表查看,在图8中选择打开报表,根据需要选择相应的TXT

档,后报表会出现相应的报表记录,供使用者查看报表的数据以及数据的二次使用,

后续工作和EXCEL的使用方法都相同,相信使用者不会遇到什么特殊的困难。

这样,一个简单的报表系统就产生了。使用者可以根据需要,对报表记录的开始与

停止进行控制,也可以查看以前的报表,可以对以前的报表进行数据分析,起到对

后续生产的促进作用。

OPC在工业控制及周边领域的使用是相当普遍的,VBA也是目前作为普通用户来

说比较容易上手的语言,通过二者结合起来可开发的功能是可以无限拓展。本文的

主旨在于抛砖引玉,通过现有的简单资源的利用,实现减少日常工作中不必要的人

力、物力浪费,当然每个企业可以根据自身的需要对报表系统功能进行更多的优化

及设置。例如在联网的情况下,自动通过Email发送报表给相关人员,或者直接

将数据存储到数据库中,可以更方便的对报表数据进行分析,用以改良生产等,可

以发现企业的效益与报表中的数据之间的因果关系,为企业的决策者提供更为有用

的信息,逐步提高企业的效益。

参考资料

[1]OPC Data Access Custom Interface Standard Version

3.00S.2003-3-4.

[2]OPC Data Access Automation Specification Version

2.02S.1999-2-3.

[3]OPC Data Access Custom Interface Specification

Version 2.05AS.2002-7-28.