基于Qt平台的OPC服务器的开发及仿真应用
黎邦腾;梁薇;马平
【摘 要】OPC (OLE for Process Control) technology has been widely used in the field of automation since it was put forward in 1996.It defines a standard interface for the interaction between industrial control software and hardware,which makes the communication very convenient.For this feature,a scheme of OPC server as "transfer station" is proposed,that is,two or more applications that support OPC client functionality consider the OPC server as a "transfer station" to implement mutual access and control between programs.The development of OPC server uses the way of OPC development toolkit,and it is implemented on Qt platform.It makes full use of the advantages of Qt in the interface design,abandoning the traditional MFC platform development mode.Finally,in order to demonstrate the function of two clients completing the information interaction through the "transfer station",we use matlab to build a two simulink project as an OPC client for simulation testing.The test results are consistent with the expected results,which v
erify the feasibility of the program.%OPC (OLE for Process Control)技术自1996年被提出,就迅速在自动化领域得到了广泛的应用;它为工业控制软件与硬件之间的交互定义了一个标准的接口,使得工业软件及硬件之间的通讯变得非常便利;针对这个特点,提出了一种将OPC服务器作为“中转站”的仿真方案,即两个或多个支持OPC客户端功能的应用程序将OPC服务器作为“中转站”,实现程序间的相互访问与控制;采用OPC开发工具包方式开发OPC服务器,并且在Qt平台实现;这摒弃了传统的基于MFC平台开发模式,充分利用了Qt在界面设计上的优势;最后利用Matlab建立了两个Simulink工程作为OPC客户端进行仿真测试,实现了两个客户端之间通过“中转站”完成信息交互;测试结果控制效果与预期一致,验证了本方案的可行性.
【期刊名称】《计算机测量与控制》
【年(卷),期】2017(025)011
【总页数】5页(P154-158)
【关键词】OPC服务器;OPC开发工具包;Qt平台;仿真测试;OPC客户端
【作 者】黎邦腾;梁薇;马平
【作者单位】华北电力大学控制与计算机工程学院,河北保定071003;华北电力大学控制与计算机工程学院,河北保定071003;华北电力大学控制与计算机工程学院,河北保定071003
【正文语种】中 文
【中图分类】TP311
随着计算机技术和自动机技术的迅猛发展,越来越多的智能设备应用到了工业现场中,给我们提供了更多的现场信息。但是,在这种需求下,一个控制系统可能包含几十种或者更多的来自不同厂商的智能设备,这些设备遵循各自通讯规范,只能与特定的应用软件通讯,使得计算机内部应用程序与现场设备之间进行信息沟通和传递变得非常困难[1-2]。正是在这种背景下,一个工业标准 OPC技术规范被制定了出来[3]。OPC技术在应用程序与设备之间建立起了一道桥梁,使得各工控软件之间的信息交互非常方便,极大的提高了系统的互操作性和适应性。本文提出了一种将OPC服务器作为“中转站”的仿真方案,即通过OPC技术实现不同应用程序之间的相互访问与相互控制。因此,该文首先介绍了一种在OPC开发工具包WTOPCSvr.DLL的基础上开发OPC服务器软件的方法。
qt进程间通信传统上的OPC服务器或者客户端主要基于MFC实现。MFC执行代码效率高,并且目前技术也比较成熟,但是它固有的架构使得MFC去实现一个相对美观灵活的用户界面就会变得很繁琐。因此,该软件采用Qt实现,摒弃了传统的MFC平台开发模式,充分的利用了Qt在界面开发上的优势。最后,利用matlab建立了两个simulink工程作为OPC客户端进行仿真测试,验证了利用OPC服务器作为中转站,实现不同应用程序之间相互访问和控制这个方案的可行性。
OPC是一个工业标准,它采C/S模式,即OPC服务器与硬件通讯由厂商负责,工业软件通过OPC客户端与OPC服务器建立连接,而不再与设备直接通讯,把软、硬件开发彻底分开。这样,一方面硬件开发商仅仅需要将硬件设备驱动程序和通信程序封装成独立的OPC服务器,当硬件升级时只需要更新对应的驱动程序,而不会对OPC接口产生任何影响。另一方面应用程序软件开发商不必关心设备与OPC服务器如何通信及通讯接口之间的兼容性问题,他们只需要遵循OPC数据协议,开发相应OPC客户端就能从OPC服务器获取相应的数据[4]。图1所示为采用OPC技术之后工业控制软件与硬件设备之间的通讯框架示意图。
为了满足多种系统和设备之间的通信需求,OPC定义了一系列规范,如OPC数据存取(data
access)规范、OPC报警与事件(alarm and event)规范和OPC历史数据存取(historical data access)规范等。不同类型的服务器和客户端程序对应不同的规范,本文主要介绍OPC数据存储规范和数据存取服务器的开发[5]。
OPC数据存取规范是OPC基金会针对现场设备的在线数据存取制定的一个工业标准,它主要定义了OPC DA Sever (数据存取服务器)。OPC DA Server主要由3个对象组成:服务器对象(server object)、组对象(group object)和项对象(item object)[6]。图2所示为OPC DA Server的组成模型。
如图2所示,OPC服务器对象管理服务器的所有组信息,它是OPC组对象的包容器,能够完成组对象的添加和释放。在一个OPC服务器对象中,允许包含一个或者多个OPC组对象。OPC组对象管理本组的所有信息,并提供了组织和管理项的机制,从逻辑上实现对OPC 项对象的管理。OPC组包含Name(组的名字),Active(组的激活状态标志),Update Rate(刷新速率)和Percent Deadband (数据死区)。客户端程序可以设置组对象的死区、刷新频率和需要组织的项。OPC项对象表示了OPC服务器到数据源的连接,它是读写数据的最小逻辑单位,它包括了值、品质、时间戳3个基本属性。其中,数据值以 Variant 形式表示,品质代表
了数值的可信度,时间戳则代表了数据的存取时间[2]。OPC项对象不能直接被访问,所有对OPC项的操作都需要通过该项隶属的组来完成。
目前,OPC服务器开发主要有通过MFC提供的COM支持开发OPC服务器、通过ATL开发OPC服务器和通过开发工具开发OPC服务器3种方式。
MFC采用面向对象的方式将COM的基本功能封装在若干的C++类中,能够深入的掌握 COM 内部技术细节等特点。但是要从底层开始编写代码,工作量大,工程也非常复杂。ATL 同样需要对 COM 机制有非常深入的理解。因此,不管MFC还是ATL,都会使得整个开发过程变得异常困难,不易实现。本文采用的是第三种方法,通过工具开发OPC服务器。它大大简化了OPC服务器的开发过程,缩短开发周期,开发人员不用了解COM知识和OPC规范,仅仅需要调用相应的API函数就能完成OPC服务器的开发[7]。
软件基于VS2010+Qt平台实现,摒弃了传统的MFC开发模式,充分发挥了Qt在界面设计上的优势。Qt是一个跨平台C++图形用户界面应用程序开发框架,建立了信号(SIGNAL)和槽(SLOT)机制。利用SIGNAL可以实现任意参数的传递,这与MFC中纷繁芜杂的消息相比,Qt对事件的处理更加的自由灵活。在界面处理上,Qt完全从MFC的各种条条框框束缚解放出来,
可以灵活地使用视图和组织控件。
软件是在WTOPCSvr.DLL工具包的基础上完成的,WTOPCSvr.DLL是以DLL形式提供的一个OPC服务器快速开发工具。WTOPCSvr.DLL将COM和OPC处理的所有细节封装起来,用户不用去关心底层接口的实现,仅仅通过调用几个API函数就能快速地开发出自己的OPC服务器[8]。基于这个平台,使得整个OPC开发过程就变得非常简单。整个OPC服务器的系统框架如图3所示。
因为该软件侧重点是建立一个“中转站”,实现两个OPC客户端之间的通信。因此,并不需要考虑服务器对象接口与设备驱动部分,所有数据的交换都是两个客户端之间发起的。当OPC服务器起来完成初始化后,用户就可以创建相应的标签,不同的OPC客户端通过访问该服务器,就可以实现两个客户端之间的信息交互。
2.3.1 OPC服务器核心功能实现
OPC服务器的开发主要有以下主要步骤:
1) 调用UpdateRegistry注册OPC服务器。
该函数的原型是:BOOL WINAPI UpdateRegistry (BYTE *pCLSID_Svr, LPCSTR Name, LPCSTR Descr, LPCSTR ExePath),其中参数pCLSID_Svr是服务器的类标识,这是唯一的。参数Name指定了服务器的名称。参数Descr是对服务器的描述,而参数ExePath则定义了可执行程序的完整路径。
2)调用InitWTOPCsvr完成开发包初始化。
该函数原型:BOOL WINAPI InitWTOPCsvr (BYTE *pCLSID_Svr, UINT ServerRate),其中参数pCLSID_Svr含义同上,参数ServerRate定义了客户的数据刷新速率,单位是毫秒。该函数实现了对DCOM的初始化和OPC服务器对象的创建。
3)注册回调函数。
WTOPCSvr.DLL为用户提供了很多回调函数,方便服务器与客户端之间的事件处理。当特定的事件或者调解发生时,服务器及时响应客户端的操作,这是非常方便的。以函数EnableWriteNotification为例。
该函数原型: BOOL WINAPI EnableWriteNotification (WRITENOTIFYPROC lpCallback, B
OOL ConvertToNativeType)。这个函数定义了当OPC客户端些一个已定义的标签时,函数会产生一个来自DLL的调用返回。展开类型WRITENOTIFYPROC的定义:typedef VOID (CALLBACK* WRITENOTIFYPROC)(HANDLE, VARIANT*, DWORD*)。它实际定义了一个函数指针,用户调用EnableWriteNotification函数传入对应函数的指针,当客户端修改标签时,会立即响应该函数,服务器可以对事件进行处理。
4)创建标签和移除标签。
完成相应的准备工作后,就可以调用CreateTag函数创建标签了。
该函数原型:HANDLE WINAPI CreateTag (LPCSTR Name, VARIANT Value, WORD InitialQuality, BOOL IsWritable)。其中参数Name指定了创建的点名,它可以是任何文本字符串,也可以使用分层名字,中间用“.”分隔,如group.item。前者属于扁平结构,后者属于多层结构。参数Value定义了标签的初始值,参数InitialQuality则定义了标签的属性,参数IsWritable指定了标签是否可写。标签一旦被创建,它就能够在任何一个客户端中参数列表中被检索到。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。