写在前面:

为了应对标准化和跨平台的趋势,更好的推广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. 《Android的设计与实现:卷I》——第1章 1.2.2动态视角的体系结构

    1.2.2 动态视角的体系结构静态的体系结构是从横向分层的角度诠释Android是什么.如果静态的体系结构不足以让读者理解Android的运行机制,我们可以看看Google工程师Sans Serif是 ...

  2. Java通过反射技术动态创建对象(有参、无参构造)

    实现类: package com.ljy; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTarge ...

  3. Ansible入门知识

    一.ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装 ...

  4. 一文带你深入了解 Lambda 表达式和方法引用

    前言 尽管目前很多公司已经使用 Java8 作为项目开发语言,但是仍然有一部分开发者只是将其设置到 pom 文件中,并未真正开始使用.而项目中如果有8新特性的写法,例如λ表达式.也只是 Idea Al ...

  5. C语言程序设计实验报告三

    C程序设计实验报告 姓 名:张美盛 实验地点:家 实验时间:2020年3月29日 实验项目:4.3.1 If语句的应用 4.3.2 switch-case的应用 4.3.3 switch-case嵌套 ...

  6. POJ3279(开关后续)

    描述: 一个\(n*m的矩阵,每个格子有0和1两种状态.每次可以翻一个格子,并且此格子的上下左右都要被翻.\) \(目标状态应该全为0,求最少翻的次数,输出最小字典序的方案\) 这儿可就麻烦了啊,开关 ...

  7. 王颖奇 20171010129《面向对象程序设计(java)》第十三周学习总结

      实验十三  图形界面事件处理技术 实验时间 2018-11-22 1.实验目的与要求 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作机制: (3) 掌握事件处理的基 ...

  8. Maxim实时时钟芯片设计指南5791-关于编写健壮的实时时钟控制代码的提示

    用DS12C887设计一个万年历,虽然反复查看说明书,还是出各种的错误. 因此,从美信官网查询资料,翻译的不太通,凑合着对照看. 原文链接 Tips for Writing Bulletproof R ...

  9. 03_CSS入门和高级技巧(1)

    上节课知识的复习 插入图片,页面中能够插入的图片类型:jpg.jpeg.bmp.png.gif:不能的psd.fw. 语法: <img src="路径" alt=" ...

  10. 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?

    [摘要] MongoDB sharding集群执行sh.stopBalancer()命令时被卡住怎么办?别慌,华为云数据库来给您支招,收下这份方案指南,让您分分钟远离被自建MongoDB数据库支配的恐 ...