?? opcdef.cpp
字號:
#include "stdafx.h"
#include "OPCDef.h"
#include "TagDef.h"
//函數聲明
HMODULE hLibrary;
INITOPCSERVER InitOPCSvr;
REGSERVER RegServer;
UNREGSERVER UnregServer;
ACTIVECODE ActiveCode;
CREATETAG CreateTag;
SETTAGPROPERTIES SetTagProperties;
UPDATETAGWITHTIMESTAMP UpdateTagWithTimeStamp;
ENABLEWRITENOTIFICATION EnableWriteNotification;
ENABLEDISCONNECTNOTIFICATION EnableDisconnectNotification;
SETSERVERSTATE SetServerState;
RUNSVR RunSvr;
UNINITOPCSVR UninitOPCSvr;
SHUTDOWN ShutDown;
CMainFrame *pMainFrame;
BOOL InitOPCDef()
{
//載入開發工具包
hLibrary=LoadLibrary(TEXT("opcdll.dll"));
//獲得工具包輸出函數指針
if(hLibrary)
{
//初始化服務器
InitOPCSvr=(INITOPCSERVER)GetProcAddress(hLibrary,TEXT("InitOPCSvr"));
//反初始化服務器
UninitOPCSvr=(UNINITOPCSVR)GetProcAddress(hLibrary,"UninitOPCSvr");
//注冊服務器
RegServer=(REGSERVER)GetProcAddress(hLibrary,"RegServer");
//注銷服務器
UnregServer=(UNREGSERVER)GetProcAddress(hLibrary,"UnregServer");
//序列號激活
ActiveCode=(ACTIVECODE)GetProcAddress(hLibrary,"ActiveCode");
//設置服務啟運行狀態
SetServerState=(SETSERVERSTATE)GetProcAddress(hLibrary,"SetServerState");
//運行服務器
RunSvr=(RUNSVR)GetProcAddress(hLibrary,"RunSvr");
ShutDown=(SHUTDOWN)GetProcAddress(hLibrary,"ShutDown");
//創建服務器標簽
CreateTag=(CREATETAG )GetProcAddress(hLibrary,"CreateTag");
//設置服務器標簽屬性
SetTagProperties=(SETTAGPROPERTIES )GetProcAddress(hLibrary,"SetTagProperties");
//更新服務器標簽數據
UpdateTagWithTimeStamp=(UPDATETAGWITHTIMESTAMP )GetProcAddress(hLibrary,"UpdateTagWithTimeStamp");
//設置寫方法函數
EnableWriteNotification=(ENABLEWRITENOTIFICATION )GetProcAddress(hLibrary,"EnableWriteNotification");
//設置斷開連接通知函數
EnableDisconnectNotification=(ENABLEDISCONNECTNOTIFICATION )GetProcAddress(hLibrary,"EnableDisconnectNotification");
return true;
}
else return false;
}
//釋放OPC工具包
BOOL FreeOPCDef()
{
if(!hLibrary)
{
return FreeLibrary(hLibrary);
}
else return true;
}
//寫回調函數
void __stdcall WriteTag(DWORD handle,VARIANT* pNewValue,DWORD* pDeviceError)
{
long I;
FILETIME ft;
*pDeviceError=-1;
GetSystemTimeAsFileTime(&ft);
for(I=0;I<=TagCount;I++)
{
if(TagList[I].hHWND==handle)
{
//是否調用UpdateTagWithTimeStamp由設備的驅動的通訊方式決定
TagList[I].vValue=*pNewValue;
TagList[I].lQuality=192;
TagList[I].ft= ft;
UpdateTagWithTimeStamp(TagList[I].hHWND,TagList[I].vValue,TagList[I].lQuality,TagList[I].ft);
*pDeviceError=0;
break;
}
}
}
//斷開連接通知回調函數
void __stdcall DisconnectSvr(DWORD Numbr)
{
//如果當前客戶端連接數量為零則關閉服務器
if(!Numbr)
{
UninitOPCSvr();
FreeLibrary(hLibrary);
exit(0);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -