OPC最初的由来是叫做"OLE for Process Control",即面向过程控制的OLE。但随着OPC技术的不断发展,原来名称的含义已经发生了很大的变化,OPC的维护者OPC Foundation认为现在的OPC就是一个名称而已(或者有人称OPC为:Openness, Productivity, and Collaboration),其中的一个原因是OPC已经不仅仅应用于过程控制了,在离散控制中也是有着非常广泛的应用。 OLE的全称是Object Linking and Embedded,它是微软的一种能够在文档中嵌入和链接到其他对象的技术。对于普通用户最常见的应用就是在Office系列软件中,例如在Word中可 以嵌入一个Visio对象,双击打开这个Visio对象可以直接在Word中编辑。我们比较熟知的OCX(OLE Control eXtention)是一种用来开发和使用用户接口的方法。例如在IE浏览器中嵌入的ActiveX Control就可以由OCX打包成CAB发布。OLE 1.0最早是在1990年发布的,是基于一种DDE(Dynamic Data Exchange)的微软技术。而后来的OLE 2.0是完全建立在COM(组件对象模型)的基础上了。从技术层面上讲,一个OLE对象就是实现了IOleObject接口的任何对象。 OPC的目的是:为多个数据源提供一种标准的访问机制,而无论数据源是在工厂设备上,还是在控制室的一个数据库上。 在OPC出现之前,各家硬件厂商往往提供设备驱动程序供用户使用,对于一个应用程序,如果它需要和多种设备打交道,那它就要装载所有这些设备的驱动程序。这种应用方式显然难于开发、扩展、维护、互操作。 [OPC 局限性] 虽然OPC解决了很多的问题,大大的促进了自动化设备、系统之间的互操作性,但随着技术和市场的不断发展,它的一些局限性也暴露出来了: 1. OPC只能基于Windows平台。因为它是基于COM/DCOM的。这一点估计得让很多Anti-Microsoft的人有意见了。有道是不能把所有鸡蛋放在一个篮子里。 2. 据说DCOM使用起来不是很方便。需要做一些防火墙的配置什么的。 3. 有时候用DCOM的效率不是很高。如果一台机器上的某个OPC应用需要与另一台机器上的多个OPC服务器交互,那可能就需要多个DCOM连接。现在比较流行的做法是OPC Tunnel(隧道),直接用TCP/IP在两台之间连接,而不是用DCOM。这样的话可以把多个OPC数据访问放在一条TCP/IP连接上,效率应该会有所提高。而且TCP/IP是防火墙友好的,通过端口号什么的很容易进行配置。 4. SOA和Web Services的浪潮来了。 [OPC 未来] OPC UA (Unified Architecture)是OPC的未来,也正在成为现实。 [OPC 数据访问] OPC规范分为好多个部分,其中最重要的几个是:OPC数据访问(Data Access),OPC警报和事件(Alarm & Event),OPC历史数据(Historian)。 OPC Data Access服务器由一些对象组成:服务器(server),组(group),和元素(item)。OPC服务器对象维护着服务器的信息和充当OPC组对象的容器。OPC组对象维护者它自己的信息,以及提供了用以包含和组织OPC元素的机制。 OPC元素代表着服务器内连接到数据源的链接。所有对OPC元素的访问都是通过OPC组对象进行的,OPC元素没有定义外部的接口。与每一个元素关联的是值(Value),质量(Quality)和时间戳(Time Stamp)。 [OPC警报和事件处理] 这些接口提供了将发生的事件和警报通知给OPC客户端的机制。他们也提供了允许OPC客户端决定可由一个OPC服务器支持的时间和条件的服务。 在OPC中,一个警报试一个异常条件,也就是说是一个条件的特殊情况。一个条件是OPC事件服务器的一个状态。 [OPC 对象和接口] 前面提到,所谓的OPC,其实就是COM/DCOM接口。为了能够访问数据,一个客户端应用应该知道: 1. OPC 数据访问服务器的名字(CoCreateInstance, CoCreateInstanceEx等需要使用.) 2. OPC数据访问服务器的机器名字(CoCreateInstanceEx 需要使用) 3. 供应商特定的OPC元素的定义(在服务器地址空间内的数据元素的名字)。 [参考] 1. http://en.wikipedia.org/wiki/OLE_for_process_control 2. http://www.opcfoundation.org/ 3. http://en.wikipedia.org/wiki/Dynamic_data_exchange 4. http://en.wikipedia.org/wiki/Object_Linking_and_Embedding 5. OPC Overview Version 1.0