OPC DA调研报告

一、基础背景知识

备注:对OPC DA有认知基础的,第一章基础背景知识跳过。

1.OLE

1.1、OLE(Object Linking and Embedding):对象连接与嵌入

1.2名词解释

    OLE现在主要是说OLE2(OLE1已经死了)是基于COM接口的一套应用程序直接实现数据交换和协作的规范,主要用于Office系列;

1.3、起源说明:

    最早MS开发Office的时候(80年代末90年代初),希望加入这样一个功能:可以在Word中嵌入一个Excel表格。注意,不是画一个表格,而是插入一个excel表格对象,双击时可以直接在Word进程内部调用excel来编辑这个表格的数据。这样方便用户操作(其实并不方便),便于市场宣传(我们Office的功能很牛,别人都没有),也便于捆绑Word和Excel一起销售。
    微软的程序员实现这个功能后,很自然地会想到,既然能插入Excel表格,当然也应该可以插入其他对象如ppt,图片,或者其他特定格式的对象,这些对象可以直接在Word内部编辑,也可以用一个外部进程,打开本文档内部嵌入的对象进行编辑,编辑完后还能保存到本文档中。他们把这种技术叫做“对象链接与嵌入”。链接就是调用外部进程编辑本文档的对象;嵌入就是直接在Word进程内部就可以编辑指定对象。
-为实现这个功能,需要做到几点:

  • (a)这些对象要按照Word指定的规范进行开发,也就是实现特定的接口,Word才能识别出有哪些对象可以嵌入,才能调用这些对象的功能;Word要在本地(in-place)编辑这些对象,在UI交互上也要定义一堆规范。Word并不了解这些对象内部是怎么工作的,它只要求这些对象按自己定义的规范来实现,然后按接口调用就可以了;
  • (b)Word外部的对象要能够从本文档中读出特定对象的格式,编辑完成后,还能把数据存回到本文档中;
  • (c)Word中实现了宏,支持用BASIC对Word内部或外部的对象做一些操作。嵌入的对象也应该能够支持这类功能。

       微软的程序员实现上面所有这些功能后,将其中的实现技术都提炼出来推广给业界,其中的a),就进化为COM;b)就是OLE中的复合文档(Compound Document)技术;c)也就是所谓的Automation。

2.COM

2.1、COM(Component Object Model):组件对象模型

2.2、名词解释:

      COM是一套语言无关的二进制接口规范,它定义了一套实现面向对象的组件的规则。
     GUID,IID,IUnknow,IDL,都是COM规范定义的概念,它规定了对象接口如何声明,对象如何创建销毁,对象生命周期如何管理,接口如何继承和聚合。
     COM是基于组件对象方式概念来设计的,在基础中,至少要让每个组件都可以支持二个功能:

  • 查询组件中有哪些界面(User Interface)
  • 让组件做自我生命管理,此概念的实践即为引用计数(Reference Counting)

     这二个功能即为COM的根:IUnknown接口所提供的IUnknown::QueryInterface(),IUnknown::AddRef()及IUnknown::Release()三个方法的由来。所有的COM组件都要实现IUnknown,表示每个COM组件都有相同的能力。

2.3、起源说明:

     如上所述,在OLE开发过程中,微软发现,“一个对象按特定规范实现接口”这个东西很好用,就把这个技术用在自己的很多产品中,包括操作系统的应用层接口,DirectX,等等,并且把这个技术抽出来命名为COM。COM包含三层意思:

  • Component:COM对象是以二进制组件形式发布的,而不是用源文件方式发布,这需要实现二进制级别的兼容,从而可以用Basic, Delphi等其他语言或工具来实现COM对象,而不一定要用C/C++。COM使用了C++的虚函数表来定义接口,以实现各语言在二进制级别的兼容。
  • Object:COM对象是基于接口的对象,而不象早先的Windows API一样是面向过程的C接口的,这在90年代早期赶了“面向对象”的时髦。
  • Model:COM定义了如何查询对象功能以及对象生命周期管理(IUnknown接口以及注册表),定义了如何回调(IConnectionPoint),定义了对象结合方式(Containment & Aggregation),定义了复杂数据结构如何在进程内和进程间传递(IDL,marshaling, UDT),定义了线程安全模型,等等。这一整套接口规范构成了COM模型。
  • COM是OLE开发过程中产生的,但是从OLE抽离出来之后,成为一种广泛使用的规范,反过来成为了OLE的基础,后续OLE及类似功能的开发,都遵照COM定义的一系列接口来实现。比如Automation是为了支持脚本,但它也是基于IUnknown的。在这个过程中,COM和OLE的发展其实是交织在一起、互相促进的。所以早期两者并不严格区分,往往相提并论。这个过程隐约有点象GNU/Linux连在一起的意思。

2.4 参考

知乎:https://www.zhihu.com/question/38612536/answer/1588521096

3.OPC(OPC Classic)

3.1、OPC(OLE for Process Control):用于过程控制的OLE**

     是一种利用微软的COM/DCOM技术来达成自动化控制的协定,一个工业标准,管理这个标准国际组织是OPC基金会。

3.2、背景知识

为什么需要OPC?
OPC是为了不同供应厂商的设备和应用程序之间的软件接口标准化,使其间的数据交换更加简单化的目的而提出的。作为结果,从而可以向用户提供不依靠于特定开发语言和开发环境的可以自由组合使用的过程控制软件组件产品。
利用驱动器的系统连接:
在这里插入图片描述利用OPC的控制系统构成:在这里插入图片描述
OPC是一种利用微软的COM/DCOM技术来达成自动化控制的协定,采用典型的C/S模式,针对硬件设备的驱动程序由硬件厂商完成,提供统一OPC接口标准的Server程序,软件厂商只需按照OPC标准接口编写Client程序就访问Server程序进行读写,即可实现与硬件设备的通信。
OPC协定包括:
     (1).DA(Data Access)规范:访问数据主要采用该规范
     (2).A&E(Alarm and Event)规范:基于事件,提供Client端订阅,事件触发后Server端主动提交回数据的数据访问方式。
     (3).HDA(History data access)规范
     (4).OPC XML-DA规范,XML-basedexchange of real-time values

OPC服务器软件是整个系统的核心,它一方面与现场设备、PLC进行通信,将各种不同的现场总线、通信协议转换成统一的OPC协议;另一方面它与OPC客户端软件通过标准OPC协议进行通信,为OPC客户端提供数据或者将OPC客户端的指令发送给PLC与现场设备;OPC客户端软件只需要通过标准OPC协议与OPC服务器进行通信,就能将指令与数据发送给PLC或者现场设备;下面这张图是经典OPC软件工作的示意图:
在这里插入图片描述
     可以看出,OPC服务器软件在整个系统中处于中介地位,它一方面联系现场设备与PLC,另一方面与OPC客户端软件保持联系。
     这样做的好处在于:设备厂商只需要提供一个自己设备的OPC服务器软件,其它任何设备或软件只需要编写一个OPC客户端软件就能其通信;由于OPC的接口都是统一的,这大大减少了编程开发的工作量,日后的维护效率也成倍提高。
     经典OPC在过程控制中有着出色的表现。但是随着技术的发展及一些外部因素的变化,导致经典OPC已经不能完全满足人们的需求。
主要表现在如下几个方面:

  • (1).经典OPC依赖微软的COM/DCOM技术。但是随着IT技术的发展,微软已经弱化了这种技术,而转向了跨平台的SOA (Service-Oriented Architecture)技术;

  • (2).OPC供应商希望提供一种数据模型将OPC DA、OPC AE、OPC HDA统一起来;

  • (3).为了增强竞争能力,OPC供应商希望将OPC技术应用到非Windows平台;

  • (4).终端用户希望能在设备硬件的固件程序中直接访问OPC服务器软件;

  • (5).一些合作组织希望提供高效的、安全的、用于高水平数据传输的数据结构;

         在这种情况下,OPC技术的推广和管理组织——OPC基金会(OPC Foundation)在2008年推出了新的OPC技术:OPC UA(OPC Unified Architecture),中文翻译为“OPC统一架构”。

3.3、参考:

1.OPC介绍:https://blog.csdn.net/byxdaz/article/details/78164850
2.听说看了这篇文章就彻底搞懂了什么是OPC(上):https://zhuanlan.zhihu.com/p/41485173
3.深入理解OPC技术https://zhuanlan.zhihu.com/p/60511564

4、OPC UA

4.1、OPC UA(Unified Architecture):OPC统一架构

     OPC协定的新版,不再拘束于COM/DCOM技术,意味着不再像传统的(Classic)OPC协定那样仅支持在Windows等平台上使用,具有跨平台性,同时OPC UA也使用了可靠的通信机制,接口简单一致。比如:对传统的三种不同类型OPC服务器的访问 - 数据访问(DA)、报警和事件(AE)、历史数据访问(HDA),要获得一个温度传感器的当前值、一个高温度事件和温度的历史平均值,要依次使用不同的命令执行;而使用OPC UA,仅用一个组件就非常容易地完成了。配置和工程的时间也因此可以大大缩短。

