📄 opcdef.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 + -