有关OPC的问题!
我想要做一个OPCClient,我只知道有几个步骤,但是具体的我就不知道了,也尝试着找了点资料看下,但是看不出个所以然来,所以希望在这里能遇见几个会的指点一下,谢谢!
第一步,初始化COM库
HRESULT r1;
r1 = CoInitialize(NULL);
if(SUCCESS(r1))
{
MessageBox(NULL,"初始化COM库成功!","COM库",MB_OK);
}
else
{
MessageBox(NULL,"初始化COM库失败!","Error Initialize()",MB_OK);
}
第二步,将ProgID转化成CLSID
CLSID clsid;
r1 = CLSIDFromProgID(L"",&clsid);//L后面的我不知道填什么东西,看网上的资料好像是什么注册表的 什么的,我不是很明白,求真相,谢谢!
if(r1 !=S_OK)
{
CoTaskMemFree(&clsid);//释放对象
m_pIOPCServer = NULL;//服务器对象实例句柄
CoUninitialize();//释放内存
}
第三步,创建实例
r1 = CoCreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IOPCServer,(void**)&m_pIOPCServer);//这里面的几个参数我也不知道具体的是什么意思,虽然在MSDN里面有,但是看着不是怎么理解,望解释!
if(r1 != S_OK)
{
CoTaskMemFree(&clsid);
m_pIOPCServer = NULL;
CoUninitialize();
}
第四步,添加组
r1 = m_pIOPCServer->AddGroup(L"",FALSE,500,1,&TimeBias,&PercentDeadband,LOCAL_ID,&m_GrpSrvHandle,&ReviseUpdateRate,IID_IOPCItemMgt,(LPUNKNOWN*)&m_pIOPCItemMgt);
if(r1 == OPC_S_UNSUPPORTEDRATE)
{
szErrorText.Format("Revised Update Rate %d is different from Requested UpdateRate 500",ReviseUpdateRate);
}
//添加组,里面的参数什么的,因为我在MSDN里面没有找到相应的函数,有的也只有一个参数的,根本就不能对照着来看
m_Item[0].szAccessPath = L"";
m_Item[0].szItemID = L"";
m_Item[0].bActive = TRUE;//激活标识
m_Item[0].hClient = 1;
m_Item[0].dwBlobSize = 0;
m_Item[0].pBlob = NULL;
m_Item[0].vtRequestedDataType = 2;//2标识int 型
第五步:添加项
r1 = m_pIOPCItemMgt->AddItems(1,m_Item,&m_pItemResult,&m_pErrors);
if(m_pItemResult[0].dwAccessRights != (OPC_READABLE+OPC_WRITEABLE))
{
//输出错误信息
}
r1 = m_IOPCItemMgt->QueryInterface(IID_IOPCGroupStateMgt,(void**)&m_pIOPCGroupStateMgt);//同步通讯方式
之后就是Read和Write了,我想理解多的一点有关于DCOM模式的OPC通讯!