4.2、参考:

OPC协议https://blog.csdn.net/qq_28289405/article/details/80480205

5、OPC UA相对于传统OPC的变化

  • 5.1、功能方面,
    OPC UA不仅支持传统OPC的所有功能,更支持更多新的功能:
  1. 网络发现:自动查询本PC机中与当前网络中可用的OPC Server
  2. 地址空间优化:所有的数据都可以分级结构定义,使得OPC Client不仅能够读取并利用简单数据,也能访问复杂的结构体。
  3. 互访认证:所有的读写数据/消息行为,都必须有访问许可。
  4. 数据订阅:针对OPCClient不同的配置与标准,提供数据/消息的监控,以及数值变化时的变化报告。
  5. 方案(Methods)功能:OPC UA中定义了通过在OPCServer中定义方案(Methods),来让OPC client执行特定的程序。
  • 2、平台支持方面,由于不再基于COM/DCOM技术,OPC UA标准提供的更多的可支持的硬件或软件平台。硬件平台诸如传统的PC机、基于云的服务器、PLC、ARM等其他微处理器;而软件平台可支持微软的Windows、苹果公司的OSX、安卓,以及其他的基于Linux的分布式操作系统。
  • 3、安全性方面,最大的变化是OPC UA可以通过任何单一端口(经管理员开放后)进行通信,这使得OPC通信不再会由于防火墙受到大量的限制。
    参考:OPC DA 到 OPC UA,https://www.cnblogs.com/qdwyj/p/9114898.html

6.tlb

tlb文件:com类型库文件,它包含接口相关信息。在需要使用对应com类的模块里,通过"#import xxx.tlb"来调用。, VC可以把tlb作为资源编译到dll中。

二、OPC 基金会

1.OPC DA源码来源
OPC基金会:https://www.opcfoundation.cn/
3.OPC基金会账号、密码(需要申请)
账号:xxx
密码:xxx
4.OPC DA源码下载方式:
在这里插入图片描述
在这里插入图片描述

5.OPC基金会联系人员
OPC基金会人员介绍,Opc da sdk,基本都是商用的

三、OPC DA调研方向

1、OPC DA开发技术方向

方向方向一方向二方向三
名字MFC的COM库函数开发OPC客户端通过创建包装类实现客户端OPCServer对象利用第三方的动态连接库或工具包快速开发OPC客户端
简介要求开发人员对OPC规范和COM技术原理又比较深入的了解。客户要创建一个COM对象首先应得到类厂对象,再由类厂对象创建COM对象。为了实现类厂对象,MFC提供了一个通用的类厂COleObjectFactory,其从CCmdTarget派生,并实现了IclassFactory2接口。在COleObjectFactory的成员中,最主要的是对象的类标识符(CLSID)和类型信息,类厂的CreateInstance成员函数利用这些信息在运行中创建COM对象。包装类封装了COM库函数,Visual C++客户程序通过包装类访问组件提供的属性和方法。虽然中间多了一层,但对客户程序开发人员来说,却方便多了互联网上有一些OPC客户端和服务器的开发工具包(ToolKit),利用这些工具包可以快速地开发OPC程序,但这些工具包大多需要付费。
开发难度
工作量

2、参考

1.三个方向介绍详见:OPC DA客户端的三种实现方式https://blog.csdn.net/gencheng/article/details/9376199
2.备注:目前采用基金会源码开发,应该属于方向三,本次调研方向也应该是方向三,详见本次调研目标

四、本次调研目标

本次调研的主要目标两个:

  • 一是,找到一个可以稳定实现OPC DA Client功能的库;
  • 二是,找到一个可以稳定实现OPC DA Server功能的库;

五、OPC DA调研内容

1.OPC经典框架

采用OPC基金会OPC DA源码,详见KIO OPC DA现状(该组件已过时效,不再进行维护。)

2.OPC-Client-X64

2.1.地址:

https://github.com/edimetia3d/OPC-Client-X64

2.2.说明

An object oriented OPC DA Client SDK/ToolKit written in C++, Both X86/X64 supported, implementing the OPC DA specification version 2.05A
New Features (Compare with the original version)
Build with x64 project.
Build with MFC.
Multithread supported.
Connect to server with CLSID.(Hasn’t tested)

