OPC Client 核心源码(MFC)
日期:2006-7-21 21:47:44 来源:本站整理
点击: 作者:未知
点击【 大 中 小 】放大字体.
好像技术一沾上工业,便有了很高的价值,大家三缄其口,谁都不点破这层窗户纸,好多的思路和源码都要从国外网站获得,国内总是有条件,有限制--就是不告诉你,怕教会徒弟,饿死师父吧。
WWW_PLCJS@_COM%-PLC-技.术_网
WWcW_PLCJS_COM-PLC-技.术_网
研究了N天,开发了一个基于我的组态后台的OPC客户端驱动,考虑到驱动的特殊性,所以只开发了同步接口操作。测试一段时间后,还可以。现把核心代码公开出来,有点VC基础的人可以直接拿来用。WW.W_PLCJS_COM-PLC-技.术_网
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
源码网址:http://blog.csdn.net/yefanqiu/archive/2005/12/02/542447.aspxWWcW_PLCJS_COM-PLC-技.术_网
以下是对《OPC Client 核心源码(MFC)》的回复:
WW.W_PLC※JS_C,OM-PL,C-技.术_网
匿名回复:WWW_PLCJS@_COM%-PLC-技.术_网
//*************************************************************************WWW_PLCJS_COM-PLC-技.术_网
//函 数 名:ConnectOPCWWW_PL※CJS_COM-PLC-技.术_网
//所属类名:COPCClienWWW_PL※CJS_COM-PLC-技.术_网
//输 入:CString SvrName——可——编——程——控-制-器-技——术——门——户
//输 出:WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
//功能描述:连接OPC服务器WWW_PL※CJS_COM-PLC-技.术_网
//全局变量:WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
//调用模块:plcjs.技.术_网
//作 者:叶帆WWW_PLC※JS_COM-PmLC-技.术_网
//日 期:2005年12月1日P.L.C.技.术.网——可编程控制器技术门户
//修 改 人:WWW_PLC※JS_COM-PmLC-技.术_网
//日 期:plcjs.技.术_网
//版 本:——可——编——程——控-制-器-技——术——门——户
//*************************************************************************WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
long COPCClient::ConnectOPC(CString cSvrName)WWcW_PLCJS_COM-PLC-技.术_网
{WWW_PL※CJS_COM-PLC-技.术_网
HRESULT hr;WW.W_PLCJS_COM-PLC-技.术_网
CLSID clsid;WWW_P※LCJS_COM-PLC-)技.术_网
WCHAR wszProgID [512];WWW_PLCJS@_COM%-PLC-技.术_网
P.L.C.技.术.网——可编程控制器技术门户
//----------------------------------WWW_PL※CJS_COM-PLC-技.术_网
//初始化COMWWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
hr =CoInitialize(NULL);P.L.C.技.术.网——可编程控制器技术门户
if (FAILED(hr)) return 8; //com初始化失败WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
——可——编——程——控-制-器-技——术——门——户
//-----------------------------------WWW.PLCJS.COM——可编程控制器技术门户
if(strSvrName!="") //判断是否已经连接OPCW1WW_P4LCJS_COM-PLC-技.术_网
{WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
if (strSvrName==cSvrName) return 2; //OPC服务器已经连接WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
else return 4; //只能连接一个OPC服务器 plcjs.技.术_网
}WW.W_PLC※JS_C,OM-PL,C-技.术_网
//-----------------------------------WWW.PLCJS.COM——可编程控制器技术门户
WWW_PLCJS_COM-PLC-技.术_网
tryP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
{WWcW_PLCJS_COM-PLC-技.术_网
WWW_P※LCJS_CO※M-PLC-技-.术_网
//----------------------------------WWW.PLCJS.COM——可编程控制器技术门户
//把字符串形式的对象标识转化为CLSID结构形式plcjs.技.术_网
_mbstowcsz (wszProgID, cSvrName, sizeof (wszProgID) / sizeof (WCHAR));WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
hr= CLSIDFromProgID(wszProgID, // [in]W1WW_P4LCJS_COM-PLC-技.术_网
&clsid); // [out]WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
if(FAILED(hr))WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
{WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
CoTaskMemFree(&clsid); //COM 内存释放函数WWW_PLCJS_COM-PLC-技.术_网
CoUninitialize(); //终止COM库功能服务WWcW_PLCJS_COM-PLC-技.术_网
return 16; //获取clsid失败WW.W_PLC※JS_C,OM-PL,C-技.术_网
}WWcW_PLCJS_COM-PLC-技.术_网
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
//--------------------------------WW.W_PLC※JS_C,OM-PL,C-技.术_网
//创建Server实例WW.W_PLCJS_COM-PLC-技.术_网
hr=CoCreateInstance(clsid, //[in]WWW_P※LCJS_COM-PLC-)技.术_网
NULL, //[in]WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
CLSCTX_SERVER, //[in]WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
IID_IUnknown, //[in]WWW_PLCJS@_COM%-PLC-技.术_网
(void**)&pUNK); //[out]P.L.C.技.术.网——可编程控制器技术门户
WW.W_PLC※JS_C,OM-PL,C-技.术_网
if(FAILED(hr))——可——编——程——控-制-器-技——术——门——户
{WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
CoTaskMemFree(&clsid);W1WW_P4LCJS_COM-PLC-技.术_网
if(pUNK) pUNK->Release();WWW_PLCJS@_COM%-PLC-技.术_网
pUNK=NULL;WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
CoUninitialize();W1WW_P4LCJS_COM-PLC-技.术_网
return 32; //创建Server实例失败WWW_P※LCJS_COM-PLC-)技.术_网
}WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
//------------------------------------WWcW_PLCJS_COM-PLC-技.术_网
//查询pOPC接口WWW_PLCJS_COM-PLC-技.术_网
hr=pUNK->QueryInterface(IID_IOPCServer,// [in]W1WW_P4LCJS_COM-PLC-技.术_网
(void**)&pOPC);// [out]WWW.PLCJS.COM——可编程控制器技术门户
if(FAILED(hr))WWW_PLCJS_COM-PLC-技.术_网
{——可——编——程——控-制-器-技——术——门——户
CoTaskMemFree(&clsid);——可——编——程——控-制-器-技——术——门——户
if(pOPC) pOPC->Release();WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
if(pUNK) pUNK->Release();WWW_PLC※JS_COM-PmLC-技.术_网
pOPC=NULL;WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
pUNK=NULL;WWW_PL※CJS_COM-PLC-技.术_网
return 64; //查询pOPC接口失败WWcW_PLCJS_COM-PLC-技.术_网
}WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
W1WW_P4LCJS_COM-PLC-技.术_网
CoTaskMemFree(&clsid);WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
WWW_P※LCJS_COM-PLC-)技.术_网
//---------------------------WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
strSvrName=cSvrName; //赋值当前OPC服务名称WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW_PLCJS_COM-PLC-技.术_网
}WWW.PLCJS.COM——可编程控制器技术门户
catch(...)P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
{P.L.C.技.术.网——可编程控制器技术门户
return 128; //连接服务器时出现严重错误WWW.PLCJS.COM——可编程控制器技术门户
}WWW_PLCJS@_COM%-PLC-技.术_网
return 0; //成功WWW_P※LCJS_CO※M-PLC-技-.术_网
}WWW.PLCJS.COM——可编程控制器技术门户
P.L.C.技.术.网——可编程控制器技术门户
//*************************************************************************——可——编——程——控-制-器-技——术——门——户
//函 数 名:DisconnectOPCWWW_P※LCJS_COM-PLC-)技.术_网
//所属类名:COPCClientW1WW_P4LCJS_COM-PLC-技.术_网
//输 入:plcjs.技.术_网
//输 出:longplcjs.技.术_网
//功能描述:断开OPC服务器WWW_PLCJS_COM-PLC-技.术_网
//全局变量:——可——编——程——控-制-器-技——术——门——户
//调用模块:WW.W_PLCJS_COM-PLC-技.术_网
//作 者:叶帆WWW_PL※CJS_COM-PLC-技.术_网
//日 期:2005年12月1日WWW.PLCJS.COM——可编程控制器技术门户
//修 改 人:WWW_P※LCJS_CO※M-PLC-技-.术_网
//日 期:P.L.C.技.术.网——可编程控制器技术门户
//版 本:P.L.C.技.术.网——可编程控制器技术门户
//*************************************************************************WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
long COPCClient::DisconnectOPC()P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
{W1WW_P4LCJS_COM-PLC-技.术_网
if(strSvrName=="") return 1; //OPC服务器尚未连接WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
WWW_PLCJS_COM-PLC-技.术_网
HRESULT *pErrors = NULL;WWW_PLC※JS_COM-PmLC-技.术_网
DWORD dwCount=mIOMDevice->mItem.GetSize(),i;WWW_P※LCJS_COM-PLC-)技.术_网
WWW_P※LCJS_COM-PLC-)技.术_网
strSvrName=""; //服务器名称清空WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
//---------------P.L.C.技.术.网——可编程控制器技术门户
OPCHANDLE *phServer = NULL;WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
//停止异步操作WWW_PLC※JS_COM-PmLC-技.术_网
pIAsync2->SetEnable(false);WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
W1WW_P4LCJS_COM-PLC-技.术_网
//移除标签WWW.PLCJS.COM——可编程控制器技术门户
phServer = (OPCHANDLE *) CoTaskMemAlloc (dwCount * sizeof (OPCHANDLE));WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
for(i=0;iWWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) WW.W_PLC※JS_C,OM-PL,C-技.术_网
pIItemMgt->RemoveItems(dwCount, // [in]
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
phServer, // [in]
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
&pErrors); // [out]
WWW.PLCJS.COM——可编程控制器技术门户
plcjs.技.术_网
arrhServer.RemoveAll();
WWW_P※LCJS_CO※M-PLC-技-.术_网
arrhServer.FreeExtra();
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
arrItemType.RemoveAll();
WWW_PLCJS@_COM%-PLC-技.术_网
arrItemType.FreeExtra();
WWW_PLCJS@_COM%-PLC-技.术_网
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
//删除组
WWW.PLCJS.COM——可编程控制器技术门户
pOPC->RemoveGroup(hServer, //[in]
WWcW_PLCJS_COM-PLC-技.术_网
true); //[in]
P.L.C.技.术.网——可编程控制器技术门户
WWW_PL※CJS_COM-PLC-技.术_网
//---------------
P.L.C.技.术.网——可编程控制器技术门户
CoTaskMemFree(&hServer);
WWcW_PLCJS_COM-PLC-技.术_网
CoTaskMemFree(&hGroup);
WWW_P※LCJS_CO※M-PLC-技-.术_网
WW.W_PLC※JS_C,OM-PL,C-技.术_网
if(pErrors) CoTaskMemFree(pErrors);
WWW_P※LCJS_CO※M-PLC-技-.术_网
if(pResults) CoTaskMemFree(pResults);
P.L.C.技.术.网——可编程控制器技术门户
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
if(pIAsync2) pIAsync2->Release();
WW.W_PLCJS_COM-PLC-技.术_网
if(pISync) pISync->Release();
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
if(pIItemMgt) pIItemMgt->Release();
WWW_PLC※JS_COM-PmLC-技.术_网
if(pOPC) pOPC->Release();
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
if(pUNK) pUNK->Release();
WW.W_PLCJS_COM-PLC-技.术_网
WWW_PLC※JS_COM-PmLC-技.术_网
pOPC=NULL;
WW.W_PLC※JS_C,OM-PL,C-技.术_网
pUNK=NULL;
W1WW_P4LCJS_COM-PLC-技.术_网
pIItemMgt=NULL;
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
pIAsync2=NULL;
——可——编——程——控-制-器-技——术——门——户
pISync=NULL;
WW.W_PLCJS_COM-PLC-技.术_网
hGroup=0;
WW.W_PLC※JS_C,OM-PL,C-技.术_网
hServer=0;
W1WW_P4LCJS_COM-PLC-技.术_网
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
CoUninitialize(); //关闭COM
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WWW_PL※CJS_COM-PLC-技.术_网
return 0;
WWcW_PLCJS_COM-PLC-技.术_网
}
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW.PLCJS.COM——可编程控制器技术门户
WWW_PLCJS@_COM%-PLC-技.术_网
//*************************************************************************
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
//函 数 名:AddGroup
W1WW_P4LCJS_COM-PLC-技.术_网
//所属类名:COPCClient
plcjs.技.术_网
//输 入:
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
//输 出:long
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
//功能描述:添加组
P.L.C.技.术.网——可编程控制器技术门户
//全局变量:
plcjs.技.术_网
//调用模块:
WWW_P※LCJS_CO※M-PLC-技-.术_网
//作 者:叶帆
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
//日 期:2005年12月1日
plcjs.技.术_网
//修 改 人:
WWW_PL※CJS_COM-PLC-技.术_网
//日 期:
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
//版 本:
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
//*************************************************************************
WWW.PLCJS.COM——可编程控制器技术门户
long COPCClient::AddGroup()
P.L.C.技.术.网——可编程控制器技术门户
{
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
HRESULT hr;
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WCHAR wchBuffer[255];
WWW_PL※CJS_COM-PLC-技.术_网
long lBias=0;
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
float fDeadband=0;
WWW_PLCJS@_COM%-PLC-技.术_网
DWORD dwRevUpdateRate=0;
W1WW_P4LCJS_COM-PLC-技.术_网
IUnknown *pUNKgroup; //组接口指针
——可——编——程——控-制-器-技——术——门——户
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
MultiByteToWideChar(CP_ACP, 0, mIOMDevice->ConfigMessage, -1, wchBuffer, 255);
WWW_PLC※JS_COM-PmLC-技.术_网
——可——编——程——控-制-器-技——术——门——户
//添加组
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
hr = pOPC->AddGroup (
WW.W_PLCJS_COM-PLC-技.术_网
wchBuffer, // [in] group name
WWcW_PLCJS_COM-PLC-技.术_网
TRUE, // [in] active state
plcjs.技.术_网
mIOMDevice->Scantime, // [in] requested update rate
plcjs.技.术_网
hGroup, // [in] our handle to this group
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
&lBias, // [unique,in] time bias
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
&fDeadband, // [in] percent deadband
WWW_PLC※JS_COM-PmLC-技.术_网
1033, // [in] requested language ID
WWW_PLCJS@_COM%-PLC-技.术_网
&hServer, // [out] server handle to this group
WWW_P※LCJS_CO※M-PLC-技-.术_网
&dwRevUpdateRate, // [out] revised update rate
WW.W_PLC※JS_C,OM-PL,C-技.术_网
IID_IUnknown, // [in] REFIID riid,
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
(LPUNKNOWN*)&pUNKgroup); // [out, iid_is(riid)] LPUNKNOWN *pUNKgroup
WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW_PLCJS_COM-PLC-技.术_网
if(FAILED(hr)) //加入组失败
plcjs.技.术_网
{
WWW_PLC※JS_COM-PmLC-技.术_网
CoTaskMemFree(&hServer);
plcjs.技.术_网
CoTaskMemFree(&dwRevUpdateRate);
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
if(pUNKgroup) pUNKgroup->Release();
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
pUNKgroup=NULL;
WW.W_PLC※JS_C,OM-PL,C-技.术_网
return 1;
WW.W_PLCJS_COM-PLC-技.术_网
}
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
WWW_PLC※JS_COM-PmLC-技.术_网
//--------------------------------------
WWW_PLCJS@_COM%-PLC-技.术_网
//查询pIItemMgt
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
hr=pUNKgroup->QueryInterface(IID_IOPCItemMgt, // [in]
WWW_P※LCJS_COM-PLC-)技.术_网
(void**)&pIItemMgt); // [out]
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
——可——编——程——控-制-器-技——术——门——户
//查询失败
WWW.PLCJS.COM——可编程控制器技术门户
if(FAILED(hr))
WWW_P※LCJS_COM-PLC-)技.术_网
{
WWW_P※LCJS_COM-PLC-)技.术_网
CoTaskMemFree(&hServer);
WWW_P※LCJS_CO※M-PLC-技-.术_网
CoTaskMemFree(&dwRevUpdateRate);
WW.W_PLCJS_COM-PLC-技.术_网
if(pUNKgroup) pUNKgroup->Release();
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
pUNKgroup=NULL;
WWcW_PLCJS_COM-PLC-技.术_网
if(pIItemMgt) pIItemMgt->Release();
WWW_PLCJS_COM-PLC-技.术_网
pIItemMgt=NULL;
WWW_PL※CJS_COM-PLC-技.术_网
return 2;
W1WW_P4LCJS_COM-PLC-技.术_网
}
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
if(pUNKgroup) pUNKgroup->Release();
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
pUNKgroup=NULL;
WWcW_PLCJS_COM-PLC-技.术_网
CoTaskMemFree(&dwRevUpdateRate);
WWW_PLC※JS_COM-PmLC-技.术_网
return 0;
WWW_PLC※JS_COM-PmLC-技.术_网
}
WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW_PL※CJS_COM-PLC-技.术_网
//*************************************************************************
——可——编——程——控-制-器-技——术——门——户
//函 数 名:AddItem
P.L.C.技.术.网——可编程控制器技术门户
//所属类名:COPCClient
——可——编——程——控-制-器-技——术——门——户
//输 入:
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
//输 出:long
WW.W_PLCJS_COM-PLC-技.术_网
//功能描述:加入项
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
//全局变量:
WW.W_PLCJS_COM-PLC-技.术_网
//调用模块:
WWW_PLC※JS_COM-PmLC-技.术_网
//作 者:叶帆
WWW_PL※CJS_COM-PLC-技.术_网
//日 期:2005年12月1日
WW.W_PLCJS_COM-PLC-技.术_网
//修 改 人:
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
//日 期:
WW.W_PLCJS_COM-PLC-技.术_网
//版 本:
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
//*************************************************************************
WWW_PLCJS@_COM%-PLC-技.术_网
long COPCClient::AddItem()
WWcW_PLCJS_COM-PLC-技.术_网
{
WW.W_PLCJS_COM-PLC-技.术_网
HRESULT hr;
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
OPCITEMDEF *pItemArray = NULL;
WWcW_PLCJS_COM-PLC-技.术_网
WW.W_PLC※JS_C,OM-PL,C-技.术_网
HRESULT *pErrors = NULL;
WWW_PLCJS@_COM%-PLC-技.术_网
DWORD dwCount,dwLen,i;
WWW_PLCJS_COM-PLC-技.术_网
WWW_PL※CJS_COM-PLC-技.术_网
//--------------------------------------
WWW_PL※CJS_COM-PLC-技.术_网
//添加标签
——可——编——程——控-制-器-技——术——门——户
dwCount=mIOMDevice->mItem.GetSize();
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
pItemArray = (OPCITEMDEF *) CoTaskMemAlloc (dwCount * sizeof (OPCITEMDEF)); //分配内存
WWW_PL※CJS_COM-PLC-技.术_网
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
for(i=0;i
plcjs.技.术_网 {
WWW_PLC※JS_COM-PmLC-技.术_网
dwLen = lstrlen (mIOMDevice->mItem[i].strTab);
P.L.C.技.术.网——可编程控制器技术门户
pItemArray [i].szItemID = (WCHAR *) CoTaskMemAlloc ((dwLen + 1) * sizeof (WCHAR));
WWW_PLC※JS_COM-PmLC-技.术_网
MultiByteToWideChar (CP_ACP, 0, mIOMDevice->mItem[i].strTab, -1, pItemArray [i].szItemID, dwLen + 1);
plcjs.技.术_网
pItemArray [i].szAccessPath=NULL;
——可——编——程——控-制-器-技——术——门——户
pItemArray [i].bActive = true; // active state
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
pItemArray [i].hClient = (OPCHANDLE)i; // our handle to item
WWcW_PLCJS_COM-PLC-技.术_网
pItemArray [i].dwBlobSize = 0; // no blob support
WWW_PL※CJS_COM-PLC-技.术_网
pItemArray [i].pBlob = NULL;
WW.W_PLCJS_COM-PLC-技.术_网
pItemArray [i].vtRequestedDataType =VT_EMPTY; // Requested data type
WWW_P※LCJS_COM-PLC-)技.术_网
pItemArray [i].wReserved=0;
WWW_PLCJS@_COM%-PLC-技.术_网
}
P.L.C.技.术.网——可编程控制器技术门户
WWW_PL※CJS_COM-PLC-技.术_网
//添加
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
hr = pIItemMgt->AddItems (dwCount, //[in] DWORD dwCount,Item count
P.L.C.技.术.网——可编程控制器技术门户
pItemArray, //[in, size_is(dwCount)] OPCITEMDEF * pItemArray, Array of item definition structures
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
&pResults, //[out, size_is(,dwCount)] OPCITEMRESULT ** ppAddResults, Result array
——可——编——程——控-制-器-技——术——门——户
&pErrors); //[out, size_is(,dwCount)] HRESULT ** ppErrors Error array
WWW.PLCJS.COM——可编程控制器技术门户
//添加失败
W1WW_P4LCJS_COM-PLC-技.术_网
if(FAILED(hr))
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
{
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
if(pResults) CoTaskMemFree(pResults);
plcjs.技.术_网
if(pErrors) CoTaskMemFree(pErrors);
WW.W_PLC※JS_C,OM-PL,C-技.术_网
CoTaskMemFree(&hServer);
WWW.PLCJS.COM——可编程控制器技术门户
CoTaskMemFree(pItemArray);
WWW_PLCJS_COM-PLC-技.术_网
return 2;
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
}
WWcW_PLCJS_COM-PLC-技.术_网
WWW_P※LCJS_CO※M-PLC-技-.术_网
//同步接口
WWW.PLCJS.COM——可编程控制器技术门户
hr=pIItemMgt->QueryInterface(IID_IOPCSyncIO, // [in]
plcjs.技.术_网
(void**)&pISync); // [out]
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
W1WW_P4LCJS_COM-PLC-技.术_网
if(FAILED (hr))
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
{
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
CoTaskMemFree(&hServer);
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
if(pISync) pISync->Release();
WWW_PLCJS_COM-PLC-技.术_网
if(pResults) CoTaskMemFree(pResults);
WWcW_PLCJS_COM-PLC-技.术_网
if(pErrors) CoTaskMemFree(pErrors);
WW.W_PLC※JS_C,OM-PL,C-技.术_网
pISync=NULL;
WWcW_PLCJS_COM-PLC-技.术_网
return 3; //查询pISync接口失败
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
}
WW.W_PLC※JS_C,OM-PL,C-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
//异步接口
WWW_P※LCJS_COM-PLC-)技.术_网
hr=pIItemMgt->QueryInterface(IID_IOPCAsyncIO2,(void**)&pIAsync2);
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
if(FAILED (hr))
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
{
WWW_PLCJS@_COM%-PLC-技.术_网
CoTaskMemFree(&hServer);
P.L.C.技.术.网——可编程控制器技术门户
if(pIAsync2) pIAsync2->Release();
WW.W_PLC※JS_C,OM-PL,C-技.术_网
if(pResults) CoTaskMemFree(pResults);
——可——编——程——控-制-器-技——术——门——户
if(pErrors) CoTaskMemFree(pErrors);
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
pIAsync2=NULL;
W1WW_P4LCJS_COM-PLC-技.术_网
return 4; //查询pIAsync2接口失败
WWW_PLCJS@_COM%-PLC-技.术_网
}
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
W1WW_P4LCJS_COM-PLC-技.术_网
//---------------------
WWW_P※LCJS_COM-PLC-)技.术_网
arrhServer.SetSize(dwCount);
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
arrItemType.SetSize(dwCount);
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWcW_PLCJS_COM-PLC-技.术_网
for(i=0;i
WWW_PLCJS_COM-PLC-技.术_网 载入中...