企业简介

作为中国自动化领域的权威旗舰网络媒体,控制网创立于1999年7月,是中国举行的第十四届IFAC (International Federation of Automatic Control)大会的中国官方组织机构的唯一指定网站。控制网是中国自动化学会专家咨询工作 委员会(ECC)的秘书处常设之地。是北京自控在线文化传播有限公司开设的网站。

  • 公司类型:其他

联系方式
  • 控制网
  • 地址:北京市海淀区上地十街辉煌国际2号楼1504室
  • 邮编:100085
  • 电话:010-57116291 / 59813326
  • 传真:010-59813329
  • 网址:http://www.kongzhi.net
  • Email:mahongliang@kongzhi.net
  • 联系人:市场部
案例详细
标题OPC技术在监控软件开发中的应用
技术领域仪器仪表
行业
简介结合一个基于OPC技术的闸门监控系统的开发过程实例,本文主要介绍了有关OPC的基础知识以及OPC技术应用于上位机监控软件的独特优势,并给出了利用VB语言开发OPC客户端程序的一般方法和步骤。
内容



1 前言 

    目前国内闸门监控系统设计的方案基本上是PLC+上位机模式,而上位监控软件大多是购买现成的集成系统和商业组态软件来实现的。但在缺少资金的情况下要进行小型项目自动化建设或改造,就不得不考虑成本问题,因为组态软件是按点数卖钱的,定义一个变量就算一个点,价格昂贵。而采用高级语言结合OPC技术开发监控软件不仅可以节省大量的成本而且可以摆脱对设备驱动程序的依赖,尤其是在对老项目进行自动化改造时,这种优势更加明显。

    机遇以上考虑,笔者在参与安徽淮河流域某小型闸门自动化改造工程时,采用了Visual Basic 6.0开发环境,应用OPC自动化接口技术开发了OPC客户端程序(闸门监控系统的监控软件)。服务器采用凯谱华的 KEPServerEx.V4。她嵌入了工业市场上广泛范围(超过80多种支持100种以上设备型号的可下载驱动程序)的驱动程序和组件 ,更重要的是,这个服务器是完全免费的。

2 OPC知识简介

    2.1 OPC基本概念

    OPC是OLE for Process Control的缩写,即把OLE应用于工业控制领域。OPC建立在OLE规范之上,它为工业控制领域提供了一种标准的数据访问机制。

    OPC技术采用COM/DCOM技术的客户/服务器(Client/Server)模型,使OPC的通用性得到扩展。相应的OPC应用程序的开发就有了OPC客户端程序部分和OPC服务器程序部分的开发。一般来说,OPC服务器程序由硬件的生产厂商开发;而OPC客户端程序由用户开发。

    2.2 OPC结构原理

    2.2.1 OPC基本体系结构

    OPC规范提供了两套接口方案,即COM接口和自动化。COM接口效率高,通过该接口,客户能够发挥OPC服务器的最佳性能,采用C++语言的客户一般用COM接口方案;自动化接口使用解释性和宏语言访问OPC服务器,采用Visaul Basic语言的客户一般采用自动化接口。典型的OPC体系如下图所视:


图1 典型OPC体系机构图

    Figure1 OPC architecture

    2.2.2 OPC自动化服务器对象模型

    OPC自动化服务器对象的组织是层次结构,其对象模型如图5-1所示:



图2 OPC 自动化服务器对象模型


 


    Figure2  Automation Object Hierarchy
