1. 先Get服务的CLSID,没有这个就连不上接口了。
2. 通过CoCreateInstanceEx得到接口,需要用到的OPC接口有这么几个:
IOPCServer(Server管理),
IOPCItemMgt(Item管理),
IOPCBrowseServerAddressSpace(浏览服务器点),
IOPCAsyncIO2(异步读写),
IOPCSyncIO(同步读写),
IOPCDataCallback(数据Callback)
3. 成功得到IOPCServer就说明连接成功了。
4. m_pIServer->AddGroup(),增加组,并得到IOPCItemMgt接口。
5. m_pItemMgt->AddItems(),增加项。
6. 可以用IOPCBrowseServerAddressSpace接口来得到项路径。
服务器上项的存放是以树的形式。
m_pIBrowse->ChangeBrowsePosition():到指定的位置。
m_pIBrowse->BrowseOPCItemIDs():得到某一层的所有节点。
7. 同步异步方式的读写。
pIAsync2->Read(), pIAsync2->Write(), pISync->Read(), pISync->Write()
8. 通过IOPCDataCallback::OnDataChange()来进行数据的自动刷新。
9. 简单示例代码(完整代码请从资源中下载):
void main(void)
{
IOPCServer* pIOPCServer = NULL;
IOPCItemMgt* pIOPCItemMgt = NULL;
OPCHANDLE hServerGroup;
OPCHANDLE hServerItem;
CoInitialize(NULL);
pIOPCServer = InstantiateServer(OPC_SERVER_NAME);
AddTheGroup(pIOPCServer, pIOPCItemMgt, hServerGroup);
AddTheItem(pIOPCItemMgt, hServerItem);
VARIANT varValue;
VariantInit(&varValue);
ReadItem(pIOPCItemMgt, hServerItem, varValue);
cout << "Read value: " << varValue.XVAL << endl;
RemoveItem(pIOPCItemMgt, hServerItem);
RemoveGroup(pIOPCServer, hServerGroup);
pIOPCItemMgt->Release();
pIOPCServer->Release();
CoUninitialize();
}