OPC服务器网关另类实现方法介绍 点击:1413 | 回复:2



ESDK

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 14回
  • 年度积分:0
  • 历史总积分:12
  • 注册:2010年7月01日
发表于:2010-07-30 12:37:46
楼主

欢迎技术交流: OPCMaster@163.com QQ:760807322

OPCMaster服务器支持OPCDA1.0、2.0、3.0和XML DA规范,大家对DA规范比较熟悉,在这里大致解释一下XML-DA和别人不同的实现思路。

OPCMaster服务器采用自己开发的动态库OM_OPCSvr.dll,也就是大家说的OPC服务器快速开发工具。最新版本的OM_OPCSvr.dll是在VS2008环境下采用STL开发的。为了跨平台不采用MFC和ATL开发语言。

一般做网关的想法是:提供8个OPC基金会规定的WEB服务器,而服务事件上是实现了OPC客户端的功能,由客户端访问到具体的服务器,我称之为串行的方法。一般采用c#开发,本人2006年曾经就是这样实现的。

WEB客户端访问示意图是:WEB客户端<------->OPCGateway<------->OPC客户端<--------->OPCDA服务器接口 <---->服务器内部的地址空间 <--------->物理设备

主要特点是:逻辑分层清楚,可以不用了解DA服务器的实现,缺点是不能跨平台(C#程序能在LINUX上跑吗),响应时间会慢,部署麻烦,需要安装IIS。

而 我希望OPC的网关(OPCGateWay)部署简单,免安装IIS,而且可以实现跨平台。这样我采用的方法是纯C++开发语言,并且是并行的方法。并行的WEB客户端访问示意图是:

WEB客户端访问示意图是:WEB客户端<------->OPCGateway<------->DA服务器内部的地址空间 <--------->物理设备

                                              OPCDA客户端<---->OPC服务器接口<------->DA服务器内部的地址空间 <--------->物理设备

就是说WEB的XML-DA客户端和OPCDA客户端访问的路线图是并行的。之所以能免IIS,当然是完全在内部实现了IIS类似的功能。

正是因为采用了并行的方法,使得在LINUX上实现XML-DA服务器的时候,可以不依赖于OPC的相关东西,就完全看做是一个普通的WEB服务的实现。

在OM_OPCSvr.dll开发工具里,只要调用一个API函数,就可以激活XML-DA服务器的功能。
///////////// XML DA 1.0 ////////////////
// //
// Support XML DA 1.0 //
// //
//////////////////////////////////////////////////////////////////////////////////////////


BOOL OMOPCSVRAPI EnableXMLDaWebService ();

 

以下是开发工具的导出函数,有兴趣的可以一看。

 

#ifndef OM_OPCSVRAPI_H
#define OM_OPCSVRAPI_H

#ifdef OM_OPCSVRAPI_CPP
#define OMOPCSVRAPI _declspec(dllexport)
#else
#define OMOPCSVRAPI _declspec(dllimport)
#endif

typedef VOID (CALLBACK* WRITENOTIFYPROC)(HANDLE TagHandle, VARIANT *pValue, DWORD* DeviceError);
typedef VOID (CALLBACK* DISCONNECTPROC)(DWORD NumberActiveClients);

#ifdef __cplusplus
extern "C" {
#endif

/////////////////////////////////////////////////////////////////////////////////////////////
//
// Initialization and Registration functions
//
/////////////////////////////////////////////////////////////////////////////////////////////
BOOL OMOPCSVRAPI UpdateRegistry (LPCSTR strCLSID, LPCSTR strName, LPCSTR strDescr, BOOL bIsOutProcess = TRUE);

BOOL OMOPCSVRAPI UnregisterServer (LPCSTR strCLSID, LPCSTR Name);

BOOL OMOPCSVRAPI InitOPCSvr(LPCSTR strCLSID, BOOL bIsOutProc = TRUE, DWORD dwCoInit = 0);

void OMOPCSVRAPI SetVendorInfo(LPCSTR lpVendorInfo,double dbVersion );

void OMOPCSVRAPI SetServerRate(DWORD dwServerRate);

/////////////////////////////////////////////////////////////////////////////////////////////
//
// OPC Item Functions
//
/////////////////////////////////////////////////////////////////////////////////////////////
BOOL OMOPCSVRAPI SetServerDelimiter(LPCSTR lpDelimiter);

HANDLE OMOPCSVRAPI CreateTag (LPCSTR Name, VARIANT Value, WORD InitialQuality, BOOL IsWritable = FALSE);

BOOL OMOPCSVRAPI UpdateTag (HANDLE TagHandle, VARIANT Value, WORD Quality);

BOOL OMOPCSVRAPI UpdateTagWithTimeStamp (HANDLE TagHandle, VARIANT Value, WORD Quality, FILETIME timestamp);

BOOL OMOPCSVRAPI UpdateTagByName (LPCSTR Name, VARIANT Value, WORD Quality);

BOOL OMOPCSVRAPI RemoveTag (HANDLE TagHandle);

BOOL OMOPCSVRAPI RemoveTagByName (LPCSTR Name);

/////////////////////////////////////////////////////////////////////////////////////////////




李财宏你好

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 420回
  • 年度积分:2
  • 历史总积分:3934
  • 注册:2008年10月27日
发表于:2010-10-03 23:37:53
1楼

       有VB写的吗?

opcfan

  • 精华:0帖
  • 求助:0帖
  • 帖子:62帖 | 58回
  • 年度积分:0
  • 历史总积分:667
  • 注册:2004年9月29日
发表于:2010-10-13 16:09:46
2楼
支持VB调用的,VB也可以调用这个动态库实现自己的OPC 服务器

热门招聘
相关主题

官方公众号

智造工程师