利用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);
- 上一篇:用FPGA实现高清视频去隔行功能
《利用OPC实现VC应用程序与PLC的数据交换》相关文章
- › 利用OPC实现VC应用程序与PLC的数据交换
- 在百度中搜索相关文章:利用OPC实现VC应用程序与PLC的数据交换
- 在谷歌中搜索相关文章:利用OPC实现VC应用程序与PLC的数据交换
- 在soso中搜索相关文章:利用OPC实现VC应用程序与PLC的数据交换
- 在搜狗中搜索相关文章:利用OPC实现VC应用程序与PLC的数据交换