OPC是一种标准与规范,OPC服务器的功能就是与下位机进行数据的交换,其中包含了大量的通讯程序和数据存贮程序。然后提供标准的OPC接口,供其它软件使用。程序标准化以后,其他的软件商只需开发面对服务器的程序即可,不用对不同的硬件设备开发不同的硬件驱动程序。减小了工作量,也方便了使用。下面是对OPC的标准描述,长了点,但是对了解OPC非常有帮助: OPC是OLE for Process Control的缩写,即把OLE应用于工业控制领域。OLE原意是对象链接和嵌入,随着OLE 2的发行,其范围已远远超出了这个概念。现在的OLE包容了许多新的特征,如统一数据传输、结构化存储和自动化,已经成为独立于计算机语言、操作系统甚至硬件平台的一种规范,是面向对象程序设计概念的进一步推广。OPC建立OLE规范之上,它为工业控制领域提供了一种标准的数据访问机制。 工业控制领域用到大量的现场设备,在OPC出现以前,软件开发商需要开发大量的驱动程序来连接这些设备。即使硬件供应商在硬件上做了一些小小改动,应用程序就可能需要重写;同时,由于不同设备甚至同一设备不同单元的驱动程序也有可能不同,软件开发商很难同时对这些设备进行访问以优化操作。硬件供应商也在尝试解决这个问题,然而由于不同客户有着不同的需要,同时也存在着不同的数据传输协议,因此也一直没有完整的解决方案。 自OPC提出以后,这个问题终于得到解决。OPC规范包括OPC服务器和OPC客户两个部分,其实质是在硬件供应商和软件开发商之间建立了一套完整的“规则”,只要遵循这套规则,数据交互对两者来说都是透明的,硬件供应商无需考虑应用程序的多种需求和传输协议,软件开发商也无需了解硬件的实质和操作过程。 OPC的优越性是显而易见的: l 硬件供应商只需提供一套符合OPC Server规范的程序组,无需考虑工程人员需求。 l 软件开发商无需重写大量的设备驱动程序。 l 工程人员在设备选型上有了更多的选择。 l OPC扩展了设备的概念。只要符合OPC服务器的规范,OPC客户都可与之进行数据交互,而无需了解设备究竟是PLC还是仪表,甚至在数据库系统上建立了OPC规范,OPC客户也可与之方便地实现数据交互。 OPC的适用范围 OPC设计者们最终目标是在工业领域建立一套数据传输规范,并为之制定了一系列的发展计划。现有的OPC规范涉及如下领域: 在线数据监测。实现了应用程序和工业控制设备之间高效、灵活的数据读写。 报警和事件处理。提供了OPC服务器发生异常时,以及OPC服务器设定事件到来时向OPC客户发送通知的一种机制。 历史数据访问。实现了读取、操作、编辑历史数据库的方法。 远程数据访问。借助Microsoft的DCOM技术,OPC实现了高性能的远程数据访问能力。 OPC近期将实现的功能还包括安全性、批处理、历史报警事件数据访问等。 OPC的设计者在设计OPC时遵循如下原则: 易于实现。 灵活满足多种客户需求。 强大的功能。 高效的操作。 OPC的基本概念 1. 服务器、组、数据项 OPC服务器由三类对象组成:服务器(Server)、组(Group)、数据项(Item)。服务器对象(Server)拥有服务器的所有信息,同时也是组对象(Group)的容器。组对象(Group)拥有本组的所有信息,同时包容并逻辑组织OPC数据项(Item)。 OPC组对象(Group)提供了客户组织数据的一种方法。客户可对之进行读写,还可设置客户端的数据更新速率。当服务器缓冲区内数据发生改变时,OPC将向客户发出通知,客户得到通知后再进行必要的处理,而无需浪费大量的时间进行查询。OPC规范定义了两种组对象:公共组和局部组(私有组)。公共组由多个客户共有,局部组只隶属于一个OPC客户。一般说来,客户和服务器的一对连接只需要定义一个组对象。 在每个组对象中,客户可以加入多个OPC数据项(Item)。如下图所示: OPC数据项是服务器端定义的对象,通常指向设备的一个寄存器单元。OPC客户对设备寄存器的操作都是通过其数据项来完成的,通过定义数据项,OPC规范尽可能的隐藏了设备的特殊信息,也使OPC服务器的通用性大大增强。OPC数据项并不提供对外接口,客户不能直接对之进行操作,所有操作都是通过组对象进行的。 客户操作数据项的一般步骤为: 通过服务器对象接口枚举服务器端定义的所有数据项,如果客户对服务器所定义的数据项非常熟悉,此步可以忽略。 将要操作的数据项加入客户定义的组对象中。 通过组对象对数据项进行读写等操作。 每个数据项的数据结构包括三个成员变量:即数据值、数据质量和时间戳。数据值是以VARIANT形式表示的。应当注意,数据项表示同数据源的连接而不等同于数据源,无论客户是否定义数据项,数据源都是客观存在的。可以把数据项看作数据源的地址,即数据源的引用,而不应看作数据源本身。 2. 报警(Alarm)和事件(Event) 报警和事件处理机制增强了OPC客户处理异常的能力。服务器在工作过程中可能出现异常,此时,OPC客户可通过报警和事件处理接口得到通知,并能通过该接口获得服务器的当前状态。 在很多场合,报警(Alarm)和事件(Event)的含义并不加以区分,两者也经常互换使用。从严格意义上讲,两者含义略有差别。 依据OPC规范,报警是一种异常状态,是OPC服务器或服务器的一个对象可能出现的所有状态中的一种特殊情况。例如,服务器上标记为FC101的一个单元可能有如下状态:高出警戒,严重高出警戒,正常,低于警戒,严重低于警戒。除了正常状态外,其他状态都视为报警状态。 事件则是一种可以检测到的出现的情况,这种情况或来自OPC客户,或来自OPC服务器,也可能来自OPC服务器所代表的设备,通常都有一定的物理意义。事件可能与服务器或服务器的一个对象的状态有关,也可能毫无关系。如高出警戒和正常状态的转换事件和服务器的某个对象的状态有关,而操作设备,改变系统配置以及出现系统错误等事件和对象状态就无任何关系。 3. OPC体系结构 OPC规范提供了两套接口方案,即COM接口和自动化。COM接口效率高,通过该接口,客户能够发挥OPC服务器的最佳性能,采用C++语言的客户一般采用COM接口方案;自动化接口使解释性语言和宏语言访问OPC服务器成为可能,采用VB语言的客户一般采用自动化接口。自动化接口使解释性语言和宏语言编写客户应用程序变得简单,然而自动化客户运行时需进行类型检查,这一点则大大牺牲了程序的运行速度。 OPC服务器必须实现COM接口,是否实现自动化接口则取决于供应商的主观意愿。 4. 服务器缓冲区数据和设备数据 OPC服务器本身就是一个可执行程序,该程序以设定的速率不断地同物理设备进行数据交互。服务器内有一个数据缓冲区,其中存有最新的数据值,数据质量戳和时间戳。时间戳表明服务器最近一次从设备读取数据的时间。服务器对设备寄存器的读取是不断进行的,时间戳也在不断更新。即使数据值和质量戳都没有发生变化,时间戳也会进行更新。客户既可从服务器缓冲区读取数据,也可直接从设备读取数据,从设备直接读取数据速度会慢一些,一般只有在故障诊断或极特殊的情况下才会采用。 5. 同步和异步 OPC客户和OPC服务器进行数据交互可以有两种不同方式,即同步方式和异步方式。同步方式实现较为简单,当客户数目较少而且同服务器交互的数据量也比较少的时候可以采用这种方式;异步方式实现较为复杂,需要在客户程序中实现服务器回调函数。然而当有大量客户和大量数据交互时,异步方式能提供高效的性能,尽量避免阻塞客户数据请求,并最大可能地节省CPU和网络资