利用OPC實現VC應用程序與PLC的數據交換
4.3 連接opc服務器
OPC 客戶能夠連接到OPC服務器上,并建立OPC組和OPC數據項,這是OPC數據訪問的基礎,如果沒有這個機制,數據訪問的其它機能不可能實現[4]。連接 OPC服務器,OPC客戶需要事先指定計算機名(如果OPC服務器和OPC客戶不在同一臺計算機上)和OPC數據訪問服務器名 (RSI.RSView32OPCTagServer)。實現代碼如下:
ConnectToServer(/*in */LPOLESTR ProgID,/*in*/ BOOL IsRemote,/*out */ IUnknown **ppUnknown)
{
CLSID OPCCLSID;
HRESULT hRet=CLSIDFromProgID(ProgID,OPCCLSID);
//將字符串ProgID轉換為唯一OPCCLSID
if(IsRemote)
//opc服務器和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服務器和opc客戶在同一臺計算機上
{
hRet=CoCreateInstance(OPCCLSID,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown,
(void **)ppUnknown);
}
}
4.4 創建OPC組
IOPCServer接口的AddGroup()方法可以創建一個有指定名稱和屬性的OPC組。在調用該方法之前,可以使用上一步得到的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 添加數據項
IOPCItemMgt接口的AddItem()方法可以添加具有特殊屬性的指定數量的數據項。
pOPCItemMgt->AddItems(ItemNumber,ItemArray,
(OPCITEMRESULT**)pItemResult,(HRESULT **)pErrors);
ItemArray 為OPCITEMDEF類型結構數組,它包含數據項的詳細信息,客戶需要知道要進行交換的數據在RSView32標簽數據庫中的名稱、數據類型及作為 OPC服務器的RSView32項目名稱。添加數據項之前,要用這些數據項信息對ItemArray結構數組進行初始化。
評論