APP下载

楼宇自控系统集成中的OPC 客户端软件开发

2011-11-05杜晓克魏运均

山西建筑 2011年36期
关键词:句柄系统集成自控

杜晓克 魏运均

0 引言

楼宇自动化系统(Building Automation System,BAS)是智能建筑的主要组成部分之一,智能建筑通过楼宇自动化系统实现建筑物内设备与建筑环境的全面监控与管理[1]。

楼宇自动化系统应属过程控制范畴,在楼宇自动化技术发展过程中,由于历史的原因,各个设备制造厂商封闭地发展自己的系统,长期以来没有建立国际性的标准通信协议,使得各个设备或子系统不能无缝地集成到一个操作平台上来。这种局面严重阻碍了智能建筑技术的发展。在这种情况下,要把不同厂家的设备和控制系统连接到一起是非常困难的。OPC就是在这种情况下产生的,它提供了一个标准接口,使得楼宇自控各子系统通过OPC客户接口与具有标准OPC服务器接口的现场设备实现数据交互,这种软件数据集成使得楼宇自控在真正意义上实现了开放化、集成化、信息化。

1 OPC系统构成

OPC以OLE/COM机制作为应用程序级的通信标准,采用客户/服务器模式,把开发访问接口的任务放在硬件生产厂家或第三方厂家,以OPC服务器的形式提供给用户,解决了软、硬件厂商的矛盾,完成了系统的集成,提高了系统的开放性和互操作性[2]。

OPC技术是以Microsoft的OLE/COM技术为基础建立的一项技术规范与标准,它以组件对象模型和分布式组件对象模型COM/DCOM技术为基础,采用客户/服务器模型,定义了一组COM对象及其双接口。

OPC对象主要包括服务器(Server)、组(Group)和项(Item)。OPC服务器对象除了维护自身信息外,还作为组对象的容器,可动态地创建或释放组对象;而组对象相对于项而言也是一个包容器,它提供一套管理项的机制;OPC项则表示了与OPC服务器中数据的连接,包括:值(Value)、品质(Quality)、时间戳(Timer Stamp)三个基本属性。图1为OPC服务器结构图。

OPC标准中的接口主要有两种:客户端和服务器程序员所使用的OPC自定义接口(OPC COM Custom Interfaces)和支持用高端商业应用(如用Visual Basic,Delphi,Excel等)开发的客户程序的OPC自动化接口(OPC OLE Automation Interfaces)。OPC自定义接口是OPC服务器必须提供的,而OPC自动化接口则不一定提供。利用这两种接口与OPC服务器通信的方式见图2。

两种接口的OPC服务器通信方式对于客户端应用程序的开发,采用自定义接口的方式运行效率高,但开发难度大;采用自动化接口的方式运行效率低,但开发简单。本文采用Visual C++高级编程语言通过定制接口的形式编写了OPC客户端软件。

2 OPC客户端的编程实现

OPC客户程序访问OPC服务器,实际上就是一个典型的客户访问进程外组件的过程。编写OPC客户程序的步骤可以概括为:指定服务器、建立OPC组、添加OPC项、接收数据、断开连接。

//创建OPC服务器对象,并查询对象的IID_IOPCServer接口

r1=CoCreateInstance(clsid,NULL,

CLSCTX_LOCAL_SERVER,IID_IOPCServer,

(void**)&m_IOPCServer);

//添加一个group对象,并查询IOPCItemMgt接口

r1=m_IOPCServer->AddGroup(L"grp1",//[in]组名字

TRUE,//[in]是否活动状态

500,//[in]刷新率(毫秒)

1,//[in]客户句柄

&TimeBias,//[in]

&PercentDeadband,//[in]死区参数

LOCALE_ID,//[in]语言

&m_GrpSrvHandle,//[out]服务器句柄

&RevisedUpdateRate,//[out]服务器返回的刷新率

IID_IOPCItemMgt,//[in]需要的接口指针

(LPUNKNOWN*)&m_IOPCItemMgt);//[out]返回的需要的接口指针

//为AddItem定义item表的参数

m_Items[0].szAccessPath=L"";// 不需要 Accesspath

m_Items[0].szItemID=szItemID;//ItemID

m_Items[0].bActive=TRUE;

m_Items[0].hClient=1;

m_Items[0].dwBlobSize=0;

m_Items[0].pBlob=NULL;

m_Items[0].vtRequestedDataType=0;// 数据类型

r1=m_IOPCItemMgt->AddItems(1,//[in]添加1个 item m_Items,//[in]前面定义

&m_ItemResult,//[out]结果信息指针

&m_pErrors);//[out]错误码

//接收数据

OPCHANDLE*phServer;

OPCITEMSTATE*pItemValue;

HRESULT*pErrors;

HRESULT r1;

UINT qnr;

if(m_pErrors[0]!=S_OK)//Item 不可用

{

AfxMessageBox("OPC Item不可用,不能用同步读功能!");

return;

}

//内存分配

phServer=new OPCHANDLE[1];

//通过server句柄选择item(由AddItem得到的)

phServer[0] =m_ItemResult[0].hServer;

r1=m_IOPCSyncIO->Read(OPC_DS_DEVICE,1,phServer,

&pItemValue,&pErrors);

//释放内存

delete[]phServer;

//释放OPC服务器

m_IOPCServer->Release();

m_IOPCServer=NULL;

3 OPC客户端软件实现

应用Visual C++编写的OPC客户端程序,此程序即可与楼宇自控各子系统OPC服务器接口实现现场设备数据交互以及数据信息化集成。

4 结语

OPC技术的出现使得楼宇自动化系统各子系统之间实现了开放的无缝连接,在提高系统互操作性的同时,简化了系统集成环境,从软件层面解决了不同厂家的各种子系统和设备往往由于不具备标准的接口而存在可集成性的问题[3]。随着OPC规范的不断推出和完善,其在智能楼宇系统集成中的应用将会越来越广泛。

[1] 周 鸣,曲 凌.基于OPC技术的楼宇自动化系统集成[J].现代电子技术,2006(9):99-101.

[2] 蔡翔云,郑小虎,姜 麟.OPC规范及开发应用[J].昆明理工大学学报,2002(6):73-74.

[3] 陈 丹,徐利梅.OPC技术在楼宇自动化系统集成中的应用[J].楼宇自动化,2007(2):62-63.

猜你喜欢

句柄系统集成自控
次氯酸钠消毒系统及其自控改造与应用
加氢站与调压站能源供应系统集成技术及应用
电气工程中自控设备电磁干扰问题探讨
成功来自于自控
高校图书馆持久标识符应用研究
工业企业系统集成技术 系统集成技术与信息化集成系统(下)
编译程序语法分析句柄问题分析与探讨
“系统集成”式的改革
车牌识别与视频监控系统集成探讨
外科术后自控镇痛泵的应用观察