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

📄 dasvrsdk.cpp

📁 OPC 开发工具包2.0 OPC工具包是用来简化OPC规范服务器开发的工具包
💻 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 + -