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

📄 opcdef.cpp

📁 OPC和modbus详解odbus 协议是应用于电子控制器上的一种通用语言。通过此协议
💻 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(&amt;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 + -