?? callback.cpp
字號:
//---------------------------------------------------------
// (c) COPYRIGHT 2003,2004 http://www.opc-china.com INC.
// ALL RIGHTS RESERVED
// Original Author:Jigang Si
// Original Author Email:economic@126.com
//---------------------------------------------------------
#include "stdafx.h" // for OPC: include MFC, ATL and OPC header files - for OPC only
#include "AsynOpc.h" // include class declaration for application class
#include "AsynOpcDlg.h" // include class declaration of dialog class
#include "Callback.h" // for OPC: include class declaration fpr this callback class
CString GetQualityText(UINT qnr);
// for OPC: prototype for a helper function to get OPC quality
// text description from quality code
float value[MAXITEMNUM];
CString quility[MAXITEMNUM];
CString timestamp[MAXITEMNUM];
float readValue[MAXITEMNUM];
CString readQulity[MAXITEMNUM];
CString readTS[MAXITEMNUM];
HRESULT writeRes[MAXITEMNUM];
int changeFlag,readFlag,writeFlag;
/////////////////////////////////////////////////////////////////////////////
//
// IOPCDataCallback - implementation
STDMETHODIMP COPCDataCallback:: OnDataChange(
/* [in] */ DWORD dwTransid,
/* [in] */ OPCHANDLE hGroup,
/* [in] */ HRESULT hrMasterquality,
/* [in] */ HRESULT hrMastererror,
/* [in] */ DWORD dwCount,
/* [size_is][in] */ OPCHANDLE __RPC_FAR *phClientItems,
/* [size_is][in] */ VARIANT __RPC_FAR *pvValues,
/* [size_is][in] */ WORD __RPC_FAR *pwQualities,
/* [size_is][in] */ FILETIME __RPC_FAR *pftTimeStamps,
/* [size_is][in] */ HRESULT __RPC_FAR *pErrors)
{
DWORD i;
changeFlag=1;
for (i = 0; i<dwCount; i++)
{
value[i]=pvValues[i].fltVal ;
quility[i]=GetQualityText(pwQualities[i]);
timestamp[i]=COleDateTime( pftTimeStamps[i] ).Format();
}
return S_OK;
};
STDMETHODIMP COPCDataCallback::OnReadComplete(
/* [in] */ DWORD dwTransid,
/* [in] */ OPCHANDLE hGroup,
/* [in] */ HRESULT hrMasterquality,
/* [in] */ HRESULT hrMastererror,
/* [in] */ DWORD dwCount,
/* [size_is][in] */ OPCHANDLE __RPC_FAR *phClientItems,
/* [size_is][in] */ VARIANT __RPC_FAR *pvValues,
/* [size_is][in] */ WORD __RPC_FAR *pwQualities,
/* [size_is][in] */ FILETIME __RPC_FAR *pftTimeStamps,
/* [size_is][in] */ HRESULT __RPC_FAR *pErrors)
{
readFlag=1;
if (pErrors[0] == S_OK)
{
DWORD i;
for (i = 0; i<dwCount; i++)
{
readValue[i]=pvValues[i].fltVal ;
readQulity[i]=GetQualityText(pwQualities[i]);
readTS[i]=COleDateTime( pftTimeStamps[i] ).Format();
}
}
else
{
CString readQuality = GetQualityText(pErrors[0]);
}
return S_OK;
};
STDMETHODIMP COPCDataCallback::OnWriteComplete(
/* [in] */ DWORD dwTransid,
/* [in] */ OPCHANDLE hGroup,
/* [in] */ HRESULT hrMastererr,
/* [in] */ DWORD dwCount,
/* [size_is][in] */ OPCHANDLE __RPC_FAR *pClienthandles,
/* [size_is][in] */ HRESULT __RPC_FAR *pErrors)
{
writeFlag=1;
writeRes[0]=pErrors[0];
return S_OK;
};
CString GetQualityText(UINT qnr)
{ CString qstr;
switch(qnr)
{ case OPC_QUALITY_BAD: qstr = "BAD";
break;
case OPC_QUALITY_UNCERTAIN: qstr = "UNCERTAIN";
break;
case OPC_QUALITY_GOOD: qstr = "GOOD";
break;
case OPC_QUALITY_NOT_CONNECTED: qstr = "NOT_CONNECTED";
break;
case OPC_QUALITY_DEVICE_FAILURE:qstr = "DEVICE_FAILURE";
break;
case OPC_QUALITY_SENSOR_FAILURE:qstr = "SENSOR_FAILURE";
break;
case OPC_QUALITY_LAST_KNOWN: qstr = "LAST_KNOWN";
break;
case OPC_QUALITY_COMM_FAILURE: qstr = "COMM_FAILURE";
break;
case OPC_QUALITY_OUT_OF_SERVICE:qstr = "OUT_OF_SERVICE";
break;
case OPC_QUALITY_LAST_USABLE: qstr = "LAST_USABLE";
break;
case OPC_QUALITY_SENSOR_CAL: qstr = "SENSOR_CAL";
break;
case OPC_QUALITY_EGU_EXCEEDED: qstr = "EGU_EXCEEDED";
break;
case OPC_QUALITY_SUB_NORMAL: qstr = "SUB_NORMAL";
break;
case OPC_QUALITY_LOCAL_OVERRIDE:qstr = "LOCAL_OVERRIDE";
break;
default: qstr = "UNKNOWN ERROR";
}
return qstr;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -