⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dasvrsdk.cpp

📁 OPC 开发工具包2.0.OPC工具包是用来简化OPC规范服务器开发的工具包
💻 CPP
字号:
#include "stdafx.h"
#include "DASVRSDK.h"

HMODULE hLibrary;
CREATESERVER CreateServer;
FREESERVER FreeServer;
SETSERVERSTATE SetServerState;
SETVERSIONINFO SetVersionInfo;
ACTIVECODE ActiveCode;
SHUTDOWN ShutDown;

REGSERVER RegServer;
UNREGSERVER UnregServer;
REGSERVERASSERVICE RegServerAsService;

REGTAG RegTag;
REGTAGEX RegTagEx;
REGTAGWITHINDEX RegTagWithIndex;
UNREGTAG UnregTag;
SETTAGQUALIFIER SetTagQualifier;
ADDTAGPROPERTY AddTagProperty;
ADDTAGPROPERTYEX AddTagPropertyEx;
SETTAGPROPERTY SetTagProperty;

UPDATETAGWITHTIMESTAMP UpdateTagWithTimeStamp;
UPDATETAG UpdateTag;

SETWRITECALLBACK SetWriteCallback;
SETWRITECALLBACKEX SetWriteCallbackEx;
SETREADCALLBACK SetReadCallback;
SETREADCALLBACKEX SetReadCallbackEx;
SETWRITECALLBACKWITHINDEX SetWriteCallbackWithIndex;
SETREADCALLBACKWITHINDEX SetReadCallbackWithIndex;

SETSERVERNOTIFY SetServerNotify;
SETGROUPNOTIFY SetGroupNotify;
SETITEMNOTIFY SetItemNotify;
SETTAGNOTIFY SetTagNotify;
SETLOGNOTIFY SetLogNotify;
CWnd* m_WND;

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");
		SetWriteCallbackEx=(SETWRITECALLBACKEX)GetProcAddress(hLibrary,"SetWriteCallbackEx");
		SetReadCallback=(SETREADCALLBACK)GetProcAddress(hLibrary,"SetReadCallback");
		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");
		
		RegTagWithIndex=(REGTAGWITHINDEX)GetProcAddress(hLibrary,"RegTagWithIndex");
		SetWriteCallbackWithIndex=(SETWRITECALLBACKWITHINDEX)GetProcAddress(hLibrary,"SetWriteCallbackWithIndex");
		SetReadCallbackWithIndex=(SETREADCALLBACKWITHINDEX)GetProcAddress(hLibrary,"SetReadCallbackWithIndex");
		
		return true;
	}
	else return false;
}


BOOL FreeOPCDef()
{
	if(hLibrary>0)
	{	
		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].hHWND==handle)
		{
			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);
			m_WND->SendMessage(1088);
			*pDeviceError=0;
			break;
		}
	}
}

void __stdcall ReadCallback(DWORD handle,VARIANT* pNewValue,WORD* Quality, FILETIME* ft, DWORD* pDeviceError)
{
	long I;
	*pDeviceError=-1;
	for(I=0;I<=TagCount;I++)
	{
		if(TagList[I].hHWND==handle)
		{
			*pNewValue= TagList[I].vValue;
			*Quality= TagList[I].lQuality;
			*ft=TagList[I].ft;
			*pDeviceError=0;
			break;
		}
	}
}

void __stdcall ServerNotify(DWORD Handle, WORD wOperate)
{
	if(wOperate==0) 
	{
		ServerCount++;
	} else ServerCount--;
	if (ServerCount==0)
	{
		m_WND->CloseWindow();
		m_WND->DestroyWindow();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -