![69667b1700d37b485554a1b96010314b.png](https://i-blog.csdnimg.cn/blog_migrate/128f897bd60416ca103acb2186c5d489.jpeg)
1、写在前面
为了应对标准化和跨平台的趋势,更好的推广OPC,OPC基金会在OPCDA成功应用的基础上推出了一个新的OPC标准——OPC UA,OPCUA不再基于分布式组件对象模型(DCOM),而是以面向服务架构(SOA)为基础,因此,在未来的若干年中,OPCUA将逐步取代OPCDA,成为新一代的OPC标准,助力工业4.0。
而提起MQTT,或许大家有些陌生。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。具有轻量、简单、开放和易于实现的特点,尤其在物联网IOT领域应用非常广泛。物联网一直都是一个很热门的话题,而数据上云,也是现在工业上很普遍的一个需求。至于如何实现,各个厂家都提供了各种不同的解决方案,无分好坏,最适合的就是最好的。刚看完一篇名为《OPCUA+MQTT=物联网扩展的热门组合》的公众号文章之后,文思泉涌,想着如何将OPCUA与MQTT联合起来,构建一个物联网通用框架,实现数据远传。
2、整体网络架构
很多时候,我们的需求是这样的:现场有N台不同的设备或系统,每台设备或者系统的协议是各不相同的,希望可以用一种通用并且简单的方法,将这些数据传到云端,实现远程访问。这样的需求,其实是物联网最典型的应用之一,那么采用OPCUA+MQTT或许是个不错的选择,整体的框架设计如下:
![6a24c404a53c729eff8b3576af384e74.png](https://i-blog.csdnimg.cn/blog_migrate/ffa7471e51a80ca6ab78d956dccae4e4.jpeg)
为了实现整体功能,这里的设备层,采用Modbus Slave,基于Modbus TCP协议来做仿真测试,增加5个变量,分为为压力1-压力5,对应地址从40001-40010,数据类型为浮点型,运行Modbus Slave仿真结果如下:
![24cfb4c1938c53c876a73c45cb97f790.png](https://i-blog.csdnimg.cn/blog_migrate/094985970c38e9e363cb7395fce15807.png)
3、服务层
至于服务层,主要是OPCUA服务器的开发应用,这里我们有两个选择,一种是采用第三方的OPC软件,比如Kepware、Knight、Matrikon这些公司的产品,这种比较容易,做下相关配置即可,另外一种方式就是自己开发,相对来说难度要大一些。
这里我使用自己开发的一款软件——CMS配置一体化软件,通过简单配置,在10秒内,实现了ModbusTCP客户端数据通信,结果如下:
![629f99d9951a9b22f4afc89c23133105.png](https://i-blog.csdnimg.cn/blog_migrate/ce0073c849803f24507f0de49a5e1ae2.jpeg)
然而,这部分,仅仅是实现了ModbusTCP客户端的功能,如果要实现OPCUA服务器的功能,需要激活一下OPCUA服务器,在服务器节点下添加一台OPCUA服务器即可,添加完成后,保存重新运行,结果如下:
![24b60653bbeab41d39b07e9b4fd5f4ae.png](https://i-blog.csdnimg.cn/blog_migrate/5ac6d1a627df6226ef0b84b362074773.jpeg)
为了测试OPCUA服务器是否开启成功,需要进行测试,可以使用官方软件UAExpert软件来测试一下:
![4775e0c3b429cf731236a8c4668173aa.png](https://i-blog.csdnimg.cn/blog_migrate/4b41bba3c8d5ca3991f2e0107f783ac2.png)
4、数据层
(1)在实现数据层功能之前,需要创建一个MQTT服务器,这里基于.NET CORE编写了一个MQTT服务器的程序,并在阿里云服务器中部署运行(这里要注意开放端口1883),运行效果如下:
![6bd0781c74357d13906ec75d010b002f.png](https://i-blog.csdnimg.cn/blog_migrate/27740ba158c719ca7e99991a297a4dd5.png)
(2)MQTT服务器创建完成之后,重新打开一个CMS配置软件来进行OPCUAClient的功能测试,上一节中的UAExpert是官方的OPCUA客户端软件,仅用于测试使用,这里的使用的CMS配置软件的OPCUAClient是自己开发的客户端程序,经过配置之后,运行结果如下:
![89b5ae9995bd9847c962944358a40b0c.png](https://i-blog.csdnimg.cn/blog_migrate/9a7aba3a01f3b79dfe9937640d5908d5.jpeg)
(3)在CMS配置人家的服务器节点中,右击添加一个MQTTClient,根据MQTT服务器配置相关IP、用户、密码、主题及更新时间等信息,具体如下:
![5f21d3897d01c756918caa98fe331564.png](https://i-blog.csdnimg.cn/blog_migrate/ff607be28f40c674ae3ee20073ee2d48.png)
(4)配置完成后点击启动按钮,整体运行之后,可以看到MQTT连接成功,并按照设定的周期将最新的数据发布到指定的主题中,效果如下:
![9784cdd14ab14ff0fa7c121aa69275b8.png](https://i-blog.csdnimg.cn/blog_migrate/c3337116fba4d22fe88c5d0dec80c3b0.jpeg)
(5)打开MQTT服务器,也可以看到不断地有数据发布过来,这里为了便于观察结果,将压力1的数据仿真成每秒加1,MQTT服务器数据接收如下:
![264893cdd367f1d9ab3d30decc45cc3a.png](https://i-blog.csdnimg.cn/blog_migrate/c9bec9b6267c5ac1c3dd799a9fde2a6e.png)
5、应用层
通过以上的相关部署,即可实现整个OPCUA+MQTT的实现,实际应用时,只需要开启一个MQTT客户端,连接指定的MQTT服务器,并订阅相应的主题,即可获取到设备层的实时数据,这里使用一个常用的MQTT客户端软件,即MQTT.fx:
![29bfb91fd5a8e2104c276d550729d0e3.png](https://i-blog.csdnimg.cn/blog_migrate/789c0acfa5d6e5a22094a04a40b133d0.jpeg)
6、写在最后
本文旨在结合当下主流的OPCUA统一架构和MQTT通信协议,实现一种数据上云的途径,对于自动化行业的工程师来说,可以拓展大家的思路。未来更多是IT和OT相结合的一种趋势,因此,作为每个工控技术人员,都要时刻保持危机感,不断学习,不断进步,这样才能更好地面对未来工业的快速发展。