写在前面:

为了应对标准化和跨平台的趋势,更好的推广OPC,OPC基金会在OPCDA成功应用的基础上推出了一个新的OPC标准——OPC UA,OPCUA不再基于分布式组件对象模型(DCOM),而是以面向服务架构(SOA)为基础,因此,在未来的若干年中,OPCUA将逐步取代OPCDA,成为新一代的OPC标准,助力工业4.0。

而提起MQTT,或许大家有些陌生。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。具有轻量、简单、开放和易于实现的特点,尤其在物联网IOT领域应用非常广泛。

物联网一直都是一个很热门的话题,而数据上云,也是现在工业上很普遍的一个需求。至于如何实现,各个厂家都提供了各种不同的解决方案,无分好坏,最适合的就是最好的。

刚看完一篇名为《OPCUA+MQTT=物联网扩展的热门组合》的公众号文章之后,文思泉涌,想着如何将OPCUA与MQTT联合起来,构建一个物联网通用框架,实现数据远传。

整体网络架构

很多时候,我们的需求是这样的:现场有N台不同的设备或系统,每台设备或者系统的协议是各不相同的,希望可以用一种通用并且简单的方法,将这些数据传到云端,实现远程访问。

这样的需求,其实是物联网最典型的应用之一,那么采用OPCUA+MQTT或许是个不错的选择,整体的框架设计如下:

图表 1 整体网络架构

为了实现整体功能,这里的设备层,采用Modbus Slave,基于Modbus TCP协议来做仿真测试,增加5个变量,分为为压力1-压力5,对应地址从40001-40010,数据类型为浮点型,运行Modbus Slave仿真结果如下:

图表 2 ModbusTCP服务器

服务层

至于服务层,主要是OPCUA服务器的开发应用,这里我们有两个选择,一种是采用第三方的OPC软件,比如Kepware、Knight、Matrikon这些公司的产品,这种比较容易,做下相关配置即可,另外一种方式就是自己开发,相对来说难度要大一些。

这里我使用自己开发的一款软件——CMS配置一体化软件,通过简单配置,在10秒内,实现了ModbusTCP客户端数据通信,结果如下:

图表 3 ModbusTCPClient通信测试

然而,这部分,仅仅是实现了ModbusTCP客户端的功能,如果要实现OPCUA服务器的功能,需要激活一下OPCUA服务器,在服务器节点下添加一台OPCUA服务器即可,添加完成后,保存重新运行,结果如下:

图表 4 开启OPCUAServer

为了测试OPCUA服务器是否开启成功,需要进行测试,可以使用官方软件UAExpert软件来测试一下:

图表 5 OPCUAClient通信测试

数据层

(1)在实现数据层功能之前,需要创建一个MQTT服务器,这里基于.NET CORE编写了一个MQTT服务器的程序,并在阿里云服务器中部署运行(这里要注意开放端口1883),运行效果如下:

图表 6 MQTT服务器

(2)MQTT服务器创建完成之后,重新打开一个CMS配置软件来进行OPCUAClient的功能测试,上一节中的UAExpert是官方的OPCUA客户端软件,仅用于测试使用,这里的使用的CMS配置软件的OPCUAClient是自己开发的客户端程序,经过配置之后,运行结果如下:

图表 7 OPCUAClient

(3)在CMS配置人家的服务器节点中,右击添加一个MQTTClient,根据MQTT服务器配置相关IP、用户、密码、主题及更新时间等信息,具体如下:

图表 8 MQTT客户端配置

(4)配置完成后点击启动按钮,整体运行之后,可以看到MQTT连接成功,并按照设定的周期将最新的数据发布到指定的主题中,效果如下:

图表 9 启动MQTT客户端

(5)打开MQTT服务器,也可以看到不断地有数据发布过来,这里为了便于观察结果,将压力1的数据仿真成每秒加1,MQTT服务器数据接收如下:

图表 10 MQTT服务器数据接收

应用层

通过以上的相关部署,即可实现整个OPCUA+MQTT的实现,实际应用时,只需要开启一个MQTT客户端,连接指定的MQTT服务器,并订阅相应的主题,即可获取到设备层的实时数据,这里使用一个常用的MQTT客户端软件,即MQTT.fx:

图表 11 MQTT.fx通信测试

写在最后:

本文旨在结合当下主流的OPCUA统一架构和MQTT通信协议,实现一种数据上云的途径,对于自动化行业的工程师来说,可以拓展大家的思路。未来更多是IT和OT相结合的一种趋势,因此,作为每个工控技术人员,都要时刻保持危机感,不断学习,不断进步,这样才能更好地面对未来工业的快速发展。

公众号:thinger_swj

长按识别二维码关注

OPCUA+MQTT构建物联网通用框架的更多相关文章

  1. 开源物联网通讯框架ServerSuperIO,成功移植到Windows10 IOT,在物联网和集成系统建设中降低成本。附:“物联网”交流大纲

    [开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 一.概述 经过一个多月晚上的时间,终于把开源物联网通讯框架ServerSuperIO成功移植到Windows10 IOT上, ...

  2. 【重大更新】开源跨平台物联网通讯框架ServerSuperIO 2.0(SSIO)下载

    更新具体细节参见:[更新设计]跨平台物联网通讯框架ServerSuperIO 2.0 ,功能.BUG.细节说明,以及升级思考过程! 声明:公司在建设工业大数据平台,SSIO正好能派上用场,所以抓紧时间 ...

  3. [更新设计]跨平台物联网通讯框架ServerSuperIO 2.0 ,功能、BUG、细节说明,以及升级思考过程!

    注:ServerSuperIO 2.0 还没有提交到开源社区,在内部测试!!! 1. ServerSuperIO(SSIO)说明 SSIO是基于早期工业现场300波特率通讯传输应用场景发展.演化而来. ...

  4. [更新]跨平台物联网通讯框架 ServerSuperIO v1.2(SSIO),增加数据分发控制模式

    1.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO) 2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案 3.C#工业 ...

  5. 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构

    本篇承接上篇内容,如果你不小心点击进来,建议重新从第一篇开始完整阅读. 构建NetCore应用框架之实战篇索引 一.BitAdminCore框架简介 从前篇论述我们知道,我们接下来将要去做一个管理系统 ...

  6. Tensorflow实现Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)

    Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)   导语:Mask R-CNN是Faster R-CNN的扩展形式,能够有效地检测图像中的目标,同时还能为每个实例生成一个 ...

  7. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  8. C++通用框架和库

    C++通用框架和库 来源 https://www.cnblogs.com/skyus/articles/8524408.html 关于 C++ 框架.库和资源的一些汇总列表,内容包括:标准库.Web应 ...

  9. Cocos Creator 通用框架设计 —— 资源管理优化

    接着<Cocos Creator 通用框架设计 -- 资源管理>聊聊资源管理框架后续的一些优化: 通过论坛和github的issue,收到了很多优化或bug的反馈,基本上抽空全部处理了,大 ...

随机推荐

  1. Bubble Cup 11 - Finals [Online Mirror, Div. 1]题解 【待补】

    Bubble Cup 11 - Finals [Online Mirror, Div. 1] 一场很好玩的题啊! I. Palindrome Pairs 枚举哪种字符出现奇数次. G. AI robo ...

  2. centos6安装创建kvm虚拟机

    的虚拟机名 virsh domid name                            # 显示虚拟机id号 virsh domuuid name                      ...

  3. rabbitMQ消息队列原理

    MQ:Message Queue,消息队列,是一种应用程序对应用程序的通信方法:应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 1      rabbitMQ入 ...

  4. C语言编程入门题目--No.13

    题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身.例如:153是一个"水仙花数",因为153= ...

  5. STL训练 HDU - 1716 Ray又对数字的列产生了兴趣:

    HDU - 1716 Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡片上的数字(0&l ...

  6. 在IIS服务器上本地部署 ArcGIS API for js 4.15

    作为一名刚入门的小白,还没开始一个helloworld就在软件安装,环境部署时遇到了一大堆问题,简直太让人头秃了,脑壳疼.话不多说,这篇主要想分享一下自己部署ArcGIS API for js 4.1 ...

  7. 题目分享G 二代目

    题意:有n组数,每组包含两个数,问在每组只能取一个的前提下能组成的最长的从1开始的连续自然数有几个? 分析:刚学了差分约束系统,很容易往转换成图的方向去想 将他读入的这n组数当成边读入 很容易会得到一 ...

  8. ASP .NET Core 建立列表和表单View

    前几篇文章对控制器Controller以及布局页_Layout相关的代码与作用介绍了一下.接下来就是建立控制器对应的列表和对应的表单. 建立Department文件夹,在文件夹下面建立普通的Index ...

  9. 网络流 A - PIGS POJ - 1149 最大流

    A - PIGS POJ - 1149 这个题目我开始感觉很难,然后去看了一份题解,写的很好 https://wenku.baidu.com/view/0ad00abec77da26925c5b01c ...

  10. qt creator源码全方面分析(4-5)

    目录 Qt中的字符串 QLatinString 详细介绍 源码 小结 QStringLiteral(str) 详细介绍 源码 小结 Qt中的字符串 Qt中处理字符串最常用的肯定是QString,但是在 ...