VB,VC开发OPC客户程序必读!

 开发OPC客户程序必读!!!!!!!!!
  
  Step.1
  如果程序要调用COM 库的某一个函数必须先登录COM 函数CoInitialize()可
  以完成此功能函数CoGetMalloc()可以得到一个指向COM 内存管理接口的指
  针
  HRESULT rl;
  rl=CoInitialize(NULL);
  rl=CoGetMalloc(MEMCTX_TASK,&g_pIMalloc);
  
  Step.2
  每个COM 服务器有一个ProgID 通过它可以得到一个全球唯一的CLSID 用
  CLSIDFromProgID()函数可以实现这个变换ProgID 用变量szName 进行参数传
  递在示例程序中它的值是L”OPC.SimaticNET”
  m_Popc
  rl=CLSIDFromProgID(szName,&clsid);
  
  
  Step.3
  CoCreateInstance()函数创建一个类实例其CLSID 值设定如下:
  r2=CocreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IUnkown,
  (void**)&Punk);
  这段程序的结果是一个指向服务器对象IUnknown 接口的指针变量pUNK
  
  Step.4
  从IUnkown 接口通过QueryInterface()方法可以得到其它接口的指针
  HRESULT r3;
  r3=pUNK->QueryInterface(IID_IOPCServer,(void **)&m_Popc);
  这段程序的结果是得到一个指向服务器对象IOPCServer 接口的指针(变量m_Popc)
  
  Step.5
  IOPCServer 接口的AddGroup()方法可以创建OPC 组
  m_pItemMgt)
  HRESULT r1;
  r1=m_Popc->AddGroup(szName,TRUE,500,1,&TimeBias,
  &PercDeadband,dwLCID,&m_GrpServerHandle,
  &RevUpRate,IID_IOPCItemMgt,
  (LPUNKNOWN*)&m_pItemMgt);
  这段程序的执行结果是创建一个有指定名称属性的组在返回的参数中有一
  个指向所需要的进程组对象接口的指针在这里是IOPCItemMgt(变量
  
  Step.6
  IOPCItemMgt 接口有AddItem()方法可以创建OPC 项
  HRESULT r1;
  r1=m_pItemMgt->AddItems(NumItems,pItems,&m_pItResult,&pErrors);
  这段程序的结果是创建有特殊属性的指定数量的项除此之外事件结构变量
  m_pItResult 服务器句柄目标系统上的项数据类型等也被赋值
  
  用于执行所需操作的指针需要通过现有的指向IOPCItemMgt 接口的指针得到如
  如果用户要进行异步通信就需要指向IOPCAsyncIO 接口的指针
  HRESULT rl;
  r1=m_pItemMgt->Queryface(IID_IOPCAsyncIO,(void * *) & pAsyncIO);
  
  通过该接口的Read() 和Write()两个方法可以读写项的数值
  r2=pAsyncIO->Read(m_dwConnection,OPC_DS_CACHE,dwNumItems,phServer,&m_TransactionID,&pErrors);
  这段程序的执行结果是OPC 项的数据被送到客户程序的IAdviseSink 接口
  
  Step.7
  在程序停止运行之前必须删除已创建的OPC 对象并释放内存到目前为止用到
  的各种接口都有相应的函数
  5.4 r1=m_pItemMgt->RemoveItems(dwNumItems,&pErrors);
  r1=m_Popc->RemoveGroup(m_GrpServerHandle,TRUE);
  m_pItemMgt->Release();
  m_pOPC->Release();
以下是对《VB,VC开发OPC客户程序必读!》的回复
SZTAOYANBIN
  2003-12-30 13:47:00
   可叹!!!!!!!
   VB DEMO!!!!!
  
  STEP_1:Init Server!!
   Set Svr=CreateObject(ProgID$)
  
  STEP_2:AddGroup!!
   Set Group=Svr.AddGroup "szTaoYanBinGRP" false RateRequested,GroupClientHdl,PercentDeadband,dwLangId_ENGLISH,GroupServerHdl,RateRevised
   Set PtrItemMgt =Group
  
  STEP_3:AddItems!!!
   ItemsActive(0)= True: ItemsActive(1)= True
   PtrItemMgt.AddItems NbrItems,ItemsIDs,ItemsActivity,ItemsClientHdls,ItemsSvrHdls,ItemsErrors,ItemsObjects,accessPath
  
  STEP_4:Read&Write Items!!!!
   Set ptrSyncIO = group
   WHILE (true)
   PtrSyncIO.OPCRead OPC_DS_DEVICE,NbrItems,pValues,pQualities,pTimeStamps,ItemsErrors
   WEND
  
  STEP_5: Free Group&Items!!!!!!
   Svr.RemoveGroup GroupServerHdl,False
   Set Group = Nothing
   Set Svr = NothingS
   OK!!!!!!
   如果你认为本贴有价值,请推荐为精华!!!!!!
   THANKS!!!!!!!!!!!!!!!!!!!!
SZTAOYANBIN
  2003-12-30 15:02:00
   OPC HTML DEMO    szTaoyanbin注,把OPC SEVER作为JAVA小程序插件,加入HEML中,OBJECT的标记名称定义为GRP1则可!!!!!      <Script Language="VBScript"><!--      Dim Item1   Dim Server   Dim fValue      Dim ItemValue      Sub Window_OnLoad()    Server = "szTaoYanBin_Group"    GRP1.Init Server,""    GRP1.AddItem "",Item1    GRP1.Read    fValue = GRP1.GetValue(Item1)    GRP1.Start 500   End Sub      Sub Window_OnUnload()    GRP1.Stop   End Sub      Sub GRP1_OnGroupChange()    fValue = GRP1.GetValue(Item1)   End Sub      --></Script>   如果有一天,你用网页作为组态软件,而是由本人启迪的话,别望了说声THANKS!!!    szTaoyanbin@163.com

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 --------------------------...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, t...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integ...