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

转载 2004年09月14日 14:04:00
VB,VC开发OPC客户程序必读!
作者: szTaoyanbin ,2004-2-8 10:12:00 发表于:《OPC论坛》 共有40人回复,7055次点击
  开发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,phServer,&pErrors);
  r1=m_Popc->RemoveGroup(m_GrpServerHandle,TRUE);
  m_pItemMgt->Release();
  m_pOPC->Release();
以下是对《VB,VC开发OPC客户程序必读!》的回复:
edit.gifSZTAOYANBIN
  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, ItemsSvrHdls,pValues, pQualities, pTimeStamps, ItemsErrors
   WEND
  
  STEP_5: Free Group&Items!!!!!!
   Svr.RemoveGroup GroupServerHdl, False
   Set Group = Nothing
   Set Svr = NothingS
   OK!!!!!!
   如果你认为本贴有价值,请推荐为精华!!!!!!
   THANKS!!!!!!!!!!!!!!!!!!!!
edit.gifSZTAOYANBIN
  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

OPC工作记录整理——第四篇(OPC客户端开发之OPC服务器的枚举和连接)

OPC客户端的开发相对来说,只要掌握了OPC基类的几个接口,并知道它们是如何运作的,那么开发起来还是相对容易的。好了,废话不多说了,我们开始吧。     首先是对头文件的引用: #include "s...
  • u014801367
  • u014801367
  • 2015年01月30日 17:13
  • 1817

VC读写OPC服务器数据小析-01

我机器上安装了Wincc OPC Server,KEPServerEx4.0等。 一.导入OPC官方文件。 我首先在VC6.0中建立一个基于对话框的项目,在项目中加入了4个文件   ...
  • chunfengdeyiding
  • chunfengdeyiding
  • 2014年09月01日 14:01
  • 1395

Vb 与 Vc 的区别

一:简单的对比 VB是由Basic语言演化而来的VisualBasic,意思是可视化Basic,而VC是由C++语言演化而来的VisualC++,意思是可视化C++,VB功能没有VC强大,但是很容易...
  • guomutian911
  • guomutian911
  • 2014年10月21日 11:57
  • 2561

基于opc架构的数据采集系统及应用

随着计算机通信和网络技术的发展,计算机在工业自动化领域发挥着越来越重要的作用。在工业现场,通常会采用各种智能仪器仪表,这些智能设备的现场运行数据可以通过网络直接高速地采集到应用软件,从而将设备的运行状...
  • huwei2003
  • huwei2003
  • 2014年06月30日 18:34
  • 5516

关于OPC Client 编写

昨天又有人问我 OPC Client 编写,实际是他们不了解OPC 客户端的工作原理,要想写客户端程序,必须知道OPC对象, OPC逻辑对象模型包括3类对象:OPC server对象、OPC grou...
  • changbaolong
  • changbaolong
  • 2013年12月05日 19:57
  • 12337

OPC客户端开发过程整理

2013-09-02 17:01:44|  分类: window其它 |  标签:opc客户端  opc开发   |举报 |字号 订阅 OPC开发过程: 1.注册OP...
  • greston
  • greston
  • 2014年06月26日 11:38
  • 15619

OPC工作记录整理——第三篇(开发环境的配置)

在客户端的开发中,需要配置本机的OPC开发环境,下面就对OPC的开发环境做简要整理。     在OPC的开发包中,包含有OPC开发所需要的核心动态链接库,其中包括opccomn_ps.dll,OPC...
  • u014801367
  • u014801367
  • 2015年01月23日 22:27
  • 2211

OPC客户端开发之OPC服务器的枚举和连接------OPC(第五篇)

OPC客户端的开发相对来说,只要掌握了OPC基类的几个接口,并知道它们是如何运作的,那么开发起来还是相对容易的。好了,废话不多说了,我们开始吧。     首先是对头文件的引用: [cp...
  • liqiansheng
  • liqiansheng
  • 2016年09月07日 15:31
  • 1732

VB中调用VC++开发的DLL

转自:http://lanshanlhy.blog.163.com/blog/static/302294762010112832031218/ 再谈在VB中调用VC++开发的DLL  再谈...
  • xl19900502
  • xl19900502
  • 2016年02月22日 11:17
  • 489

使用OPC UA的十个原因

1. 组件对象模型(COM)/分布式组件对象模型(DCOM)的终止   传统OPC应用之间的数据交换是基于微软的组件对象模型(COM)技术。因为视窗(Windows)操作系统在世界范围内得到了广...
  • qq_29864185
  • qq_29864185
  • 2017年01月17日 13:39
  • 1252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB,VC开发OPC客户程序必读!
举报原因:
原因补充:

(最多只允许输入30个字)