利用OPC实现VC应用程序与PLC的数据交换

[09-12 18:30:08]   来源:http://www.88dzw.com  EDA/PLD   阅读:8869

文章摘要:访问路径:项目名;更新速率:一个以秒为单位的速率;条目:标记名。可以通过查看RSView32的标签数据库获得。4 VC应用程序作为OPC客户端的程序实现在VC环境中使用定制接口开发OPC客户应用程序,下面是程序实现的关键步骤。4.1 包含OPC头文件开发OPC客户应用程序,除了需要OPC接口外,还需要在程序中包含OPC标准库文件,可以从OPC基金会网站(网址:www.opcfoundation.org)下载这些文件:#include "opcda_i.c" OPC数据存取接口#include "opcda.h" OPC数据存取2.0头

利用OPC实现VC应用程序与PLC的数据交换,标签:eda技术,eda技术实用教程,http://www.88dzw.com

  访问路径:项目名;

  更新速率:一个以秒为单位的速率;

  条目:标记名。可以通过查看RSView32的标签数据库获得。

  4  VC应用程序作为OPC客户端的程序实现

  在VC环境中使用定制接口开发OPC客户应用程序,下面是程序实现的关键步骤。

  4.1  包含OPC头文件

  开发OPC客户应用程序,除了需要OPC接口外,还需要在程序中包含OPC标准库文件,可以从OPC基金会网站(网址:www.opcfoundation.org)下载这些文件:

  #include "opcda_i.c"    OPC数据存取接口

  #include "opcda.h"      OPC数据存取2.0头文件

  #include "opccomn_i.c"  OPC公共接口定义

  #include "opccomn.h"    OPC公共头文件

  4.2  初始化COM支持库

  由于OPC是基于COM技术制定,所以在使用接口类之前必须首先使用CoInitialize(NULL)函数初始化COM库,如果成功,函数返回值等于S_ OK。

  4.3  连接opc服务器

  OPC 客户能够连接到OPC服务器上,并建立OPC组和OPC数据项,这是OPC数据访问的基础,如果没有这个机制,数据访问的其它机能不可能实现[4]。连接 OPC服务器,OPC客户需要事先指定计算机名(如果OPC服务器和OPC客户不在同一台计算机上)和OPC数据访问服务器名 (RSI.RSView32OPCTagServer)。实现代码如下:

  ConnectToServer(/*in */LPOLESTR ProgID,/*in*/ BOOL IsRemote,/*out */ IUnknown **ppUnknown)

  {

  CLSID OPCCLSID;

  HRESULT hRet=CLSIDFromProgID(ProgID,&OPCCLSID);

  //将字符串ProgID转换为唯一OPCCLSID

  if(IsRemote)

  //opc服务器和opc客户不在同一台计算机上

  {

  COSERVERINFO ServerInfo;

  memset(&ServerInfo,0,sizeof(ServerInfo));

  ServerInfo.pwszName=T2OLE("ServerComouter");

  MULTI_QI qi[1];

  memset(qi, 0, sizeof(qi));

  qi[0].pIID=&IID_IUnknown;

  HRESULT hRet=CoCreateInstanceEx(OPCCLSID,NULL,CLSCTX_REMOTE_SERVER,

  &ServerInfo,1,qi);

  *ppUnknown=qi[0].pItf;

  }

  else

  //opc服务器和opc客户在同一台计算机上

  {

  hRet=CoCreateInstance(OPCCLSID,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown,

  (void **)ppUnknown);

  }

  }

  4.4  创建OPC组

  IOPCServer接口的AddGroup()方法可以创建一个有指定名称和属性的OPC组。在调用该方法之前,可以使用上一步得到的Iunknown接口指针,通过QueryInterface()方法请求IOPCServer接口指针。代码如下:

  ppUnknown->QueryInterface(IID_IOPCServer,(void **)&pServer);

  //得到IOPCServer接口指针

  pServer->AddGroup(L"",TRUE,500,1235,&lTimeBias,&fTemp,0,&hOPCServerGroup,  &dwActualRate,IID_IOPCItemMgt,& pOPCItemMgt);

  4.5  添加数据项

  IOPCItemMgt接口的AddItem()方法可以添加具有特殊属性的指定数量的数据项。

  pOPCItemMgt->AddItems(ItemNumber,ItemArray,

  (OPCITEMRESULT**)&pItemResult,(HRESULT **)&pErrors);

  ItemArray 为OPCITEMDEF类型结构数组,它包含数据项的详细信息,客户需要知道要进行交换的数据在RSView32标签数据库中的名称、数据类型及作为 OPC服务器的RSView32项目名称。添加数据项之前,要用这些数据项信息对ItemArray结构数组进行初始化。

  4.6  数据交换

  成功地增加完所需要的数据项后,OPC客户(VC应用程序)和OPC服务器(RSView32)就可以进行数据交换了。在数据量不大的情况下,可以使用 IOPCSyncIO同步接口的Write()和Read()两个方法进行数据的读写操作,从而实现OPC客户(VC应用程序)和OPC服务器 (RSView32)之间的数据交换。代码如下:

  ppUnknown->QueryInterface(IID_IOPCSyncIO,(void **)&pOPCSync);

上一页  [1] [2] [3]  下一页


Tag:EDA/PLDeda技术,eda技术实用教程EDA/PLD

《利用OPC实现VC应用程序与PLC的数据交换》相关文章

分类导航
最新更新
热门排行