2.3.语言:

C++

2.4.是否收费

GNU Library General Public License(不该不开放)

2.5.热度

Star:71 issues:8

2.6.稳定性

未知

2.7.备注

已经验证附带的OPCClientDemo.cpp可以正常运行
只有OPC Client,没有OPCserver

3.FatRat Library

3.1.地址:

https://github.com/gmist/frl

3.2.说明

FatRat Library is a free and open source OPC DA (Data Access) Server Toolkit.
FatRat Library makes it possible to speed up development OPC DA servers.

3.3.语言:

C++

3.4.是否收费

free

3.5.热度

Satr:13 issues:0

3.6.稳定性

未知

3.7.备注

如下图可知,采用的也是OPC基金会的代码
在这里插入图片描述

4.Wintech OPC Server Client Develop Kit

(一篇论文中说他是免费的工具,在官网找到说明如下)

4.1.网址:

https://www.win-tech.com/html/opc.htm

4.2.说明:

It is not necessary for a developer to become a member of the OPC Foundation or to utilize a commercially available toolkit in order to generate OPC compliant products. Often times, however, the availability of a working toolkit represents the most cost-effective and expediant means of rapidly developing an OPC solution. The WinTECH Software toolkits described below are complete implementations of the OPC Standards including Data Access 1.1, Data Access 2.0, Data Access 3.0, Alarms & Events, and Historical Data Access
WinTECH Software provides full source code support for developers wishing to implement OPC Server, OPC Client , HDA Server and/or HDA Client Designs. The first of their kind, these toolkits are published with an open API and may be freely downloaded and used to create OPC Custom Interface Designs from C, C++, Visual Basic or DELPHI. Each toolkit consists of a Windows DLL that implements all the required OPC Interfaces plus Browse. All the intricate details of COM, DCOM and OPC are contained within the dll while a very simple API is presented to the user for referencing his own customized tag data. Each toolkit is available as a demo, allowing you to download and develop your own custom OPC Solution without cost or obligation. While the demo dll is time-limited to 30 minutes of operation, (after establishing an OPC Connection), you have ample opportunity for testing your design with various OPC Clients and/or Servers to insure compatibility prior to making a purchase decision.

4.3.语言

C\C++

4.4.是否收费

收费(根据网站介绍,暂时的理解,因为点击订购后跳转到了modscam的购买界面,原因未知,如备注所示),

4.5.热度

高(以有一篇论文引用为依据)

4.6.稳定性

大概率稳定(未验证)

4.7.备注

点击订购,如图
在这里插入图片描述
点击订购后,显示页面如图
在这里插入图片描述

5.QuickOPC

5.1.网址:

https://www.opclabs.com/

5.2.说明:

QuickOPC can be characterized as an OPC toolkit;
QuickOPC is a suite of OPC Client Development Components for COM and .NET;
All commercial products downloaded from here function as a free trial, unless you purchase a license.

5.3.语言

C#、VB.NET、C/C++、F#、VB6、PHP、Delphi、Python、VBA、SQL Server、

5.4.是否收费

No upgrade assurance €4198

5.5.热度

低(没有论文、文章引用)

5.6.稳定性

大概率稳定(未验证)

5.7.备注

6.LightOPC

6.1.网址:

https://github.com/Sayen/LightOPC

6.2.说明:

Light OPC Server development library
The LightOPC provides easy way to implement full functional and fast
OPC servers (both v1 & v2 custom interfaces) on Win32 platform.

6.3.语言

C/C++、

6.4.是否收费

LGPL
LGPL允许商业软件通过类库引用方式使用LGPL类库而不需要开源商业软件的代码

6.5.热度

6.6.稳定性

大概率稳定(未验证)

6.7.备注

一篇博客介绍其封装的不好,不如OPC Workshop
基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署https://www.cnblogs.com/neo-T/p/10824472.html

7.EasyOPC

7.1.网址:

http://www.aihe-tech.com
http://blog.sina.com.cn/s/blog_16d7d3ecb0102x218.html

csdn下载:https://download.csdn.net/download/junxuezheng/19571479

7.2.说明:

EasyOPC_DA OCP Server 软件开发包(SDK)为上海埃菲尔自动化系统有限公司完
全自主知识产权产品,开发包架构简洁清晰,应用开发方便快速,运行安全稳定,数
据交换高效,满足所有工业应用场合需求,为工业设备及系统快速实现 OPC 服务端接
口提供可靠的解决方案.

