利用OPC實現(xiàn)VC應用程序與PLC的數(shù)據(jù)交換
4.3 連接opc服務(wù)器
OPC 客戶能夠連接到OPC服務(wù)器上,并建立OPC組和OPC數(shù)據(jù)項,這是OPC數(shù)據(jù)訪問的基礎(chǔ),如果沒有這個機制,數(shù)據(jù)訪問的其它機能不可能實現(xiàn)[4]。連接 OPC服務(wù)器,OPC客戶需要事先指定計算機名(如果OPC服務(wù)器和OPC客戶不在同一臺計算機上)和OPC數(shù)據(jù)訪問服務(wù)器名 (RSI.RSView32OPCTagServer)。實現(xiàn)代碼如下:
ConnectToServer(/*in */LPOLESTR ProgID,/*in*/ BOOL IsRemote,/*out */ IUnknown **ppUnknown)
{
CLSID OPCCLSID;
HRESULT hRet=CLSIDFromProgID(ProgID,OPCCLSID);
//將字符串ProgID轉(zhuǎn)換為唯一OPCCLSID
if(IsRemote)
//opc服務(wù)器和opc客戶不在同一臺計算機上
{
COSERVERINFO ServerInfo;
memset(ServerInfo,0,sizeof(ServerInfo));
ServerInfo.pwszName=T2OLE(ServerComouter);
MULTI_QI qi[1];
memset(qi, 0, sizeof(qi));
qi[0].pIID=IID_IUnknown;
HRESULT hRet=CoCreateInstanceEx(OPCCLSID,NULL,CLSCTX_REMOTE_SERVER,
ServerInfo,1,qi);
*ppUnknown=qi[0].pItf;
}
else
//opc服務(wù)器和opc客戶在同一臺計算機上
{
hRet=CoCreateInstance(OPCCLSID,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown,
(void **)ppUnknown);
}
}
4.4 創(chuàng)建OPC組
IOPCServer接口的AddGroup()方法可以創(chuàng)建一個有指定名稱和屬性的OPC組。在調(diào)用該方法之前,可以使用上一步得到的Iunknown接口指針,通過QueryInterface()方法請求IOPCServer接口指針。代碼如下:
ppUnknown->QueryInterface(IID_IOPCServer,(void **)pServer);
//得到IOPCServer接口指針
pServer->AddGroup(L,TRUE,500,1235,lTimeBias,fTemp,0,hOPCServerGroup, dwActualRate,IID_IOPCItemMgt, pOPCItemMgt);
4.5 添加數(shù)據(jù)項
IOPCItemMgt接口的AddItem()方法可以添加具有特殊屬性的指定數(shù)量的數(shù)據(jù)項。
pOPCItemMgt->AddItems(ItemNumber,ItemArray,
(OPCITEMRESULT**)pItemResult,(HRESULT **)pErrors);
ItemArray 為OPCITEMDEF類型結(jié)構(gòu)數(shù)組,它包含數(shù)據(jù)項的詳細信息,客戶需要知道要進行交換的數(shù)據(jù)在RSView32標簽數(shù)據(jù)庫中的名稱、數(shù)據(jù)類型及作為 OPC服務(wù)器的RSView32項目名稱。添加數(shù)據(jù)項之前,要用這些數(shù)據(jù)項信息對ItemArray結(jié)構(gòu)數(shù)組進行初始化。
評論