服务器对象(Server)拥有服务器的所有信息,同时也是组对象(Group)的容器。OPC组对象(Group)提供了OPC客户程序用来组织数据的一种方法。在每个组对象中,客户可以加入多个OPC数据项(Item)。OPC数据项(Item)是服务器端定义的对象,通常指向设备的一个寄存器单元。OPC客户对设备寄存器的操作都是通过其数据项来完成的,通过OPC数据项(Item),OPC规范尽可能地隐藏了设备的特殊信息,也使OPC服务器的通用性大大增强。OPC数据项(Item)并不提供对外接口,客户不能直接对之进行操作,所有的操作都是通过组对象进行的。每个OPC数据项(Item)的数据结构包括三个成员变量:即数据值、数据质量和时间戳。数据值是以Variant形式表示的。一个OPC服务器中只能有一个OPC浏览器对象,而且它是可选的。OPC浏览器对象是为了让客户程序可以浏览到OPC服务器的配置而设计的,它把OPC服务器上可用的东西显示给用户。

    2.2.3 OPC技术优势

    一个完整的基于OPC技术的监控系统由OPC客户端程序和OPC服务器程序组成,实际上实现了用户和设备供应商开发监控系统的分工。利用OPC技术实际上就等于客户端程序不用直接从硬件上读取数据,而是直接从OPC服务器上读取数据,设计OPC服务器程序的厂商已经完成了OPC服务器程序与硬件设备的数据存取。而且任意的OPC服务器的接口是标准统一的,这使得客户程序能用一种标准的方法去访问任意厂商的OPC服务器程序。每个用户就不必各自开发和硬件的通信程序,就可以直接读取OPC服务器的数据,提高了代码的重用性。也就是说OPC客户端程序一旦开发成功了,就可以应用到任意一个带有OPC服务器的监控系统中。OPC技术将监控系统的复杂性大大地简化后,软件开发的周期也大大缩短了,用户就可以不需要购买比较昂贵的商业组态软件而独立开发OPC客户端程序。

3 客户端监控程序开发

    3.1引用OPC自动化接口

    建立新工程或项目,在“工程”菜单下选择“引用”,如图5-3所示。只有引用OPCDAAuoto.DLL后,在程序中才能创建服务器对象,然后进行一系列的操作。



图3 打开引用对话框

     Figure3  Open Reference Dialog

    (2)在弹出的引用窗口里单击“浏览(B)…”按钮,弹出添加引用窗口,选择OPCDAAuoto.DLL文件。

    (3)在引用窗口里的OPC Automation 2.0前面打钩,按“确定”按钮。如图5-4所示:



图4 选择引用项目


    Figure4  Select Reference Item

    3.2程序开发

    3.2.1定义全局变量

    变量类型应该指定为对象型。这些对象最好在窗体的通用部分声明加上“Option Explicit”语句,表示模块里的所有变量都需要显式声明。由于OPC自动化接口的数组的索引要求必须从1开始,而系统默认是从0开始,为了避免错误最好在代码的最初加上“Option Base 1”语句。为了使对象可以处理事件,必须将myTestGrp和myServer的声明中加上“WithEvents”语句,表示声明的对象可以响应事件。

Option Explicit
Option Base 1
Dim WithEvents myServer As OPCServer
Dim myGroups As OPCGroups
Dim WithEvents myTestGrp As OPCGroup
Dim myItems As OPCItems
3.2.2连接OPC服务器和建立OPC组主要程序
连接子程序:
Sub Connect(strProgID As String, Optional strNode As String)
    If myServer Is Nothing Then
        ' 建立一个OPC服务器对象
        Set myServer = New OPCServer
    End If
If myServer.ServerState = OPCDisconnected Then
        ' 连接OPC服务器
        myServer.Connect strProgID, strNode
   End If
在Visual Basic中,通过执行一个Set操作实现调用其它接口的方法。
   If myGroups Is Nothing Then
        ' 建立一个OPC组集合
        Set myGroups = myServer.OPCGroups
    End If
    If myTestGrp Is Nothing Then
        ' 添加一个OPC组
        Set myTestGrp = myGroups.Add("Group")
    End If
End Sub
ServerState属性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六个,分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种OPC服务器当前的状态。如果OPC服务器没有连接,我们才执行myServer.Connect strProgID, strNode语句。strProgID就是ProgID,strNode就是用于远程通信的IP地址。
在窗口登陆时调用连接子程序,便可以连接到你需要的服务器。
Call Connect("KEPware.KEPServerEx.V4")

    3.2.3添加OPC标签

    对服务器进行访问前,必须先在OPC组里添加要访问的OPC标签。为了编程方便,在服务器端,将每个闸门的升、降、停止、开度、水位、流量 等监控量组态为TAGI(I=1,2…15)

