三九宝宝网宝宝教育智力培养

hysys opc server怎么开发

02月20日 编辑 39baobao.com

一.准备工作: 下载opc基金会的OPC Proxy DLL然后按照说明进行安装。这些动态库是opc程序运行所必须的。 1. 将下列文件拷贝至要运行OPC服务器和OPC客户端的机器上的SYSTEM32目录下 copy opcproxy.dll C:\WINDOWS\system32 copy opccomn_ps.dll C:\WINDOWS\system32 copy opc_aeps.dll C:\WINDOWS\system32 copy opchda_ps.dll C:\WINDOWS\system32 copy aprxdist.exe C:\WINDOWS\system32 copy opcenum.exe C:\WINDOWS\system32 2. 注册这些 dll 文件 REGSVR32 opcproxy.dll REGSVR32 opccomn_ps.dll REGSVR32 opc_aeps.dll REGSVR32 opchda_ps.dll 3. 如果在windows 系统(\WINDOWS \system32)目下不存在actxprxy.dll,运行aprxdist.exe 4. 安装 opcenum.exe opcenum /regserver 二.opcserver开发 1. 新建vc工程。比如建一个控制台工程。在工程中包含如下头文件 #include "opcda.h" #include "opc_ae.h" #include "WTOPCsvrAPI.h" #include "WtOPCsvrEXTapi.h" 以上头文件在例子程序中都能找到,拷贝到自己的工程下。 WTOPCsvrAPI.h是开发包动态库提供的导出函数文件。里面有每个函数的具体说明,调用的时候看一下说明。 2. 在.cpp中定义一个GUID这个guid是用来标识opcserver的唯一id可以通过操作系统的工具生成,也可以编一个。格式如下。 const GUID CLSID_OPCSimSvr = {0x99b8f472, 0xc037, 0x11d2, {0x80, 0xb8, 0x0, 0x60, 0x97, 0x58, 0x58, 0xbe}}; 3. 在工程中加入对WtOPCSvr动态库的连接。 WTOPCsvr动态库的有关文件都在之前的例子包里面能找到。 WTOPCsvr.lib WTOPCsvr.dll是对应lib和dll 4. 初始化

(1)调用UpdateRegistry()函数完成注册。下面是一个调用参考例子代码 BOOL COPCSimSvrApp::InitInstance() { TCHAR szTokens[] = _T("-/ "); CString HelpPath; CString SvrName, SvrDescrip; int i; HelpPath = AfxGetApp()->m_pszHelpFilePath; i = HelpPath.ReverseFind('\\'); HelpPath = HelpPath.Left(i+1); HelpPath += "OPCSIMSVR.EXE"; // // Self-Registration code // (look for cmdline options to register & unregister server) // SvrName = "WinTECH.OPCServer"; SvrDescrip = "WinTECH Software OPC Server Simulator"; CString tempCmdLine(m_lpCmdLine); LPTSTR lpszToken = _tcstok(tempCmdLine.GetBuffer

(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有两种地址空间形式:扁平和多层结构的。 比如调用创建的点为item

1、item

2、item3.这类结构就是扁平的。各个点类似与文件系统中的文件。 比如调用创建的点为test.item

1、test.item

2、test.item3这种点名,开发包会自动形成多层的点结构。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客户端测试 下面以本机opcquickclient.exe为例说明服务器和客户端之间的应用关系。 1. 运行opcquickclient.exe 2. 点击edit->new server connection 菜单。弹出...

推荐阅读
图文推荐