OPC技术之IOPCBrowseServerAddressSpace 的使用(VC++) 点击:929 | 回复:4



如火

    
  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-02-22 15:48:00
楼主
OPC 技术文档之 IOPCBrowseServerAddressSpace 的使用(VC++) -- flyback原创

在制作 OPC Client 的时候通常需要浏览OPC Serve的所有已经定义的item名称(当然OPC Server必须支持这个选项),如果用VC的话就要使用到IOPCBrowseServerAddressSpace接口,那么,下面是提取item目录结构的一个自制的递归函数。

void TryBrowseBranch(IOPCBrowseServerAddressSpace *pBSAS, LPCWSTR lpprestr,LPCWSTR lpcw)
   {
   HRESULT r1;
   OPCNAMESPACETYPE onst;
   LPWSTR pItemID;
   WCHAR s,*lp;
   IEnumString *pEnum = 0;

   char szBuf[40];
   long nPos = 1;
   HRESULT r2 = S_OK;
   LPOLESTR pStr;
   ULONG actual;

   lp = WSTRFromSBCS("%ls,%ls",pIMalloc);
// 向lpcw节点的枝叶改变位置
   pBSAS->ChangeBrowsePosition(OPC_BROWSE_DOWN,lpcw);
   r1 = pBSAS->BrowseOPCItemIDs(OPC_FLAT,&s,VT_EMPTY,0,&pEnum); 
   pBSAS->QueryOrganization(&onst);

// 提取该节点下的所有枝叶
   while((r2 = pEnum->Next(1, &pStr, &actual)) == S_OK)
   { 
   printf("%ls%ls--%ls\n",lpprestr,lpcw, pStr); 
   wprintf(lpprestr,lp,lpcw,pStr);
   if(onst == OPC_BRANCH)
   TryBrowseBranch(pBSAS,lpprestr,pStr);
   } 
   // pBSAS->ChangeBrowsePosition(OPC_BROWSE_DOWN,
   // printf("OPC_NS_HIERARCHIAL 含有枝干");
   // get firset item
   pIMalloc->Free(lp);
   pIMalloc->Free(pStr);
   pEnum->Release();
// 回到名叫lpcw的主干位置
   pBSAS->ChangeBrowsePosition(OPC_BROWSE_UP,lpcw); 
   }




张丰

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 11回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2005年12月02日
发表于:2006-02-26 09:43:00
1楼
好的。谢谢

dantian

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 75回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2005年10月11日
发表于:2006-02-26 10:10:00
2楼
  我对opc的具体配置不是很懂的,能具体介绍配置opc的环境,及工作的原理。具体点就好啊

工控帮

  • 精华:0帖
  • 求助:0帖
  • 帖子:63帖 | 675回
  • 年度积分:0
  • 历史总积分:1418
  • 注册:2001年7月06日
发表于:2006-03-03 22:55:00
3楼
激情如火:您最好写上转载。
呵呵,作者好像不是你。

如火

  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-03-31 16:33:00
4楼
后面已经注明是flyback原创

热门招聘
相关主题

官方公众号

智造工程师