背景简介OPC(OLE for Process Control,用于过程控制的OLE)是为过程控制专门设计的OLE 技术,由一些世界上技术占领先地位的自动化系统和硬件、软件公司与微软公司(Microsoft)合作而建立的,并且成立了专门的OPC 基金会来管理,OPC 基金会负责OPC 规范的制定和发布。
OPC 提出了一套统一的标准,采用典型的C/S 模式。
厂商可以开发一个高度优化的、可重用的OPC Server 访问底层的硬件,并将数据以OPC 接口方式提供给任何支持OPC规范的客户端软件,客户就可以按照统一的数据访问标准访问不同厂商的硬件产品。
(IEC61850/MODBUS/DNP) 。
OPC 技术本质是采用了Microsoft 的COM/DCOM(组件对象模型/分布式组件对象模型)技术,COM 主要是为了实现软件复用和互操作,并且为基于WINDOWS的程序提供了统一的、可扩充的、面向对象的通讯协议,DCOM 是COM技术在分布式计算领域的扩展,使COM 可以支持在局域网、广域网甚至Internet 上不同计算机上的对象之间的通讯。
OPC规范简介OPC 规范作为一个工业标准,是开发OPC 服务器与OPC 客户软件之间数据传输的规范,并已形成一个体系。
根据开发软件功能的不同,OPC 制定了以下领域单独规范:➢数据访问规范:定义了OPC 服务器中一组COM 对象及其接口,并规定了客户对服务器程序进行数据存取时需要遵循的标准。
借助Microsoft 的DCOM 技术,OPC 实现了高性能的远程数据访问能力。
➢报警和事件处理规范:该规范提供了一种通知机制,在指定事件或报警条件发生时,OPC 服务器能够主动通知客户程序。
➢历史数据访问规范:该规范提供一种通用历史数据引擎,可以向感兴趣的用户和客户程序提供数据汇总和数据分析等额外的信息。
➢安全性规范:该规范提供了一种专门的机制来保护OPC 服务器中的现场数据,防止未授权的操作误修改这些参数。
➢批量过程规范:该规范基于OPC 数据存取规范和ISA88 系列批量控制标准,提供了一种存取实时批量数据和设备信息的方法。
➢XML规范OPCDA205 规范(OPC Data Access Custom Interface Specification 2.05)是2002 年5 月OPC 基金会发布的OPCDA 自定义接口规范。
该规范制定了OPC 服务器和OPC 客户程序的COM 接口标准,通过制定标准的接口来实现多个厂家的OPC 服务器和OPC 客户程序开发。
OPC 客户程序和OPC 服务器一个OPC 客户可以连接一个或多个OPC 服务器,而多个OPC 客户也可以同时连接同一个OPC 服务器。
OPC 服务器的对象组成一个OPC 服务器由三个对象组成:服务器(Server),组(Group),项(Item)。
OPC 服务器对象用来提供关于服务器对象自身的相关信息,并且作为OPC 组对象的容器。
OPC 组对象用来提供关于组对象自身的相关信息,并提供组织和管理项的机制。
OPC 组对象提供了OPC 客户程序用来组织数据的一种方法。
例如一个组对象代表了一个PLC(可编程控制器)中的需要读写的寄存器组。
一个客户程序可以设置组对象的死区,刷新频率,需要组织的项等。
OPC规范定义了2 种组对象:公共组和私有组。
公共组由多个客户共享,局部组只隶属于一个OPC 客户。
全局组对所有连接在服务器的应用程序都有效,而私有组只能对建立它的CLIENT 有效。
在一个SERVER 中,可以有若干个组。
OPC 项代表了OPC 服务器到数据源的一个物理连接。
数据项是读写数据的最小逻辑单位。
一个OPC 项不能被OPC 客户程序直接访问,因此在OPC 规范中没有对应于项的COM 接口,所有与项的访问需要通过包含项的OPC 组对象来实现。
简单的讲,对于一个项而言,一个项可以是PLC 中的一个寄存器,也可以是PLC 中的一个寄存器的某一位。
在一个组对象中,客户可以加入多个OPC 数据项。
每个数据项包括3 个变量:值(Value)、品质(Quality)和时间戳(Time Stamp)。
数据值是以VARIANT形式表示的。
图1 Server/Group/Item 关系这里最需要注意的是项并不是数据源,项代表了到数据源的连接。
项应该被认为是到一个地址的数据,不同的组对象里可以拥有相同的项。
OPC 接口体系OPC 服务器与客户交换数据采用两套接口:OPC 定制接口(custom interface)与OPC 自动化接口(automation interface)。
OPC 客户程序通过接口与OPC 服务器通信,间接地对现场数据进行存取。
OPC服务器必须实现定制接口,也可以有选择地实现自动化接口。
一般来说,自动化接口能为VB 等高级语言客户程序提供极大地便利,但是,该接口数据传输效率较低;为了达到数据传送的最高性能,OPC 服务器使用C++开发,并只提供定制接口。
图2 OPC 接口OPC 服务器对象提供一些方法去读取或连接一些数据源。
OPC 客户程序连接到OPC 服务器对象,并通过标准接口与OPC 服务器联系。
OPC服务器对象提供接口(AddGroup)供OPC 客户程序创建组对象并将需要操作的项添加到组对象中,并且组对象可以被激活,也可以被赋予未激活状态。
对于OPC 客户程序而言,所有OPC 服务器和OPC 组对象可见的仅仅是COM 接口。
OPC服务器对象图1标准OPC 服务器对象及接口IUnknown接口是所有COM对象必须实现的最基本接口。
其它接口都派生于IUnknown接口。
IOPCCommon接口被应用于各种类型的服务器(例如:OPC报警与事件服务器),它们共享这个接口设计。
它提供设置和查询LocaleID(本地语言标识)的功能,对特定的客户/服务器交互有效,也就是说,一个客户的行为不会影响其它客户。
IOPCServer接口是OPC服务器对象的主要接口,它可完成组对象的动态创建、删除、枚举和获得当前状态等操作并对其进行管理。
服务器对象必须提供此接口。
IConnectionPointContainer接口主要提供了IOPCShutdown的出接口连接点访问支持。
IOPCShutdown出接口用于服务器主动与客户程序断开连接时对客户程序进行通知。
OPC服务器必须支持此接口。
它的实现与一般连接点对象的实现相同。
IOPCServerPublicGroups、IPersistFile和IOPCBrowseServerAddressSpace为可选接口,OPC服务器提供商可根据需要选择是否需要实现。
其中IOPCServerPublicGroups接口用于公共组进行管理。
IPersistFile接口允许用户装载和保存服务器的设置,这些设置包括服务器通信的波特率、现场设备的地址和名称等。
这样用户就可以知道服务器启动和配置的改变而不需要启动其它的程序。
IOPCBrowseServerAddressSpace允许用户浏览服务器中有用组(项)的数据,为用户提供OPC服务器各个组的定义列表。
OPC组对象图2 标准OPC 组对象及接口IOPCItemMgt接口及其成员函数的功能是允许OPC客户程序添加和删除项对象并可控制项对象的行为。
IOPCGroupStateMgt接口及其成员函数允许客户程序管理组对象的所有状态。
最基本的是改变组对象的更新率和活动状态。
IOPCPublicGroupStateMgt为可选接口,用于将私有组对象转换成公共组对象,因为当客户创建一个组对象时,被初始化为私有组对象。
,这个接口一般不用,在很多商业的OPC 服务器中,此接口都没有开发。
IOPCSyncIO接口允许客户对服务器执行同步读写操作。
操作将一直运行到完成才返回。
IOPCAsyncIO2接口允许客户对服务器执行异步读写操作,操作被“排队等候”,函数立即返回。
每项操作被看作一个“事务”,并被分配一个事务ID,当操作完成时,客户IOPCDataCallback 接口的回调将执行。
回调中的信息指出了事务ID和操作结果。
这两个是数据访问规范进行数据访问的最重要接口。
IConnectionPointContainer接口:组对象必须实现此接口,与服务器对象的此接口的唯一区别是管理的出接口不一样,组对象管理的出接口是IOPCDataCallback接口,可使客户与服务器连接并进行最有效的数据传送。
IOPCAsyncIO(old)接口是数据存取规范1.0必须实现的接口之一,按照程序兼容规则,符合规范2.02的服务器也应该实现规范1.0的必选接口。
IOPCASynCIO接口允许客户对服务器执行异步读写操作,其行为与IOPCAsyncI02类似,可参考IOPCAsyncI02,只是操作完成后结果是由IAdviseSink的回调返回给客户。
IDataobject(old)接口是OPC规范1.0需要服务器实现的接口,这允许使用OPC数据流格式创建客户与组对象之间的Advise连接,用于进行高效的数据交换。
可选接口IOPCAsyncIO 和IdataObject 接口用于异步数据传输现在其功能已经被IOPCAsyncIO2和IConnectionPointContainer 接口取代)。
项属性枚举略客户端开发步骤简述归结起来,VC++环境下访问OPC 服务器同步读写的步骤如下:1.初始化COM 库,CoInitialize。
2.通过OPC 服务器的ProgID 来查询CLISD,CLSIDFromProgID。
3.创建OPC 服务器对象,并查询对象的IID_IOPCServer 接口,CoCreateInstance。
4.添加一个group 对象,并查询IOPCItemMgt 接口,AddGroup。
5.为group 对象添加item,AddItems。
6.同步读,Read。
7.同步写,Write。
8.程序退出时或者停止服务器时,依次删除item(RemoveItems),删除group(RemoveGroup),释放资源。
名词解释➢OLE(Object Linking and Embedding,对象连接与嵌入)。
是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM)。
➢连接点(callback)。