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

📄 opcdef.cpp

📁 opc client 的开发工具
💻 CPP
字号:
#include "stdafx.h"
#include "OPCDef.h"
#include "TagDef.h"

//函数声明
HMODULE hLibrary;
INITOPCSERVER InitOPCSvr;
REGSERVER RegServer;
UNREGSERVER UnregServer;
CREATETAG CreateTag;
SETTAGPROPERTIES SetTagProperties;
UPDATETAGWITHTIMESTAMP UpdateTagWithTimeStamp;
ENABLEWRITENOTIFICATION EnableWriteNotification;
ENABLEDISCONNECTNOTIFICATION EnableDisconnectNotification;
SETSERVERSTATE SetServerState;
RUNSVR RunSvr;
UNINITOPCSVR UninitOPCSvr;

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");
		//设置服务启运行状态
		SetServerState=(SETSERVERSTATE)GetProcAddress(hLibrary,"SetServerState");
		//运行服务器
		RunSvr=(RUNSVR)GetProcAddress(hLibrary,"RunSvr");
		
		//创建服务器标签
		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 + -