OPC数据模型

OPC逻辑对象模型包括3类对象:OPC server对象、OPC group对象、OPC item对象,每类对象都包括一系列接口。
OPC Server对象提供了一种访问数据的方法,它通过Iopcserver 、Opcbrowser、Ipersistfile向客户提供接口。主要功能为:1)创建和管理OPC Group对象;2)管理服务器内部的状态信息;3)将服务器的错误代码翻译成描述性语句;4)浏览OPC服务器内部的数据组织结构。从OPC Server对象的功能可以看出,OPC Server对象面向OPC服务器的技术细节,基本独立于实时数据源,可以统一实现,其中数据的组织结构与数据源属性与具体数据源有关,需要从用户处获取信息。OPC Server对象主要实现IUnknown和IOPC Server接口,OPC客户通过OPC服务器的接口与OPC对象进行通信.IOPCServer接口为OPC客户提供了方便有效操作OPC组的方法。


OPC Group对象的主要功能表现为:1)管理OPC Group对象的内部状态信息;2)创建和管理Items对象。3)OPC服务器内部的实时数据存取服务(同步与异步方式)。从OPC Group对象的功能可以看出,该对象面向OPC服务器中的数据存取信息,对实时数据源的依赖性很强,需要从用户数据源处获取信息。OPC Group提供了客户程序组织数据的手段.每个组中都可以定义一个或多个OPC Item。组有两种类型:公共组(Public)和局部组(local),公共组可以被多个客户共享,而局部组只能被一个客户使用。OPC组中有以下几个主要属性:1)Name :组的名字 2)Active:组的激活状态标志 3)Update Rate OPC:服务器向客户程序提交数据变化的刷新速率4)Percent Dead band:数据死区,即能引起数据变化的最小数值百分比。
OPC ITEM 是非COM对象,在OPC标准中用来描述实时数据,是客户端不可见的对象。代表了与服务器中的数据的连接,它并不是数据源,而仅仅是与数据源的连接。每个项都有以下主要属性:1) Active项的激活状态2)Value项的数值3)类型为VARIANT;4)Quality项的品质,5)代表数值的可信度,类型为SHORT;6)TimeStamp时间戳,代表数据的存取时间。 
 

OPC技术基础包含了两套接口:客户化接口(Custom Interface)和自动化接口(Automation Interface)。客户化接口是一个OPC服务器所必须实现的接口,它描述了OPC组件对象的接口和其中的方法,适合C++和PASCAL语言设计,并可实现最佳运行性能的客户应用程序。客户化接口没有项对象,它对项的操作都是通过包容此项的组对象进行的。自动化接口是可选接口,它提供的是一个自动配置和存取过程控制数据。只要是支持C0M对象的编程语言都能进行OPC客户端的开发。OPC提供了客户化接口和自动化接口,要进行客户端开发实际上就是对这两套接口的声明和调用。 自动化接口封装了C0M底层的许多实现,使开发者能比较轻松的进行数据访问。 

 

 

 

开发OPC客户端程序常用的方法包括:使用OPCNetAPI(OPCNetAPI.dll)、使用自动化接口(OPCDaAuto.dll)、使用自定义接口(OpcRcw.Ae.dll,OpcRcw.Batch.dll,OpcRcw.Dx.dll,OpcRcw.Comn.dll,OpcRcw.Da.dll,OpcRcw.Hda.dll)。本文所采用的OPC服务器为AB公司的RSLinx服务器,在线数据采集接口程序采用VB6.0开发,使用自动化接口方式,通过调用OPCDaAuto.dll动态连接库实现。

    在线数据采集接口程序主要应用OPC数据访问规范。OPC数据访问规范主要解决服务器端和客户端的实时数据存取问题,OPC数据访问规范中包含三类对象,即服务器(Server)群组(Group)和数据项目(Item),三类对象的组织结构像普通文件系统,其中服务器与分区、群组与文件夹、项目与文件一一对应,各个部分都有自己的属性,同时负责管理其底层分支。接口程序主要通过以下几个主要环节实现:

    ①搜索OPC服务器

    DimGetserver As OPCServer

    DimServers As Variant

    Set Getserver= New OPCServer

    Servers=Getserver.Get OPCServers

    If UBound( Serv ers) > 0Then

    For i= LBound(Servers) To UBound(Servers)

    ServerName.AddItemServers(i)

    Next i

    Set Getserver= Nothing

    ServerName.ListIndex=0

    End If

    ②连接OPC服务器。以上程序实现自动探索OPC服务器,搜索到OPC服务器后,在搜索到的OPC服务器列表中选取并连接OPC服务器:

    SetOPCMyserver = New OPCServer

    OPCMyserver.ConnectServerName.List(ServerName.ListIndex),

    ③创建一个OPC的群组(Group)

    Set OPCMygroups=OPCMyserver.OPCGroups

    Set OPCMy group Pouch=OPCMygroups.Add("Grouppouch1")OPCMygroupPouch.UpdateRate=1000

    ④添加一个OPC项目(Item),一个OPC的项目(Item)对应PLC的一个地址,如下列程序中的[pouch]F8:19表示pouch节点的F8:19地址。

    SetOPCMyitems = OPCMy group Pouch. OPCItems

    Client Handles(1)=819

    OPCItemIDs(1)="[pouch]F8:19"

    OPCMyitems.AddItems1,OPCItemIDs,ClientHandles,ItemServerHandles,Errors''',RequestedDataTypes,AccessPaths

    ⑤设置OPC群组(group)的通讯方式,若IsActive为True,则为OPC服务器主动发数据,否则只有客户端发送读取请求,才读数据。当需要采集的数据是累加数,如统计产品的箱数等数据时,可采取IsActive=False的读取数据方式。若需要采集的数据是不连续变化的数据,并需要全部保存,如每一箱产品的重量时,可以采取IsActive=True的读取方式。

OPCMygroupPouch.IsActive=False
    ⑥读取数据

    *当IsActive=False时,客户端主动读取数据,可由计时器触发,使系统实现定时采集数据。

    DimanItemAsOPCItem

    DimValues Pouch(900)AsLong

    For EachanItemInOPCMygroup Pouch. OPCItems

    anItem.Read OPCDevice

    Values Pouch(anItem.ClientHandle)=anItem.value

    Next anItem

    *当IsActive=True时,通过DataChange事件触发,即若PLC地址的数据发生改变时触发该事件实现数据采集。在VB中定义了OPC的群组(Group)后,将自动产生该事件过程。

    Private Sub OPCMygroup Pouch DataChange(ByValTransactionID As Long , ByVal NumItems As Long ,Client Handles ( ) As Long , ItemValues ( ) AsVariant ,Qualities( ) As Long,TimeStamps( ) As Date)

    Dim Client As String

    Dim value As String

    For i= 1 To NumItems

    Client= ClientHandles(i)

    value= ItemValues(i)

    Next i

    End Sub

 

 

*存在的不足

    在实际生产现场的应用中也发现,采用IsActive=True的方式读取现场数据的时候,当数据变化较快(1min100次左右时),会产生遗漏一部分数据的情况。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值