Sub AddItem()
    Dim strItemIDs(15) As String
    Dim lClientHandles(15) As Long
    Dim lErrors() As Long
    Dim I As Integer
   
    myTestGrp.IsSubscribed = True     ' 启动组异步通知。
   
    Set myItems = myTestGrp.OPCItems     ' 建立OPC项集合
  
    For I = 1 To 15                   ' 生成从TAG1到TAG15的项标识符
        strItemIDs(I) = "Server.Group.TAG" & I
        lClientHandles(I) = I
    Next
  
    Call myItems.AddItems(15, strItemIDs, lClientHandles, lServerHandles, lErrors)
End Sub                                     ' 添加OPC项
3.2.4异步读取代码的实现
在定时器事件内进行执行AsyncRead子程序的读取代码
Sub AsyncRead()
 Dim lErrors() As Long
   If myTestGrp Is Nothing Then
        Exit Sub
    End If
    If myTestGrp.OPCItems.Count > 0 Then
        ' 异步读取
        lTransID_Rd = lTransID_Rd + 1
myTestGrp.AsyncRead 15, lServerHandles, lErrors, lTransID_Rd, lCancelID_Rd
   End If
End Sub
AsyncWrite子程序,完成异步写的操作。
Sub AsyncWrite(nIndex As Integer, ByRef vtItemValues() As Variant, _
    ByRef lErrors() As Long)
Dim lHandle(1) As Long
    If myTestGrp Is Nothing Then
        Exit Sub
    End If
    If myTestGrp.OPCItems.Count > 0 Then
        lHandle(1) = lServerHandles(nIndex)
        ' 异步写入
        lTransID_Wt = lTransID_Wt + 1
        myTestGrp.AsyncWrite 1, lHandle(), vtItemValues, _
                lErrors, lTransID_Wt, lCancelID_Wt
    End If
End Sub

    3.2.5断开OPC服务器

    连接着OPC服务器的OPC客户应用程序,在退出前必须断开和OPC服务器的连接。断开连接前要清除 项和组.

Sub Disconnect()
    Dim lErrors() As Long
    If Not myItems Is Nothing Then
        If myItems.Count > 0 Then
            myItems.Remove 15, lServerHandles, lErrors ' 清除OPC项
        End If
        Set myItems = Nothing
    End If   
    If Not myTestGrp Is Nothing Then
        myGroups.Remove "Group"' 清除OPC组
        Set myTestGrp = Nothing
    End If   
    If Not myGroups Is Nothing Then
        Set myGroups = Nothing
    End If   
    If Not myServer Is Nothing Then
        If myServer.ServerState <> OPCDisconnected Then
            myServer.Disconnect' 断开OPC服务器.
        End If
        Set myServer = Nothing
    End If
End Sub

4 结论

    OPC技术应用于工业控制领域,大大的突破了传统设备的概念,通过一个接口标准(规范)方便的将现场任何一个符合OPC规范的设备数据收集与处理,从而摆脱了传统上的编写驱动程序的重复劳动,使工程人员在设备选择上有了更大的自主性。

    随着组态软件的发展,监控系统开发越来越“傻瓜化”,只需要简单的连接就可以完成一个工程的基本组态,然而,一旦面临对组态软件中没有的设备时,就无能为力了。在项目改造过程中,这种情况尤为明显。
在面临大量诸如小型水利闸门监控系统一样的各种小型工业监控系统改造的情况下,应用OPC不仅可以大大的节约系统开发的时间,而且也能充分利用现有设备,节省开支。可以说,在小型工控系统改造中,OPC技术结合高级语言开发监控软件将具有很大的优势。

【参考文献】
【1】 OPC Foundation. Data Access Custom Interface Standard Specification 2.0[S],1998.10.14.
【2】 詹根基,郭厚焜.基于OPC的客户端监控程序的开发.自动化博览,2005,Vol.22增刊 (9):105-1
【3】 范逸之.Visual Basic 与分布监控系统——RS232/485串行通信,清华大学出版社,2002
【4】 马国华.监控组态软件及其应用,清华大学出版社,2002
【5】 潘爱民.COM原理与应用,清华大学出版社,2000