请教高手:SyncRead的问题 点击:0 | 回复:3



fanjzh

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 10回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2004年12月12日
发表于:2005-03-09 16:24:00
楼主
我用VC实现的客户端,在基于group 读取数据时出错,查错误码为参数无效,下面是部分代码,请高手指点: long i; short iSource; VARIANT varQuality; VARIANT varTimeStamp ; HRESULT hr; varQuality.vt=VT_I2; varTimeStamp.vt=VT_DATE; SAFEARRAY* pHandleArray; SAFEARRAY* pValueArray; SAFEARRAY* pErrorArray; pHandleArray=SafeArrayCreateVector(VT_I4, 0, m_iItemSum); pValueArray=SafeArrayCreateVector(VT_VARIANT, 0, m_iItemSum); pErrorArray=SafeArrayCreateVector(VT_I4, 0, m_iItemSum); if((pHandleArray == NULL)||(pValueArray == NULL)||(pErrorArray == NULL)) { MessageBox("SafeArrayCreate Error"); return FALSE; } for(i=0;i<m_iItemSum;i++) { hr=SafeArrayPutElement(pHandleArray, &i, (void*)&m_pItemList[i].m_lServerHandle); if(!SUCCEEDED(hr)) MessageBox("SafeArrayPutElement Error"); } iSource=OPCCache; m_pIOPCGroupPtr->SyncRead(iSource,m_iItemSum,&pHandleArray,&pValueArray,&pErrorArray,&varQuality,&varTimeStamp);



老不死的

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 7回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2004年3月15日
发表于:2005-03-11 22:46:00
1楼
m_pIOPCGroupPtr这个指针从那里得到的?正规做法应该是从服务器对象的IOPCServer接口的AddGroup接口函数创建得到。自己检查吧。

fanjzh

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 10回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2004年12月12日
发表于:2005-03-14 08:18:00
2楼
这只是部分代码,我确信这一指针是正确的,如果指针没有获得,其出错代码就不同了 如下为其创建的过程: m_pIOPCGroupsPtr=m_pOPCAutoServer->GetOPCGroups(); //返回Groups //创建一个Group m_pIOPCGroupPtr=m_pIOPCGroupsPtr->Add("Group1"); m_pIOPCGroupPtr->IsActive=TRUE; m_pIOPCGroupPtr->IsSubscribed=TRUE; m_pIOPCGroupPtr->DeadBand=0.000001; m_pIOPCGroupPtr->UpdateRate=50; // 获取Items m_pOPCItemsPtr=m_pIOPCGroupPtr->GetOPCItems(); m_pOPCItemsPtr->DefaultIsActive=TRUE; m_pOPCItemsPtr->DefaultAccessPath=""; m_pOPCItemsPtr->DefaultRequestedDataType=VT_R4; // 建立Item for(i=0;i<m_iItemSum;i++) { OPCItemPtr pOPCItemPtr; pOPCItemPtr=m_pOPCItemsPtr->AddItem(m_pItemList[i].m_sName.AllocSysString(),m_pItemList[i].m_lClientHandle); if(pOPCItemPtr==NULL) { strTemp.Format("无效的Item 连接,Item 名称:%s",m_pItemList[i].m_sName); MessageBox(strTemp); } else { pOPCItemPtr->PutIsActive(TRUE); m_pItemList[i].m_lServerHandle=pOPCItemPtr->ServerHandle; strTemp.Format("Item:%s OK",m_pItemList[i].m_sName); m_DataList.AddString(strTemp); } } m_iItemSum=m_pOPCItemsPtr->Count;

工控帮

  • 精华:0帖
  • 求助:0帖
  • 帖子:73帖 | 675回
  • 年度积分:0
  • 历史总积分:1418
  • 注册:2001年7月06日
发表于:2005-03-14 12:00:00
3楼
可否把源码发到我的信箱.我帮你查查 webmaster@opc-china.com

相关主题

官方公众号

智造工程师