1 引言
随着计算机技术的发展,计算机在工业自动化领域得到了日益广泛的应用,而应用软件作为计算机系统的重要组成部分,其规模不断扩大,功能不断增强。
在工业控制软件取得长足进步的同时,由于生产规模扩大和现场复杂程度的增加,日益增加的现场信息的集成成为一个巨大的难题。在传统控制中,不同设备间信息共享是通过驱动实现,众多不同厂商设备的驱动增加了通信的复杂性和难度。
现代的工业自动化控制系统中,硬件设备和软件产品对高效性、网络化、集成化的要求日益强烈。OPC正是在这样的情况下应运而生。
2 OPC技术及其控制软件中的应用
OPC即OLE for Process Control 的缩写,是用于工业控制领域的OLE(Object Linking andEmbedding,对象链接与嵌入)。它是由一些世界上领先的自动化系统硬件、软件公司与Microsoft 公司紧密合作而建立的一套应用于工业标准,为基于 Windows 操作平台的工业应用程序提供高效的信息集成和交互功能的组件对象模型接口标准,以微软的COM(组件对象模型)为基础,采用C/S 模式 ,提供自动化控制、设备管理和设备之间的软件应用互操作性和设备的互换性。
传统控制中,每个应用软件与底层的现场设备进行通讯时,都需要开发不同的自定义接口,这给软件开发和维护带来了巨大困难,并且在软件或设备升级之后,产生通讯的故障,影响应用软件的正常运行,导致系统崩溃。
OPC标准的出现,为现场设备之间的互联以及先进控制软件对现场设备进行访问,提供了一个高效、开放、可靠、互操作性好的解决方案。采用了OPC标准之后,硬件开发者只需要为自己的设备开发统一的OPC接口,而软件开发者可以不做驱动程序的开发,把精力投入到核心产品开发上。这样不但可避免重复开发,也提高了系统的开放性和互操作性。
在基于现场设备的先进控制软件的开发中,只要开发者遵循OPC数据接口协议,编制的应用软件就能够从不同的硬件厂商提供的OPC数据服务器中取得或者操作数据,实现设备数据的获取和灵活操作。
工程师按照OPC规范设计出客户端在先进控制系统中运行,如图1,应用程序通过客户端获取和操作现场数据,客户端的数据来源将不是通过实时数据库的专用接口或者专用的硬件驱动,而是架设在控制设备(如DCS、PLC、FCS 等)上的OPC服务器。
图1 OPC客户端在在先进控制系统中的结构
3 OPC的数据访问规范
OPC的技术实现由OPC服务器和OPC客户端两部分组成。OPC服务器完成现场数据的收集工作,OPC客户端根据标准的OPC数据访问规范与OPC服务器交换数据。
3.1 OPC数据访问机制
OPC数据访问规范是一套基于COM 的软硬件接口标准,其分别定义了两套接口标准:自动化接口(Automation Interface Standard)和自定义接口(Custom Interface Standard),自定义接口是OPC服务器必须提供的,自动化接口是可选接口。定制接口只适用于C/C++编写的客户端应用程序,效率较高,自动化接口支持更上层的应用程序,如VB、C#、Perl 等。如图2。
对于在分布式结构中不同的结点上客户和服务器的操作,OPC标准利用分布式结构 DCOM 使客户应用与远程服务器连接。
图2 OPC接口
3.2 OPC对象
OPC定义了三类对象:服务器对象(Server),组对象(Group),项对象(Item)。服务器对象对应相应的设备,组对象包含在服务器对象中,由客户端创建并维护,为客户提供管理数据项的方法,每个服务器对象可以包含多个组对象。项对象包含在组对象中,它是数据操作的最小单位,包括了诸如:数据类型,数据值,时间戳,数据质量等属性。
OPC客户端通过接口与OPC服务器通信,建立服务器对象,同时创建和操作OPC组对象、项对象。服务器通过OPC规范,向OPC客户端提供访问和操作数据的方法。见图3,图4。
在进行访问的过程中,客户只能通过接口访问OPC对象,,这样描述的对象只是逻辑表示,与服务器内部操作无关。
图3 OPC服务器对象接口
图4 OPC组对象接口
4 OPC通信的实现
下面是在Visual Studio 2008 环境下,使用Visual C++实现OPC客户端与服务器的基本通信。
步骤一:连接指定的OPC服务器
hr=CLSIDFromProgID(ProgID,&OPCCLSID);
hr=CoCreateInstance(OPCCLSID,NULL, CLSCTX_ALL,IID_IUnknown,(void **)ppUnknown);//创建服务器COM对象,建立与服务器的连接
步骤二:添加OPC组对象,获取相关接口
hr=pServer->AddGroup(L"",TRUE,100,0,&lTimeBias,&fTemp,0,&hOPCServerGroup,&dwActualRate,IID_IOPCItemMgt,(LPUNKNOWN*)&pOPCItemMgt);//添加组
pServer->QueryInterface(IID_IOPCBrowseServerAddressSpace,(void**)&pIOPCBrowse );// 获取IOPCBrowseServerAddressSpace 接口指针
hr=pOPCItemMgt->QueryInterface(IID_IOPCSyncIO,(void**)&pOPCSync);// 获取IOPCSyncIO
接口指针
步骤三:遍历OPC服务器项,获取其标签及其数据类型和可读可写性
while((hr = pEnumString->Next(1, &pszName, &count)) == S_OK)
{
ItemDef.szItemID=pszName;
hr=pOPCItemMgt->AddItems(1,&ItemDef,&pItemResult,&pErrors);
……………………
}
步骤四:读取指定项的值、质量、时间戳,使用OPC协议中的Read()函数实现
hr=pOPCSync->Read(OPC_DS_DEVICE,1,&hServer,&pItemValue,&pErrors);
pItemValue返回指定项的值、质量、时间戳
步骤五:向指定项写入值,使用OPC协议中的Write()函数
HRESULT hr=pOPCSync->Write(1,&hServer,WriteValue[0],&pErrors);
步骤六:断开服务器,断开服务器之前使用Release()释放接口指针,清除列表中的项内容,最后
使用CoUninitialize();销毁创建的COM 对象
通过IOPCServer接口,实现对组对象的管理,利用IOPCItemMgt接口,实现对组对象内的项对象的增减操作,获取IOPCSync接口实现对数据的读取和写入操作。
在正在进行的电厂优化控制软件的设计中,OPC客户端软件将起到与现场DCS进行通信,用于实时监控与优化的,图5是OPC客户端的功能截图。
图5 客户端功能截图
5 结束语
随着OPC技术在工业控制领域的飞速发展,OPC管理机构OPC基金会的会员数已接近300家,越来越多的现场设备都支持OPC规范。OPC的蓬勃发展必将为优化控制软件的开发和应用开启更加光明的前景。
上一篇:数控故障诊断盒的开发与制作
下一篇:一种人机界面组件组装方法的研究