📄 connectionpoint.cpp
字号:
//**************************************************************************
//
// Copyright (c) FactorySoft, INC. 1996-1998, All Rights Reserved
//
//**************************************************************************
//
// Filename : ConnectionPoint.cpp
// $Author : Jim Hansen
//
// Description: Callback class for OPC Data Access 2.0
//
//
//**************************************************************************
#include "stdafx.h"
#include "mexOPC.h"
#include "OPC ClientDoc.h"
#include <afxmt.h>
CComModule _Module; // just needed to keep ATL happy
extern OPCClientDoc* pDoc;
double DoubleItemValue[1000];
CString CStringItemValue[1000]={""};
extern CArray<Item*,Item*> clientitems1;
CEvent * event = new CEvent;
//**************************************************************************
// Called by the server at the update rate when data changes
STDMETHODIMP OPCCallback::OnDataChange(
DWORD Transid,
OPCHANDLE grphandle,
HRESULT masterquality,
HRESULT mastererror,
DWORD count,
OPCHANDLE * clienthandles,
VARIANT * values,
WORD * quality,
FILETIME * time,
HRESULT * errors)
{
for( DWORD index=0; index<count; index++ )
{
if( SUCCEEDED(errors[index]) )
{
Item* pItem = (Item*)clienthandles[index];
if( pItem )
{
pItem->value = values[index];
pItem->quality = quality[index];
pItem->timestamp = time[index];
}
}
}
int n1 =clientitems1.GetSize();
for(int i=0;i<n1;i++)
{
switch (clientitems1[i]->value.vt)
{
case VT_I2: //SHORT
{
DoubleItemValue[i] = double(clientitems1.ElementAt(i)->value.iVal);
break;
}
case VT_I4: //LONG
{
DoubleItemValue[i] = double(clientitems1.ElementAt(i)->value.iVal);
break;
}
case VT_R4: //Float
{
DoubleItemValue[i] = double(clientitems1.ElementAt(i)->value.fltVal);
break;
}
case VT_R8: //Double
{
DoubleItemValue[i] = double(clientitems1.ElementAt(i)->value.dblVal);
break;
}
case VT_BOOL:
{
DoubleItemValue[i] =clientitems1.ElementAt(i)->value.boolVal;
break;
}
case VT_UI2: //WORD
{
DoubleItemValue[i] =clientitems1.ElementAt(i)->value.uiVal;
break;
}
case VT_UI4: //DWORD
{
DoubleItemValue[i] =clientitems1.ElementAt(i)->value.ulVal;
break;
}
case VT_BSTR: //String
{
CStringItemValue[i]=clientitems1.ElementAt(i)->value.bstrVal;
break;
}
}
}
PostMessage(pDoc->hView, WM_OPCDATA, 0, 0);
event->SetEvent();
return S_OK;
}
//**************************************************************************
// Called by the server to complete an ASyncIO2::Read
STDMETHODIMP OPCCallback::OnReadComplete(
DWORD Transid,
OPCHANDLE grphandle,
HRESULT masterquality,
HRESULT mastererror,
DWORD count,
OPCHANDLE * clienthandles,
VARIANT * values,
WORD * quality,
FILETIME * time,
HRESULT * errors)
{
ASSERT( Transid == 3 ); // test only
for( DWORD index=0; index<count; index++ )
{
if( SUCCEEDED(errors[index]) )
{
Item* pItem = (Item*)clienthandles[index];
if( pItem )
{
pItem->value = values[index];
pItem->quality = quality[index];
pItem->timestamp = time[index];
}
}
}
PostMessage(pDoc->hView, WM_OPCDATA, 0, 0);
return S_OK;
}
//**************************************************************************
// Called by the server to complete an ASyncIO2::Write
STDMETHODIMP OPCCallback::OnWriteComplete(
DWORD Transid,
OPCHANDLE grphandle,
HRESULT mastererr,
DWORD count,
OPCHANDLE * clienthandles,
HRESULT * errors)
{
ASSERT( Transid == 2 ); // test only
for( DWORD index=0; index<count; index++ )
{
if( FAILED(errors[index]) )
{
Item* pItem = (Item*)clienthandles[index];
PostMessage(pDoc->hView, WM_OPCWRITE, errors[index], 0);
}
}
return S_OK;
}
//**************************************************************************
// Called by the server to complete an ASyncIO2::Cancel
STDMETHODIMP OPCCallback::OnCancelComplete(
DWORD transid,
OPCHANDLE grphandle)
{
return S_OK;
}
//**************************************************************************
// Called by 2.0 servers when shutting down.
STDMETHODIMP OPCShutdown::ShutdownRequest(LPCWSTR szReason)
{
reason = szReason;
PostMessage(pDoc->hView, WM_OPCSHUTDOWN, (WPARAM)reason.GetBuffer(0), 0);
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -