OPC 的开发背景和历史
OPC(OLE for Process Control),是为了不同供应厂商的设备和应用程序之间的软件接口标准化,使其间的数据交换更加简单化的目的而提出的。 作为结果,从而可以向用户提供不依靠于特定开发语言和开发环境的可以自由组合使用的过程控制软件组件产品。
OPC 是作为工业标准定义的特殊的 COM 接口。
OPC 和 DDE 的比较
DDE 是基于 Windows 的信息(Message)传递而建立的技术,所以 DDE 技术存在以下问题:
① 数据的传送速度较慢
② 没有安全性管理机制
③ 开发困难
④ 功能缺乏柔软性
⑤ 可靠性也难以令人满意
OPC 技术的导入,和 DDE 技术相比,在以下方面显示出它的优越性:
① 高速的数据传送性能
② 基于分布式 COM 的安全性管理机制
③ 开发成本的降低
④ 实现具有高度柔软性功能的系统
⑤ 实现具有高可靠性的系统
OPC 适用于哪些地方
OPC 是为了连接数据提供源(OPC 服务器)和数据的使用者(OPC 应用程序)之间的软件接口标准。
随控制系统构成的不同,作为数据提供源的 OPC 服务器即可以是和 OPC 应用程序在同一台计算机上运行的本地 OPC 服务器,也可以是在另外的计算机上运行的远程 OPC 服务器。
OPC 的主要功能
OPC的数据访问方法主要有同步访问和异步访问两种。
同步访问:OPC服务器把按照OPC应用程序的要求得到的数据访问结果作为方法的参数返回给OPC应用程序, OPC应用程序在结果被返回为止一直必须处于等待状态。
异步访问:OPC服务器接到OPC应用程序的要求后,几乎立即将方法返回。 OPC应用程序随后可以进行其他处理。 当OPC服务器完成数据访问时,触发OPC应用程序的异步访问完成事件,将数据访问结果传送给OPC应用程序。 OPC应用程序在事件处理程序中接受从OPC服务器传送来的数据。
订阅方式数据采集( Subscription):并不需要OPC应用程序向OPC服务器要求,就可以自动接到从OPC服务器送来的变化通知。服务器按一定的更新周期( UpdateRate)更新OPC服务器的数据缓冲器的数值时,如果发现数值有变化时,就会以数据变化事件( DataChange)通知OPC应用程序。 如果OPC服务器支持不敏感带( DeadBand),而且OPC标签的数据类型是模拟量的情况,只有现在值与前次值的差的绝对值超过一定限度时,才更新缓冲器数据并通知OPC应用程序。 由此可以无视模拟值的微小变化,从而减轻OPC服务器和OPC应用程序的负荷。
OPC的对象
OPC应用程序应该首先生成OPC服务器支持的OPC对象,然后就可以使用OPC对象支持的属性和方法,对其进行简单的操作。
OPC对象的分层结构
一个OPC服务器对象( OPCServer)具有一个作为子对象的OPC组集合对象( OPCGroups)。 在这个OPC组集合对象里可以添加多个的OPC组对象( OPCGroup)。 各个OPC组对象具有一个作为子对象的OPC标签集合对象( OPCItems)。在这个OPC标签集合对象里可以添加多个的OPC标签对象 ( OPCItem)。
此外,作为选用功能,OPC服务器对象还可以包含一个OPC浏览器对象 ( OPCBrowser)。
OPC组还提供组内任何OPC标签的数值变化时向OPC应用程序通知的数据变化事件。
OPC标签
OPC对象里最基本的对象是OPC标签。OPC标签是OPC服务器可认识的数据定义,通常相当于位号的单一变量(调整点或过程数据),并和数据提供源(控制设备)相连接。 OPC标签具有多个属性,但是其中最重要的属性是OPC标签标识符。 项标识符是在控制系统中可识别OPC标签的字符串,例如,
DCS的例: "TIC100.PV"
PLC的例: "COM1.STATION:42.REG:40001;0,4095,-100,+1234.0"
服务器句柄
一旦OPC组或者OPC标签在OPC服务器里添加成功, OPC服务器将赋予被添加的各个OPC组或者各个OPC标签一个独特的标识符。 这个标识符叫做服务器句柄。 被赋予的服务器句柄将返回给OPC应用程序。
OPC应用程序应该将由OPC服务器返回的OPC组或者OPC标签的服务器句柄好好保管。 因为随后对添加的OPC组或者OPC标签进行操作时,只有使用这些服务器句柄才可以唯一地识别特定的OPC组或者OPC标签。
OPC服务器对象
因为OPC服务器对象OPCServer提供连接数据源( OPC定值接口服务器)以及数据访问(读取· 写入)的方法,所以在建立OPC组和OPC标签以前必须建立OPC服务器对象,然后使用OPC数据访问自动化接口的“ Connect”方法和数据源连接。
以下介绍一些经常使用的OPC服务器的属性和方法:
属性ServerState:只读的属性, 返回服务器的运行状态(OPCServerStatus)。
属性OPCGroups:只读的属性, OPC组的集合。这是OPCServer的默认属性。
方法Connect:连接OPC数据访问服务器。
属性ProgID: 程序标识符是可以识别特定OPC服务器的注册字符串。
属性Node: 选用参数,是利用分布式COM进行远程连接的计算机UNC名称( 例如,"Server") 或者DNS名称( 例如, www.vendor.com或者"180.151.19.75") 。被省略时,将连接本地OPC服务器。
方法Disconnect:断开和OPC服务器的连接。 OPC应用程序在断开和OPC服务器的连接前,建议显式的清除所有添加的OPC组和OPC标签的程序,虽然调用本方法也可以黯然地清除所有的OPC组,并释放所有的引用。
OPC组集合对象
OPC组集合对象OPCGroups是OPC组的集合,这个对象的用途是添加,清除和管理OPC组。
方法Add:在OPC组集合中建立新的OPC组。
方法Remove:清除指定的OPC组。
方法RemoveAll:为服务器关机作准备,清除所有的OPC组和OPC标签。
OPC组对象
OPC组对象OPCGroup提供满足OPC应用程序要求的数据访问手段。
属性IsActive:可设置的属性, 用以控制OPC组的活动状态。 只有处于活动状态的OPC组才进行定期的数据更新。
属性IsSubscribed:可设置的属性, 用以控制OPC组的订阅状态。 进行订阅的OPC组可以自动收到从服务器送来的数据变化通知。
属性ServerHandle:只读的属性, 服务器句柄是由OPC服务器指定的, 用于识别指定的OPC组的一个独特的长整型数。 OPC应用程序可以利用这个服务器句柄,向OPC服务器要求对指定的OPC组进行操作,例如清除指定的OPC组。
属性UpdateRate:可设置的属性, 以毫秒为单位的数据更新周期。
属性OPCItems:只读的OPC组的默认属性, OPC标签集合对象。
方法SyncRead:同步读取OPC组内单个或者多个OPC标签的数据值,质量标志和采样时间。
方法SyncWrite:同步写入OPC组内单个或者多个OPC标签的数据值。 因为数据被直接同步地写入到设备中,所以只有等数据被设备接受或拒绝后,这个方法的调用才会结束。
方法AsyncRead:异步读取OPC组内单个或者多个OPC标签的数据值,质量标志和采样时间。利用异步数据访问时, 必须将OPC组声明为可响应事件的对象变量( Dim WithEvents xxx As OPCGroup) 。 读取结果是由AsyncReadComplete事件返回。请注意因为本方法的数据是直接从设备中读取的,所以并不受到OPC组的活动状态的影响。
方法AsyncWrite:异步写入OPC组内单个或者多个OPC标签的数据值。 利用异步数据访问时,必须将OPC组声明为可响应事件的对象变量( Dim WithEvents xxx AsOPCGroup)。 写入结果是由AsyncWriteComplete事件返回。
事件DataChange:在OPC组内任何OPC标签的数据值或者质量标志变化时触发的事件。 但不会在下次OPC组的更新周期( UpDateRate)以前发生。注意订阅方式数据采集( Subscription)和异步的数据刷新( AsyncRefresh)都可以触发这个事件,但是不同的是由订阅方式数据采集触发的事件返回的事务标识符为零( TransactionID = 0),而由异步数据刷新触发的事件返回的事务标识符非零( TransactionID ? 0)。
事件AsyncReadComplete:在异步读取( AsyncRead) 完成时发生的事件。
事件AsyncWriteComplete:在异步写入( AsyncWrite)完成时发生的事件。
OPC标签集合对象
OPC标签集合对象OPCItems具有OPC标签的默认属性, 当添加新的OPC标签时,下述的DefaltXXX属性将是新添加的OPC标签的默认属性值。
属性Count:只读的属性,返回OPC标签集合中的项数。
方法AddItems:在OPC标签集合中添加新的OPC标签。 其初期属性取决与OPC标签集合的默认值。
方法Remove:清除指定的OPC标签。
OPC标签对象
OPC标签对象OPCItem表示与OPC服务器内某个数据的连接。 各个OPC标签由数据值,质量标志以及采样时间构成。
OPC浏览器对象
OPC浏览器对象OPCBrowser是OPC服务器名称空间的枝和叶(项)的集合。 浏览功能是选用功能, OPC服务器不支持浏览的时候,即使执行CreateBrowser也不生成这个对象。