有关OPC的问题!

Painot 2012-11-15 04:57:21
我想要做一个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通讯!
...全文
340 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
云海玉弓缘 2015-01-18
  • 打赏
  • 举报
回复
请问客户端读到的数据时间戳老和本地事件差8个小时怎么解决?
Yo1988 2015-01-13
  • 打赏
  • 举报
回复
@lyshuai2008 小弟我也刚刚要学习这个OPC,也是遇到跟你一样的问题,也是一样的困惑,求帮忙指导下,万分感谢!!!
一个世纪 2013-09-10
  • 打赏
  • 举报
回复
Painot 2012-12-21
  • 打赏
  • 举报
回复
嗯,谢谢你们了,通过自己的摸索,也算是小小的成功了一把,已经把OPCClient拿下了!接分咯!
Painot 2012-11-18
  • 打赏
  • 举报
回复
都没有人知道OPC的相关信息么?还是说舍不得说下啊!无语啊!
oyljerry 2012-11-18
  • 打赏
  • 举报
回复
一个是学习COM组件的调用方式,另一个是学习OPC协议的相关标准等,这样就可以比较好理解这些调用顺序以及为什么了
zhouzhipen 2012-11-18
  • 打赏
  • 举报
回复
OPC只是一套通用的工业标准,其本质还是COM组件,OPC的接口都有相应的标准,(注意:这个不是MS的标准,MSDN上是查不到的)。 而且这个标准几句话也说不清楚,还是去查查相关专业的资料吧

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