您当前的位置:五五电子网电子知识plc技术PLC原理利用OPC实现VC应用程序和PLC的数据交换 正文
利用OPC实现VC应用程序和PLC的数据交换

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

点击数:7266 次   录入时间:03-04 11:43:36   整理:http://www.55dianzi.com   PLC原理
  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);
//得到IOPCSyncIO接口指针
pOPCSync->Read(OPC_DS_CACHE,ReadNumber,hServerRead,&pItemValue,&pErrors);
//读ReadNumber个数据
pOPCSync->Write(WriteNumber,hServerWrite,WriteValue,&pErrors);
//写WriteNumber个数据

  4.7  释放接口指针

  在VC应用程序停止运行之前必须使用Release()方法删除已创建的OPC对象并释放内存。

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


本文关键字:应用程序  PLC原理plc技术 - PLC原理