当前位置:   article > 正文

c++ mqtt客户端_使用S7-1200和1500 轻松连接物联网MQTT 消息服务器

c++ mqtt客户端_使用S7-1200和1500 轻松连接物联网MQTT 消息服务器

写在面前(文中链接仅在同名公众号有效)

西家在技术的路上,相对来说是比较前卫的,数字化已成为西门子的核心战略之一,这从西门子多年来的战略布局不难看出,作为工业领域的技术人员,我们该如何应对呢?

前面我们举了几个例子:

当施耐德PLC遇上亚马逊AWS IOT,自动化工程师的数字化之路

当树莓派+S7-1500与阿里云跨界相遇-自动化工程师的数字化之路

当WinCC OA遇上Mindsphere,自动化工程师的数字化之路

面对新生事物,我们要保持足够的敏感,噱头也好,忽悠也罢,更重要的始终是技术本身,技术的深度和广度,既要严谨,又要开放包容,放下自己的成见,正如前面的文章:

自动化早已不是原来的自动化,为何你却还是原来的你

说的一样,新技术很多,在知识爆炸的时代并不缺少新的知识,但是如何去判定一个技术是否值得长期投入呢?借用阿里大佬的一句话,判定一个技术时候值得长期投入,主要考虑三个方面~

1、技术深度

2、生态广度

3、进化能力

随着物联网的兴起,MQTT也等物联网协议也逐渐被我们熟知,今天我们就以S7-1200和1500为例,分享如何通过它们连接MQTT消息服务器~

MQTT协议简介

MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。

MQTT 可以被解释为一种低开销,低带宽占用的即时通讯协议,可以用极少的代码和带宽的为连接远程设备提供实时可靠的消息服务,它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下,因此 MQTT 协议在 IoT(Internet of things,物联网),小型设备应用,移动应用等方面有较广泛的应用。

IoT 设备要运作,就必须连接到互联网,设备才能相互协作,以及与后端服务协同工作。而互联网的基础网络协议是 TCP/IP,MQTT 协议是基于 TCP/IP 协议栈而构建的,因此它已经慢慢的已经成为了 IoT 通讯的标准。

MQTT基本特点

1、MQTT是一种发布/订阅传输协议,基本原理和实现如下:

43f5bef31d096b45afe2e6bb5f9e68c4.png

MQTT 协议提供一对多的消息发布,可以解除应用程序耦合,信息冗余小。该协议需要客户端和服务端,而协议中主要有三种身份:发布者(Publisher)、代理(Broker,服务器)、订阅者(Subscriber)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,而消息发布者可以同时是订阅者,实现了生产者与消费者的脱耦。

2、使用 TCP/IP 提供网络连接,提供有序、无损、双向连接;

MQTT 是一种连接协议,它指定了如何组织数据字节并通过 TCP/IP 网络传输它们。设备联网,也需要连接到互联网中,在大万维的世界中,TCP 如同汽车,有轮子就能用来运输数据,MQTT 就像是交通规则。在网络模型中,TCP是传输层协议,而 MQTT是在应用层,在 TCP 的上层,因此MQTT 也是基于这个而构建的,提高了可靠性。

3、对负载内容屏蔽的消息传输;可以对消息订阅者所接受到的内容有所屏蔽。

4、具体有三种消息发布的服务质量:

至多一次,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

至少一次,确保消息到达,但消息重复可能会发生。

只有一次,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

5、小型传输,开销小,固定长度的头部是 2 字节,协议交换最小化,以降低网络流量;整体上协议可拆分为:固定头部+可变头部+消息体。

6、使用Last Will和Testament特性通知有关各方客户端异常中断的机制;

二、西门子的MQTT CLIENT库介绍

285d68794d145d570ae9d6590c3acb57.png

西门子的LMQTT_CLIENT使用的时MQTT3.1.1协议,“LMQTT_Client”库是实现SIMATIC S7控制器的MQTT协议通信的功能块,可以用在SIMATIC S7-1500和SIMATIC S7-1200中。函数块“LMQTT_Client”集成了MQTT客户机所有功能,允许您将MQTT消息传输到代理(发布者角色)和创建订阅(订阅者角色)。同时可以通过TLS来保证安全通信。

a0d4503d3b0aba90550218b76f36b7dd.png

实现步骤:

1、确定MQTT代理的CA证书。

2、将第三方证书导入STEP 7 (TIA Portal),该证书现在位于STEP 7的全局证书管理器中。

3、您必须将导入的证书分配给S7 CPU。要确认证书有效,S7-CPU的时间必须是当前的。

4 .函数块“LMQTT_Client”承担以下角色:

  • 发布者向MQTT代理发送MQTT消息
  • 订阅方可以订阅MQTT消息或最终订阅
  • MQTT消息通过安全连接(通过TLS的MQTT)加密。

三、“LMQTT_Client”测试

测试需求软硬件需求:

1、emqx-centos7-v3.2.2 Linux版本

