资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
精选优质文档-倾情为你奉上OPC及OPC服务器的设计与实现上海自动化仪表股份有限公司技术中心 张庆军摘要:简要介绍了OPC原理,OPC规范以及小型DCS控制系统OPC服务器的设计与实现。关键词:OPC COM DCOM DCS 一引言 OPC(OLE for process control)是一个工业标准。它是由一些世界上占领先地位的自动化系统和硬件、软件公司与微软合作而建立的、满足开放性的和互操作性的接口标准。OPC标准的建立基于微软的COM技术规范,并由OPC基金会这个国际组织管理。OPC为不同厂商的硬件设备、软件和系统定义了公共的接口,使得过程控制和工厂自动化中的不同系统、设备和软件之间能够相互连接、通信、操作。一般在控制系统中,包含过程画面的软件(如SCADA软件)在与现场设备通信的时候,常采用如下的方法:1,采用标准的通信协议,如profibus、modbus、HART、CAN总线等,因为监控管理软件与现场设备采用同样通信协议,所以监控管理软件不需要对现场设备的驱动程序。2,对于没有采用标准的通信协议的设备,监控管理软件需要在设备制造商的配合下为这些设备开发驱动程序。这种方式虽然执行效率比较高,但兼容性差,软件供应者必须对每一种接入的设备开发驱动程序,设备制造商也必须提供设备的通信协议。组态监控软件现场设备标准通信协议设备驱动程序标准通信协议设备驱动程序OPC服务器OPC接口3,通过OPC 这个开放协议与过程控制或其他系统软件进行通信,这种方式的优点在于:不管硬件设备是否使用标准的通讯协议,制造商只需提供一套 OPC 服务器,即可支持大部分的监控等软件, 也不需要将自己的通信协议等细节提供给软件商。控制系统中往往混合有多种协议,有符合不同的现场总线标准的设备,也有厂商使用自定义通信协议的设备,因而开放性很差。提供过程画面的软件在配置这样的系统的时候会非常困难,用户往往只能选择单一设备制造商提供的产品,但如果每个设备的通信协议都配置了OPC服务器,由OPC服务器封装这些协议,并通过标准的接口给提供过程画面的软件,这样提供过程画面的软件就可以通过标准的OPC接口实现与设备的互连,对于软件来说就不需要实现诸多的通信协议,对于用户来说就可以提高选择产品的自由度。由上海自动化仪表股份有限公司技术中心开发的新一代全数字化小型DCS控制系统,在数据访问中使用了OPC技术,并开发了OPC服务器,使得该控制系统向各种管理系统开放。二 COM/DCOM与 OPCCOM(Component Object Model,组件对象模型),是一种独立于语言的组件规范,并提供了实现交互的环境,可以生成二进制级别的可重用组件。实际上我们平时常见的OLE(object linking and embedding,对象链接和嵌入)技术和ActiveX技术都是以COM规范为基础的,用于过程控制中的OPC技术也是以COM规范为基础的。在OLE最初的版本OLE 1中,组件程序和客户程序之间的通信没有采用COM接口技术,而是采用了DDE(dynamic data exchange,动态数据交换)技术,DDE是建立在windows消息机制的基础上的,用于进程间的数据交换技术。由于DDE技术存在效率低、稳定性差、使用不便等缺点,在OLE技术发展到OLE 2的时候,已经成为使用COM架构的软件系统。COM组件通过接口继承的方式分离了接口和实现,客户只能通过接口来访问COM组件的实现,实现的细节对于客户来说是不可见的。COM组件的接口是用128位的全球唯一标识符号(GUID,Globally Unique Identifier)标识的。在OPC基金会提供的IDL文件中,定义了一系列由GUID标识的接口以及接口方法的原型。这样,现场设备的硬件厂家实现的OPC服务器组件,是基于OPC基金会定义的接口,并在组件中实现接口的方法;提供过程画面的软件厂商作为客户端,在访问现场设备的时候也是基于OPC基金会定义的接口,并通过OPC服务器对象实现的方法完成数据通信。COM组件还分为进程内组件和进程外组件,如果以DLL(动态连接库)的方式实现组件程序,就称为进程内组件,进程内组件程序运行在客户程序的地址空间里,因此效率比较高,但其严重的错误会引起客户进程的崩溃。以EXE方式实现的组件程序是进程外组件,进程外组件程序和客户程序运行在各自独立的地址空间,稳定性较好。对于进程外组件,客户程序调用的是代理对象,通过LPC/RPC与进程外组件的存根代码进行通信。可以通过定义COM接口的IDL文件来实现代理程序和存根程序。OPC规范也考虑了跨进程调用的问题,提供了用于跨进程调用的Proxy(代理) DLL和Stub(存根)DLL,实现了对OPC客户程序的进程透明性。DCOM(Distributed COM,分布式的COM), 是COM的扩展,它可以支持不同计算机上的组件对象和客户进行通信,这样组件对象可以分布在局域网、广域网或者互联网上。通过DCOM架构,COM组件和客户程序不需要考虑低层的网络协议等问题,就可以实现多层次的分布式应用系统。OPC服务器组件通过DCOM的配置也可以很方便的实现分布式的应用,实现对OPC客户程序的位置透明性。三 OPC规范简介OPC定义了一系列规范来满足多种系统和设备之间数据通信的需求。主要包括OPC数据存取规范、OPC报警与事件处理规范、OPC历史数据处理规范等。OPC规范只是定义了COM接口,OPC服务器提供者必须去实现这些接口和方法。 OPC服务器通过OPC规范定义了OPC COM组件的接口实现对数据源进行存取(读/写)或通信的方法等,数据源可以是现场的I/O设备,也可以是其它的应用程序。通过OPC服务器中COM组件提供的接口,OPC客户程序可以通过一个或多个厂商提供的OPC服务器来对数据源进行存取(读/写)或通信。OPC规范包含了自动化接口(Automation Interface)和OPC定制接口(Custom Interface)两套接口的定义。自动化接口主要为一些用脚本语言编写的客户程序设计,C+编写的客户程序在访问定制接口的时候,可以获得较高的性能,OPC服务器必须实现定制接口。OPC数据存取规范主要定义的是OPC DA Server(数据存取服务器)。OPC DA Server主要包含服务器对象(Server Object)、组对象(Group Object)和项对象(Item Object)。OPC服务器对象负责维护着服务器的信息,同时也是OPC组对象的包容器,如可以完成添加删除OPC Group等功能。OPC组对象维护着OPC Group的信息并提供包容OPC项的机制,同时管理OPC项对象。OPC项对象代表了与服务器里数据源的连接,例如:在DCS系统中定义的可以让OPC客户程序访问的标签(TAG)。在OPC项中没有定义外部接口, OPC组提供了对OPC项的操作。每个OPC项包含值(Value)、品质(Quality)和时间标签(Time Stamp,表示获得数据的时间)。OPC报警与事件处理规范定义了OPC服务器发生异常时或OPC服务器设定事件到来时向OPC客户程序发送通知的一种机制。OPC历史数据处理规范的实现,可以使OPC客户端能够存取OPC服务器中历史数据等。OPC客户端 OPC ServerOPC接口OPC GroupOPC ItemOPC ItemOPC ItemOPC GroupOPC ItemOPC Item驱动程序PLC,DCS,分布式IO等工厂网络系统工厂数据库 四 OPC服务器的设计和实现我们开发的小型DCS控制系统使用了OPC服务器后,实现了对主流的监控软件(一般都有OPC接口)的兼容,监控软件等OPC客户程序可以很方便的访问和设置DCS中的数据,下图是简化的系统的连接图。OPC服务器主控制器管理网络OPC客户端OPC客户端主控制器控制网络OPC服务器需要实现的主要功能就是根据控制系统的组态信息,实现OPC服务器对象,组对象等,并通过OPC驱动程序实现与DCS系统中主控制器的通信,获得现场数据或设置现场数据项等。OPC服务器软件主要分为OPC服务器对象模块、服务器界面模块和OPC驱动程序模块,三个模块通过同一块内存数据区来共享数据,通过线程的同步和互斥等技术的使用,可以解决共享数据区的保护问题。各个模块的主要功能如下:1 服务器界面模块服务器界面程序主要完成根据组态信息,完成OPC Group对象和OPC Item对象的添加,并采用树形结构浏览查看的内存数据区中的数据项(TAG),如数字量信号输入卡的输入信号等。2 OPC驱动程序模块OPC驱动程序主要是通过TCP/IP协议实现了与多台主控制器的通信,来实现OPC服务器的驱动部分(通过对驱动程序的替换,可以实现其它产品的OPC服务器)。3 OPC服务器对象模块OPC服务器对象模块是OPC服务器程序与OPC客户程序的交互部分,主要依据的是OPC基金会的数据存取规范来实现。一般需要实现OPCServer, OPCGroup, EnumOPCItemAttributes 等对象,其中OPCServer对象需要实现IOPCCommon, IOPCServer, IOPCItemProperties, IConnectionPointContainer等接口的方法; OPCGroup对象需要实现IOPCSyncIO, IOPCGroupStateMgt, IOPCAsyncIO2, IOPCItemMgt, IConnectionPointContainer 等接口的方法; EnumOPCItemAttributes需要实现IEnumOPCItemAttributes接口的方法。接口方法的原型参照OPCDa.idl中的定义。在对OPC服务器和客户端的开发中使用IDE的是Microsoft Visual C+,其中OPCServer对象,OPCGroup对象等COM组件的定义和实现运用了微软的ATL(Active Template Library活动模板库)技术。 下面的一段代码示范了OPC客户端对OPC服务器IOPCServer接口GetStatus()方法的访问(客户端可以通过GetStatus方法获得服务器开始工作的时间、更新、名称等信息)。OPC客户程序:CoInitialize(NULL);/初始化COM环境/略IOPCServer*pSvr=NULL;/定义IOPCServer接口指针HRESULT hr = CoCreateInstance(CLSID_OPCServer, NULL, CLSCTX_ALL, IID_IOPCServer, (void *)&pSvr);/注:OPCDa2.0可以通过IOPCServerList调用OPCServerList获得OPCServer的CLSIDOPCSERVERSTATUS* pServerStatus;/定义OPCServer状态的结构pSvr-GetStatus(&pServerStatus);/获得OPCServer返回的状态pSvr-Release();/释放IOPCServer接口指针CoUninitialize();/结束COM环境OPC服务器
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号