📄 dasvrsdk.cpp
字号:
//---------------------------------------------------------------------------
#pragma hdrstop
#include "DASVRSDK.h"
#include "uMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
HMODULE hLibrary;
CREATESERVER CreateServer;
FREESERVER FreeServer;
SETSERVERSTATE SetServerState;
SETVERSIONINFO SetVersionInfo;
ACTIVECODE ActiveCode;
SHUTDOWN ShutDown;
REGSERVER RegServer;
UNREGSERVER UnregServer;
REGSERVERASSERVICE RegServerAsService;
REGTAG RegTag;
REGTAGEX RegTagEx;
UNREGTAG UnregTag;
SETTAGQUALIFIER SetTagQualifier;
ADDTAGPROPERTY AddTagProperty;
ADDTAGPROPERTYEX AddTagPropertyEx;
SETTAGPROPERTY SetTagProperty;
UPDATETAGWITHTIMESTAMP UpdateTagWithTimeStamp;
UPDATETAG UpdateTag;
SETWRITECALLBACK SetWriteCallback;
SETREADCALLBACK SetReadCallback;
SETWRITECALLBACKEX SetWriteCallbackEx;
SETREADCALLBACKEX SetReadCallbackEx;
SETSERVERNOTIFY SetServerNotify;
SETGROUPNOTIFY SetGroupNotify;
SETITEMNOTIFY SetItemNotify;
SETTAGNOTIFY SetTagNotify;
SETLOGNOTIFY SetLogNotify;
TAG TagList[32];
long TagCount;
long ServerCount;
BOOL InitOPCDef()
{
hLibrary=LoadLibrary(TEXT("ASOPCDA.DLL"));
if(hLibrary)
{
CreateServer=(CREATESERVER)GetProcAddress(hLibrary,TEXT("CreateServer"));
FreeServer=(FREESERVER)GetProcAddress(hLibrary,"FreeServer");
SetServerState=(SETSERVERSTATE)GetProcAddress(hLibrary,"SetServerState");
SetVersionInfo=(SETVERSIONINFO)GetProcAddress(hLibrary,"SetVersionInfo");
ActiveCode=(ACTIVECODE)GetProcAddress(hLibrary,"ActiveCode");
ShutDown=(SHUTDOWN)GetProcAddress(hLibrary,"ShutDown");
RegServer=(REGSERVER)GetProcAddress(hLibrary,"RegServer");
UnregServer=(UNREGSERVER)GetProcAddress(hLibrary,"UnregServer");
RegServerAsService=(REGSERVERASSERVICE)GetProcAddress(hLibrary,"RegServerAsService");
RegTag=(REGTAG)GetProcAddress(hLibrary,"RegTag");
RegTagEx=(REGTAGEX)GetProcAddress(hLibrary,"RegTagEx");
UnregTag=(UNREGTAG)GetProcAddress(hLibrary,"UnregTag");
SetTagQualifier=(SETTAGQUALIFIER)GetProcAddress(hLibrary,"SetTagQualifier");
AddTagProperty=(ADDTAGPROPERTY)GetProcAddress(hLibrary,"AddTagProperty");
AddTagPropertyEx=(ADDTAGPROPERTYEX)GetProcAddress(hLibrary,"AddTagPropertyEx");
SetTagProperty=(SETTAGPROPERTY)GetProcAddress(hLibrary,"SetTagProperty");
UpdateTagWithTimeStamp=(UPDATETAGWITHTIMESTAMP )GetProcAddress(hLibrary,"UpdateTagWithTimeStamp");
UpdateTag=(UPDATETAG )GetProcAddress(hLibrary,"UpdateTag");
SetWriteCallback=(SETWRITECALLBACK)GetProcAddress(hLibrary,"SetWriteCallback");
SetReadCallback=(SETREADCALLBACK)GetProcAddress(hLibrary,"SetReadCallback");
SetWriteCallbackEx=(SETWRITECALLBACKEX)GetProcAddress(hLibrary,"SetWriteCallbackEx");
SetReadCallbackEx=(SETREADCALLBACKEX)GetProcAddress(hLibrary,"SetReadCallbackEx");
SetServerNotify=(SETSERVERNOTIFY)GetProcAddress(hLibrary,"SetServerNotify");
SetGroupNotify=(SETGROUPNOTIFY)GetProcAddress(hLibrary,"SetGroupNotify");
SetItemNotify=(SETITEMNOTIFY)GetProcAddress(hLibrary,"SetItemNotify");
SetTagNotify=(SETTAGNOTIFY)GetProcAddress(hLibrary,"SetTagNotify");
SetLogNotify=(SETLOGNOTIFY)GetProcAddress(hLibrary,"SetLogNotify");
return true;
}
else return false;
}
BOOL FreeOPCDef()
{
if(!hLibrary)
{
return FreeLibrary(hLibrary);
}
else return true;
}
void __stdcall WriteCallback(DWORD handle,VARIANT pNewValue,DWORD* pDeviceError)
{
long I;
FILETIME ft;
*pDeviceError=-1;
GetSystemTimeAsFileTime(&ft);
for(I=0;I<=TagCount;I++)
{
if(TagList[I].Handle==handle)
{
TagList[I].Value=pNewValue;
TagList[I].Quality=192;
TagList[I].ft= ft;
UpdateTagWithTimeStamp(TagList[I].Handle,TagList[I].Value,TagList[I].Quality,TagList[I].ft);
Form1->TreeView1Click(NULL);
*pDeviceError=0;
break;
}
}
}
void __stdcall ReadCallback(DWORD handle,VARIANT* pNewValue,WORD* Quality, FILETIME* ft, DWORD* pDeviceError)
{
for(int I=0;I<=TagCount;I++)
{
if(TagList[I].Handle==handle)
{
*pNewValue= TagList[I].Value;
*Quality= TagList[I].Quality;
*ft=TagList[I].ft;
*pDeviceError=0;
return;
}
}
*pDeviceError=-1;
}
void __stdcall ServerNotify(DWORD Handle, WORD wOperate)
{
if(wOperate==0)
{
ServerCount++;
} else ServerCount--;
if (ServerCount==0)
{
Form1->Close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -