单位速率;
条目:标记名。可以查看RSView32标签数据库获。
4 VC应用程序作为OPC客户端程序实现
VC环境中使用定制接口开发OPC客户应用程序,下面是程序实现关键步骤。
4.1 包含OPC头文件
开发OPC客户应用程序,需要OPC接口外,还需要程序中包含OPC标准库文件,可以从OPC基金会网站(网址: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数据访问基础,没有这个机制,数据访问其它机能不可能实现。连接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));
ServerI
nfo.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对象并释放内存。
5 结束语
OPC技术规范把硬件供应商和应用软件开发者分离开来,使双方
工作效率都有了很大提高。软件开发商无需了解硬件实质和操作过程,就能访问OP
C数据服务器中数据,尤其是开发商已使用了组态软件进行实时监控过程控制系统基础上,用C++等高级语言开发系统时,大大简化了过去从设备传输数据复杂过程。某铝厂自动配料系统开发中,应用OPC技术方便实现了VC应用程序和RSView32数据交换,间接实现了VC应用程序与PLC通信,获了很好结果。