物联网协议-Modbus、MQTT、WebSocket、Socket

作者:vkvi 来源:ITPOW(原创) 日期:2022-4-29

Modbus

Modbus 属于应用层的协议,就像 HTTP,比如 HTTP 规定你得很传什么 method、path、accept、cookie……

Modbus 类似,它规定了几个字节,比如第一个字节表示你要给哪个设备发,第二个字节表示这是什么命令,第三个字节表示从哪个寄存器开始操作……

包含 ASCII、RTU、TCP 三种报文类型,串口传输多选用 ASCII、RTU,以太网传输选用 TCP,TCP 时无需校验,因为 TCP 本身就是可靠的协议。

  • ASCII 模式:要发送 0xAB,就发送 A、B 这两个 ASCII 字符,需要 2 个字节。ASCII 模式下,从设备监听是否有“冒号”,有的话,继续,看看后面的地址是不是自己的,是的话,就接收,不是的话,就不予理睬。

  • RTU 模式:要发送 0xAB,按二进制算,只需要发送 1 个字节(A 用 4 位表示、B 用 4 位表示,十六进制嘛)。

可以看出 Modbus 不可能是走的模拟量,实际上很多 RS485 的传感器,都是执行的 Modbus 命令标准。

实际上,我更愿意将 Modbus 理解为命令格式、数据格式(比如 XML、JSON 就是一种数据格式)。

这玩意吧,不适合在互联网上传播,因为它没有认证机制、权限机制,任何人只要知道了地址和端口,都可以向其发送指令,所以它多数不与服务器直连,而是与 DTU 相连,DTU 再与服务器相连。

Modubs 的RTU、ASCII、TCP傻傻搞不清楚?这将是你见过的最全面分析 - 知乎 (zhihu.com)

MQTT

这是物联网常用的协议,MQTT 里面有三个身份:

  • Broker:经纪人,也就是服务器。

  • Publisher:发布者。

  • Subscriber:接收者。

要实现双向通信的话,其实:Publisher 也是 Subscriber,Subscriber 也是 Publisher。

Publisher 并不会直接发数据给 Subscriber,它是发给 Broker,Broker 再根据订阅情况发给对应的 Subscriber。

  • 连接:建立与经纪人之间的连接。

  • 断开:断开与经纪人之间的连接。

  • 发布:在经纪人上发布主题。

  • 订阅:从经纪人上订阅主题。

  • 退订:从经纪人上退订主题。

MQTT 订阅时有个概念叫主题,它形如:/itpow/alarms/#,# 是通配符,表示全部,也就是说只要发布的主题前面是 /itpow/alarms/,它全要。

MQTT 有三个等级的服务质量(QoS)

  • QoS 0(最多一次),丢了就丢了。

  • QoS 1(最少一次),反正我要保证你收到,如果重复了,我也不管。

  • QoS 3(只能一次),可以看出这种最复杂,需要 4 个阶段交付握手,通常适用于非常重要的场合,比如:刷卡(带金融性质的卡)。

Eclipse Mosquitto

是一个开源消息代理(一套软件),实现了 MQTT 协议。

文档下载:MQTT-3.1.1-CN.pdf

请参见:MQTT 实战-Mosquitto + MQTT.fx

WebSocket

HTTP 是基于 TCP 的,缺点是用完就关掉了,这就导致服务器无法实时传送数据给浏览器,以前大家都是定时刷新技术来实现及时获取服务器最新数据。

后来将 HTTP 改造一下,形成了 WebSocket,其面上的功能就和 MQTT 很像了。

不过二者差别还是很大的

报文结构差异巨大;会话协商方式不同;消息收发方式不同;保活机制(保持连接)不同。

MQTT和Websocket的区别是什么? - 知乎 (zhihu.com)

不过二者是有交集的

比如要利用网页来实时接收传感器数据,或者控制传感器。

MQTT Over Websocket_JuneHwa的博客-CSDN博客_mqtt over websocket

Socket

其实 Socket 是一个抽象概念,位于应用层和传输层之间,可以理解为就是一个接口,这个接口规定了什么 IP 呀、端口呀。

实习日记(5-18)Socket与MQTT_黑胡子大叔的小屋的博客-CSDN博客_mqtt协议和socket

HTTP

有支持 HTTP 直接 POST、GET 的数据采集终端。


相关文章