2、1500PLC

3、TIA Portal V15.1

测试步骤:

1、安装MQTT的服务器。MQTT服务器的搭建有很多种方法,本次测试选择的emqx-centos7-v3.2.2的服务器。搭建步骤请参照以下的网站链接,这里不做过多的介绍。https://www.jianshu.com/p/6a9d15e8d0bc

安装完成后使用命名行启动emqx的MQTT服务器,如下图所示。

c2175dd7df1fd126a4cedc6b077b3054.png

2、搭建完成后可以使用客户端软件测试连接是否正常。本次测试使用的客户端为MQTTBox,MQTTBox下载和使用请参考官网链接,这里不做过多的描述。http://workswithweb.com/mqttbox.html

4c174212cca5ae208fd1b1c85bac99e0.png

3、下载“LMQTT_Client”库文件,库文件的网址如下:

https://support.industry.siemens.com/cs/ww/en/view/109748872

4、创建新的SETP 7项目,导入“LMQTT_Client”库文件。

dc4b0604b992b2fd614137eb484164a8.png
dfee7b261bf68c6870229b199471e900.png

5、将库里的功能块和数据类型拷贝到项目中。

55731c5247b20bc5493f8e97f26715df.png
59df4e4ca01bdfada680cb7b3ce0b6d5.png

6、创建用户数据块,添加“LMQTT_Client”功能块的接口数据。同时将“LMQTT_Client”添加到OB1中。如下图所示:

7a1050dc73b227f94397be4394d9c919.png

7、建立安全通信,具体步骤如下:

a) 激活"Use global security settings for certificate manager"

67e43509035bdc6adfcfa011fa6d02ce.png

b) 启用项目保护,操作如下图所示。保护项目后每次进入项目都要输入密码,所以密码一定要记住。

6cbe585c3057a53eba5e6639780d3636.png

c) 添加服务器证书。选择"Certificate manager",并在"Trusted certificates and root certification authorities"中添加emqx CA证书。

73647543c89cafbc552e523fd1e1e682.png
bf5960cbec19de36e9001c89be337808.png

d) Emqx的CA证书在/emqx/etc/certs/目录下,文件名为cacert.pem。

91a2233b0e1ebad92afb53a69663b246.png

e) 添加完成后可以看到证书的ID号为3,证书有效期为2019年11月2号。这里证书测试用的所以有效期时间比较短,证书到期后可以重新申请CA证书。

39ee88d2c1812ce89a538c2b9f9662ce.png

f) 选择PLC,在PLC的属性下选择"Certificate manager",并在"Certificates of the partner devices"选项下选择上一步安装的CA证书。

21cf0f2a617dfca3e5b1ea98118155b0.png

g) 设置PLC的IP地址和路由器的地址。

6d5eeb57ec4b47d461860c2b65561cd8.png

h) 上面步骤完成后下载并启动CPU。这时需要设置“LMQTT_Client”相关的参数。具体参数设置截图如下:

3b46d94193f7377832410bd10d29d0d9.png
201ab07d95280e24a6da063892ec6f08.png

参数中在TCP参数解释如下图所示:

66bd59b3b41dc700ea048febea9a5e07.png

参数中在MQTT相关参数解释如下图所示

c441774cccad892fb0d3873db4066416.png

8、仿真PLC并发布消息和接受消息。发布消息触发PublishData.PublishMessage,订阅消息置位SubscirbeData. SubscirbeToTopic,订阅和发布主题都为TF_1,测试效果如下图所示。

131dd97d8b8040e037cde50fffc4ef53.png

四、总结

1200和1500 PLC使用“LMQTT_Client”库可以实现与MQTT服务器的通讯,MQTT服务器可以是互联网”云端”的设备,也可以是局域网内的通讯。本次演示的是固定IP局域网的的MQTT通讯,“LMQTT_Client”同样也支持域名的访问。

往期推荐

MES、SCADA、PLC项目调试,遇到网络丢包怎么办?

MES、SCADA项目组网,如何进行冗余网络配置 | 工业通讯应用(一)

PLM、MES、SCADA等工业软件系统实施中的容灾与备份有什么区别?

工业网络的两层与三级-从PLM到MES,再到SCADA、PLC的连接

PLM、EMS/MOM、SCADA等各类工业软件的B/S架构与C/S架构有何不同

浅谈 MES、SCADA、PLC项目中的串口通信(232,485,422)及常见问题

PLC与SCADA或第三方软件的联合仿真调试—NetToPLCSIM

SCADA、DCS与PLC知多少?| 综合篇(三)

MES、SCADA项目中的数据采集—基于C#与研华IO模块的ModbusTCP通讯

MES、SCADA下的数据采集— 西门子S7comm协议分析

MES、SCADA下的数据采集—从TCP到你应该了解的socket通信

MES、SCADA项目中的数据采集—以太网下三菱MX Component应用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/616957
推荐阅读
相关标签
  

闽ICP备14008679号