载opc基金OPC Proxy DLL按照说明进行安装些态库opc程序运行所必须
1 列文件拷贝至要运行OPC服务器OPC客户端机器SYSTEM32目录
copy opcproxydll C:\WINDOWS\system32
copy opccomn_psdll C:\WINDOWS\system32
copy opc_aepsdll C:\WINDOWS\system32
copy opchda_psdll C:\WINDOWS\system32
copy aprxdistexe C:\WINDOWS\system32
copy opcenumexe C:\WINDOWS\system32
2 注册些 dll 文件
REGSVR32 opcproxydll
REGSVR32 opccomn_psdll
REGSVR32 opc_aepsdll
REGSVR32 opchda_psdll
3 windows 系统(\WINDOWS \system32)目存actxprxydll运行aprxdistexe
4 安装 opcenumexe
opcenum /regserver
二opcserver发
1 新建vc工程比建控制台工程工程包含文件
#include "opcdah"
#include "opc_aeh"
#include "WTOPCsvrAPIh"
#include "WtOPCsvrEXTapih"
文件例程序都能找拷贝自工程
WTOPCsvrAPIh发包态库提供导函数文件面每函数具体说明调用候看说明
2 cpp定义GUIDguid用标识opcserver唯id通 *** 作系统工具编格式
const GUID
CLSID_OPCSimSvr = {0x99b8f472, 0xc037, 0x11d2, {0x80, 0xb8, 0x0, 0x60, 0x97, 0x58, 0x58, 0xbe}};
3 工程加入WtOPCSvr态库连接
WTOPCsvr态库关文件都前例包面能找
WTOPCsvrlib WTOPCsvrdll应libdll
4 初始化
(1)调用UpdateRegistry()函数完注册面调用参考例代码
BOOL COPCSimSvrApp::InitInstance()
{
TCHAR szTokens[] = _T("-/ ");
CString HelpPath;
CString SvrName, SvrDescrip;
int i;
HelpPath = AfxGetApp()->m_pszHelpFilePath;
i = HelpPathReverseFind('\\');
HelpPath = HelpPathLeft(i+1);
HelpPath += "OPCSIMSVREXE";
//
// Self-Registration code
// (look for cmdline options to register & unregister server)
//
SvrName = "WinTECHOPCServer";
SvrDescrip = "WinTECH Software OPC Server Simulator";
CString tempCmdLine(m_lpCmdLine);
LPTSTR lpszToken = _tcstok(tempCmdLineGetBuffer(1), szTokens);
while (lpszToken != NULL)
{
if (_tcsicmp(lpszToken, _T("UnregServer"))==0)
{
UnregisterServer ((BYTE )&CLSID_OPCSimSvr, SvrName);
return (FALSE);
}
else if (_tcsicmp(lpszToken, _T("RegServer"))==0)
{
UpdateRegistry ((BYTE )&CLSID_OPCSimSvr,
SvrName,
SvrDescrip,
HelpPath);
return (FALSE);
}
lpszToken = _tcstok(NULL, szTokens);
}
(2)调用InitWTOPCsvr完发包dll初始化
两步骤颠倒
5 创建item
item服务器所item些item通opc库户端能浏览创建item函数CreateTag()
Opc两种址空间形式:扁平层结构
比调用创建点item1、item2、item3类结构扁平各点类似与文件系统文件
比调用创建点testitem1、testitem2、testitem3种点名发包自形层点结构Test类似与文件系统文件夹item类似与文件系统文件夹文件扁平式层结构客户端浏览点名体现
层结构点名间默认用隔简单我opcserver设计扁平结构
创建点返handle用标识点我程序需要自建立handle数据库保存设备实值应关系部参考例代码
6 建立定器采集设备数据
定数据库取各handle应item值比较各item值否读取值变化变化调用UpdateTagToList放入应队列发包自变化值送客户端
致流程
(1) 数据库采集遍所点实值
(2) 调用StartUpdateTags()
(3) 循环读取每item数据库数据读取进行比较变化调用UpdateTagToList()
(4) 用调用EndUpdateTags()完所item更新
7 客户端控制
客户端写tag值候opcserver通调函数响应
服务器端必须调用EnableWriteNotification()指定写值调函数调函数格式:
typedef VOID (CALLBACK WRITENOTIFYPROC)(HANDLE, VARIANT, DWORD);
调函数内部实现HANDLE指定tag写具体控制设备应变量
8 其用函数
RequestDisconnect()般opcserver关闭调用用通知客户端opcserver自要关闭
NumbrClientConnections()用计算前少客户端连接opcserver
UninitWTOPCsvr()程序退清理
SetVendorInfo()设置厂商信息
三opc客户端测试
面本机opcquickclientexe例说明服务器客户端间应用关系
1 运行opcquickclientexe
2 点击edit->new server connection 菜单dserver properties框展opc data access server version 20浏览本机安装所opcserver选我自发opcserver点击确定完与服务器连接
3 点击edit->new group 用默认值添加组
4 点击edit->new item d框(图层结构址空间例单层更简单)选左侧某父节点右侧显示各tag选要向opcserver查询tag点击add leaves点击ok
5 客户端主界面能看刚才要查询tag自跟随opcserver端数据变化变换
6 右键要控制tag菜单选择同步写或者异步写(般建议用异步避免阻塞客户端运行)键入要写入值查看设备否作检验opcserver否编写确WINCC通过OPC与其他PLC通信,第三方的OPC服务器挂了(死掉了),除重启WINCC运行系统外,能不能通过脚本再次激活,当然是只知道OPC服务器的名(称服务器ID),其他就不知道,有人编写心跳程序,WINCC能做到不能。
问题补充:
第三方OPC和自己的PLC通信不上(对方PLC断电),过十几分钟就挂机了,再有opc服务器提供的数据是仅读的数据,没有让用户可写的数据。(PLC再上电WINCC就与OPC就建立不了连接),重启WINCC运行系统才能与OPC建立连接,我现在做法是当第三方PLC上电时,退出WINCC,重新启动电脑,wincc设置自动运行。opc服务是基于微软COM技术实现的,所以要对OPC服务程序的COM组件属性进行设置。opc服务一般都要先在windows中register,然后就能在dcomcnfg中看到。然后就要进行配置。这个设置说明网上很多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)