杜曉克 魏運(yùn)均
樓宇自動(dòng)化系統(tǒng)(Building Automation System,BAS)是智能建筑的主要組成部分之一,智能建筑通過(guò)樓宇自動(dòng)化系統(tǒng)實(shí)現(xiàn)建筑物內(nèi)設(shè)備與建筑環(huán)境的全面監(jiān)控與管理[1]。
樓宇自動(dòng)化系統(tǒng)應(yīng)屬過(guò)程控制范疇,在樓宇自動(dòng)化技術(shù)發(fā)展過(guò)程中,由于歷史的原因,各個(gè)設(shè)備制造廠商封閉地發(fā)展自己的系統(tǒng),長(zhǎng)期以來(lái)沒(méi)有建立國(guó)際性的標(biāo)準(zhǔn)通信協(xié)議,使得各個(gè)設(shè)備或子系統(tǒng)不能無(wú)縫地集成到一個(gè)操作平臺(tái)上來(lái)。這種局面嚴(yán)重阻礙了智能建筑技術(shù)的發(fā)展。在這種情況下,要把不同廠家的設(shè)備和控制系統(tǒng)連接到一起是非常困難的。OPC就是在這種情況下產(chǎn)生的,它提供了一個(gè)標(biāo)準(zhǔn)接口,使得樓宇自控各子系統(tǒng)通過(guò)OPC客戶接口與具有標(biāo)準(zhǔn)OPC服務(wù)器接口的現(xiàn)場(chǎng)設(shè)備實(shí)現(xiàn)數(shù)據(jù)交互,這種軟件數(shù)據(jù)集成使得樓宇自控在真正意義上實(shí)現(xiàn)了開(kāi)放化、集成化、信息化。
OPC以O(shè)LE/COM機(jī)制作為應(yīng)用程序級(jí)的通信標(biāo)準(zhǔn),采用客戶/服務(wù)器模式,把開(kāi)發(fā)訪問(wèn)接口的任務(wù)放在硬件生產(chǎn)廠家或第三方廠家,以O(shè)PC服務(wù)器的形式提供給用戶,解決了軟、硬件廠商的矛盾,完成了系統(tǒng)的集成,提高了系統(tǒng)的開(kāi)放性和互操作性[2]。
OPC技術(shù)是以Microsoft的OLE/COM技術(shù)為基礎(chǔ)建立的一項(xiàng)技術(shù)規(guī)范與標(biāo)準(zhǔn),它以組件對(duì)象模型和分布式組件對(duì)象模型COM/DCOM技術(shù)為基礎(chǔ),采用客戶/服務(wù)器模型,定義了一組COM對(duì)象及其雙接口。
OPC對(duì)象主要包括服務(wù)器(Server)、組(Group)和項(xiàng)(Item)。OPC服務(wù)器對(duì)象除了維護(hù)自身信息外,還作為組對(duì)象的容器,可動(dòng)態(tài)地創(chuàng)建或釋放組對(duì)象;而組對(duì)象相對(duì)于項(xiàng)而言也是一個(gè)包容器,它提供一套管理項(xiàng)的機(jī)制;OPC項(xiàng)則表示了與OPC服務(wù)器中數(shù)據(jù)的連接,包括:值(Value)、品質(zhì)(Quality)、時(shí)間戳(Timer Stamp)三個(gè)基本屬性。圖1為OPC服務(wù)器結(jié)構(gòu)圖。
OPC標(biāo)準(zhǔn)中的接口主要有兩種:客戶端和服務(wù)器程序員所使用的OPC自定義接口(OPC COM Custom Interfaces)和支持用高端商業(yè)應(yīng)用(如用Visual Basic,Delphi,Excel等)開(kāi)發(fā)的客戶程序的OPC自動(dòng)化接口(OPC OLE Automation Interfaces)。OPC自定義接口是OPC服務(wù)器必須提供的,而OPC自動(dòng)化接口則不一定提供。利用這兩種接口與OPC服務(wù)器通信的方式見(jiàn)圖2。
兩種接口的OPC服務(wù)器通信方式對(duì)于客戶端應(yīng)用程序的開(kāi)發(fā),采用自定義接口的方式運(yùn)行效率高,但開(kāi)發(fā)難度大;采用自動(dòng)化接口的方式運(yùn)行效率低,但開(kāi)發(fā)簡(jiǎn)單。本文采用Visual C++高級(jí)編程語(yǔ)言通過(guò)定制接口的形式編寫(xiě)了OPC客戶端軟件。
OPC客戶程序訪問(wèn)OPC服務(wù)器,實(shí)際上就是一個(gè)典型的客戶訪問(wèn)進(jìn)程外組件的過(guò)程。編寫(xiě)OPC客戶程序的步驟可以概括為:指定服務(wù)器、建立OPC組、添加OPC項(xiàng)、接收數(shù)據(jù)、斷開(kāi)連接。
//創(chuàng)建OPC服務(wù)器對(duì)象,并查詢對(duì)象的IID_IOPCServer接口
r1=CoCreateInstance(clsid,NULL,
CLSCTX_LOCAL_SERVER,IID_IOPCServer,
(void**)&m_IOPCServer);
//添加一個(gè)group對(duì)象,并查詢IOPCItemMgt接口
r1=m_IOPCServer->AddGroup(L"grp1",//[in]組名字
TRUE,//[in]是否活動(dòng)狀態(tài)
500,//[in]刷新率(毫秒)
1,//[in]客戶句柄
&TimeBias,//[in]
&PercentDeadband,//[in]死區(qū)參數(shù)
LOCALE_ID,//[in]語(yǔ)言
&m_GrpSrvHandle,//[out]服務(wù)器句柄
&RevisedUpdateRate,//[out]服務(wù)器返回的刷新率
IID_IOPCItemMgt,//[in]需要的接口指針
(LPUNKNOWN*)&m_IOPCItemMgt);//[out]返回的需要的接口指針
//為AddItem定義item表的參數(shù)
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;// 數(shù)據(jù)類型
r1=m_IOPCItemMgt->AddItems(1,//[in]添加1個(gè) item m_Items,//[in]前面定義
&m_ItemResult,//[out]結(jié)果信息指針
&m_pErrors);//[out]錯(cuò)誤碼
//接收數(shù)據(jù)
OPCHANDLE*phServer;
OPCITEMSTATE*pItemValue;
HRESULT*pErrors;
HRESULT r1;
UINT qnr;
if(m_pErrors[0]!=S_OK)//Item 不可用
{
AfxMessageBox("OPC Item不可用,不能用同步讀功能!");
return;
}
//內(nèi)存分配
phServer=new OPCHANDLE[1];
//通過(guò)server句柄選擇item(由AddItem得到的)
phServer[0] =m_ItemResult[0].hServer;
r1=m_IOPCSyncIO->Read(OPC_DS_DEVICE,1,phServer,
&pItemValue,&pErrors);
//釋放內(nèi)存
delete[]phServer;
//釋放OPC服務(wù)器
m_IOPCServer->Release();
m_IOPCServer=NULL;
應(yīng)用Visual C++編寫(xiě)的OPC客戶端程序,此程序即可與樓宇自控各子系統(tǒng)OPC服務(wù)器接口實(shí)現(xiàn)現(xiàn)場(chǎng)設(shè)備數(shù)據(jù)交互以及數(shù)據(jù)信息化集成。
OPC技術(shù)的出現(xiàn)使得樓宇自動(dòng)化系統(tǒng)各子系統(tǒng)之間實(shí)現(xiàn)了開(kāi)放的無(wú)縫連接,在提高系統(tǒng)互操作性的同時(shí),簡(jiǎn)化了系統(tǒng)集成環(huán)境,從軟件層面解決了不同廠家的各種子系統(tǒng)和設(shè)備往往由于不具備標(biāo)準(zhǔn)的接口而存在可集成性的問(wèn)題[3]。隨著OPC規(guī)范的不斷推出和完善,其在智能樓宇系統(tǒng)集成中的應(yīng)用將會(huì)越來(lái)越廣泛。
[1] 周 鳴,曲 凌.基于OPC技術(shù)的樓宇自動(dòng)化系統(tǒng)集成[J].現(xiàn)代電子技術(shù),2006(9):99-101.
[2] 蔡翔云,鄭小虎,姜 麟.OPC規(guī)范及開(kāi)發(fā)應(yīng)用[J].昆明理工大學(xué)學(xué)報(bào),2002(6):73-74.
[3] 陳 丹,徐利梅.OPC技術(shù)在樓宇自動(dòng)化系統(tǒng)集成中的應(yīng)用[J].樓宇自動(dòng)化,2007(2):62-63.