7.3.语言

VS.NET 所有语言(VC、C#、VB)、LabView 等、

7.4.是否收费

未知
(大概率收费)

7.5.热度

7.6.稳定性

大概率稳定(未验证)

7.7.备注

8.OPC workshop(需要翻墙)

8.1.网址:

https://sourceforge.net/projects/opcworkshop/

csdn下载:https://download.csdn.net/download/junxuezheng/19571342

8.2.说明:

OPC Workshop is a set of tools for speed up development of OPC (OLE for Process Control) related applications. It contains OPC client and server frameworks, OPC logging tool() and OPC signal player()…

8.3.语言

C++、

8.4.是否收费

GNU General Public License

8.5.热度

2 Reviews、Downloads: 4 This Week

8.6.稳定性

大概率稳定(未验证)

8.7.备注

https://www.cnblogs.com/neo-T/p/OPCSrvExample-4.html
Last Update: 2013-04-29
下载后,如下图(GitHub上找不到,需要翻墙)
在这里插入图片描述

六、技术方案对比

方案方案一方案二方案三方案四方案五方案六方案七方案八
名称“OPC经典框架(即KIO OPC DA)”OPC-Client-X64FatRat LibraryWintech OPC Server Client Develop KitQuickOPCLightOPCEasyOPC“OPC workshop(需要翻墙)”
地址:https://www.opcfoundation.cn/https://github.com/edimetia3d/OPC-Client-X64https://github.com/gmist/frlhttps://www.win-tech.com/html/opc.htmhttps://www.opclabs.com/https://github.com/Sayen/LightOPC“http://www.aihe-tech.com http://blog.sina.com.cn/s/blog_16d7d3ecb0102x218.html”https://sourceforge.net/projects/opcworkshop/
说明An object oriented OPC DA Client SDK/ToolKit written in C++, Both X86/X64 supported, implementing the OPC DA specification version 2.05AFatRat Library is a free and open source OPC DA (Data Access) Server Toolkit.WinTECH Software provides full source code support for developers wishing to implement OPC Server, OPC Client , HDA Server and/or HDA Client Designs.QuickOPC is a suite of OPC Client Development Components for COM and .NET;“The LightOPC provides easy way to implement full functional and fast OPC servers (both v1 & v2 custom interfaces) on Win32 platform”“EasyOPC_DA OCP Server 软件开发包(SDK)为上海埃菲尔自动化系统有限公司完全自主知识产权产品”OPC Workshop is a set of tools for speed up development of OPC (OLE for Process Control) related applications. It contains OPC client and server frameworks
语言:C#/C++C++C++C\C++C#、VB.NET、C/C++、F#、VB6、PHP、Delphi、Python、VBA、SQL Server、C/C++VS.NET 所有语言(VC、C#、VB)、LabView 等C++
是否收费免费GNU Library General Public Licensefree收费No upgrade assurance €4198LGPL "未知(大概率收费)" GNU General Public License
热度Star:71 issues:8Satr:13 issues:0高(以有一篇论文引用为依据)低(没有论文、文章引用)2 Reviews、Downloads: 4 This Week
稳定性未知未知大概率稳定(未验证)大概率稳定(未验证)大概率稳定(未验证)大概率稳定(未验证)大概率稳定(未验证)
备注“1.网上部分工具是在此基础上封装2.该组件已过时效,不再进行维护。”“已经验证附带的OPCClientDemo.cpp可以正常运行只有OPC Client,没有OPCserver”封装了opc基金会的代码根据网站介绍,暂时的理解是收费,因为点击订购后跳转到了modscam的购买界面,原因未知一篇博客介绍其封装的不好,不如OPC"https://www.cnblogs.com/neo-T/p/OPCSrvExample-4.html

七、方案建议

1.方案建议

首选:KIO OPC DA
其次:KIO OPC DA功能裁剪
再次:OPC workshop
最后:重新分别封装OPC-Client-X64、FatRat Library

2.指导意见:
2.1.OPC DA落伍淘汰的技术,不值得再投入更多的人力、去做一个更好的OPC DA。还是先采用目前opc基金会的解决方案,合并之前已经解决的问题,再遇见新的问题尽可能采用已有方案绕过去。集中精力把OPC UA做好;
2.2.未来尽可能建议客户选用OPC UA;推荐opc ua的库;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑同学的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值