产品
新闻资讯
新闻资讯 NEWS
当前位置:首页 > 新闻资讯 > 公司新闻
MQTT网关二次开发以及与Mobus协议的区别
发布时间:2018-06-15 10:20:24 浏览次数:


物联网 (IoT) 不只是新技术, 还是与旧技术的集成,其关键在于通信。 可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接到互联网时发挥着重要的作用。 本文介绍了两种物联网补充协议: 用于短距离设备连接的本地协议 Modbus 以及支持物联网进行全局通信的可扩展互联网协议“消息队列遥测传输 (MQTT)”。


Modbus 是一个串行通信协议,首次出现于 1979 年,是连接行业设备实际使用的标准协议。 MQTT 早在 20 年前便已出现,但是将这两个协议结合在一起使用,能够为深度嵌入式设备提供物联网的规模和连接性。 图 1 展示了这些协议之间的一般关系,同时介绍了连接的支持解决方案:物联网网关。


图 1. 物联网 (IoT) 网关作为物联网通信的支持解决方案 我们来看一下 Modbus 和 MQTT,以了解其区别以及如何在物联网中互相补充。
MQTT网关二次开发


Modbus
自 1979 年首次出现至今,Modbus 已经演变为一套全面的支持多种物理链接的协议集(如 RS-485)。 Modbus 的核心是一个串行通信协议,采用主从模式。 主机向从机发送请求,从机予以回复。 在标准 Modbus 网络中,有一台主机以及最多 247 台从机(但是,如果采用 2 字节寻址,则可显著提高这一界限)。


借助 RS-485,主从机之间的通信发生在指示功能码的帧中。 该功能码可识别要操作的功能,如读取独立输入;读取先进先出队列;或执行诊断函数。 然后,从机根据收到的功能码进行响应,该响应较为简单,由一组字节指示。 因此,从机可以是智能设备,也可以是只有一个传感器的简单设备。

从该描述中,您可以看到 Modbus 协议非常简单,但是其作为协议的开放性使其成为整个行业或 SCADA 系统的实际通信协议。

消息队列遥测传输
MQTT 是一个开放的轻量级机器对机器协议,专为物联网交互设计。 MQTT 网络包含一个 MQTT 经纪人 (broker),负责协调 MQTT 代理之间的交互。 代理是发布器,负责发布供用户使用的信息(参见图 2)。

图 2. 消息队列遥测传输网络中的作用因素
MQTT网关二次开发
MQTT 的要求非常少,因为它专为资源有限的嵌入式设备设计。 除了占地空间少之外,MQTT 还可提供出色的通信高效性(即使通过低带宽网络进行通信)和非常少的开销(较之 HTTP 等协议)。 在 3G 网络中,MQTT 的吞吐量速度是使用 HTTP 的表述性状态转移 (REST) 的 93 倍。

MQTT 可使用最少的方法指示要在特定主题上实施的操作,进而实施发布/订阅模式。 代理先连接到经纪人,然后再发布或订阅主题。 完成后,代理将从经纪人上断开连接。 MQTT 方法定义:

连接 - 建立与 MQTT 经纪人之间的连接。

断开连接 - 断开与 MQTT 经纪人之间的连接。
发布 - 在 MQTT 经纪人上发布主题。
订阅 - 从 MQTT 经纪人上订阅主题。
退订 - 从 MQTT 经纪人上退订主题。

图 3 展示了发布者与订阅者使用 MQTT 经纪人进行的简单交互。 如图所示,信息创建者 (producer) 连接至 MQTT 经纪人。 同样,信息消费者 (consumer) 连接至 MQTT 经纪人。 消费者订阅主题(此处定义为 /home/alarms/1/status)。 本示例主题可识别主页上针对区域 1 的警报系统的状态变化。 当创建者有信息要分享时,它会向经纪人发布一条消息,然后经纪人将会将信息分享给所有订阅该主题的用户。
图 3. 消息队列遥测传输代理之间的简单交互
MQTT网关二次开发

请注意此处分享的主题结构。 它与文件系统层次结构相似,这可简化主题的结构。 这种资源层次形式也常见于协议架构中,如 REST。

MQTT 甚至允许使用通配符的形式,以简化订阅流程。 如果用户想要获取所有警报的状态,则可直接订阅 /home/alarms/+/status,该主题可通知用户所有的警报状态变化。 整个子树还可使用主题 /home/# 进行订阅,该主题可以订阅 /home 下的所有事件。

服务质量
MQTT 允许定义服务质量 (QoS)。 MQTT 中有三个等级的 QoS:

QoS 0。 该等级表示“最多一次”交付(最佳状况)。 消息不会得到确认,因而,这是一种一劳永与的方法。

QoS 1。 该等级表示“至少一次”交付。 用户可能不止一次获得消息,但是允许收到的人确认已经收到。

QoS 2。 最慢但是最有保障的服务质量等级即为等级 2。 QoS 2 表示“只有一次”,并包含四个阶段的交付握手。 该等级最慢,但是最安全。

您选择的 QoS 等级将取决于数据及其交付的重要性。

消息队列遥测传输经纪人
随着越来越多的物联网采用 MQTT 作为支持协议,您将会发现许多开源应用和产品中出现了 MQTT。 英特尔® 物联网网关解决方案则是其中一款采用 MQTT 的全面物联网解决方案。

该系列产品支持传感器、设备和云之间安全交互。 这些预验证的应用就绪型平台支持出色的可管理性、安全性和多种连接选项,如 ZigBee*、蜂窝网络、蓝牙*、USB、Wi-Fi*,当然还有 MQTT 和 Modbus 等协议。

 

HJ8300MQTT工业级网关是一款带SDK二次开发工业级4G路由器,利用移动网络为终端设备提供无线数据传输功能。 支持SDK二次开发,ROOT权限,集成交叉编译器,集成了GCC、GDB、GLIBC库,支持C/C++,Python,PHP,支持MQTT,SSH、FTP、MySQL。用户可以直接通过SSH在HJ8300里编译自己软件,直接运行。HJ8300MQTT4G路由器支持4G全网通、WIFI、以太网、交换机、路由器DTU、RS232、RS485。支持远程控制终端设备,如PLC、触摸屏、仪表仪器远程上下载程序、远程调试。
MQTT网关二次开发HJ8300的MQTT使用

安装软件mosquitto-1.4.15 和 json-c-0.12

Mosquitto提供了Windows、Linux以及qnx系统的版本,HJ8000系列安装的linux操作系统,所以选择了mosquitto的linux版本源码安装。

HJ8000系列的MQTT的demo采用json编码,网关模式作为MQTT的客服端,可以发布和订阅MQTT消息,程序部分使用C语言编写。

demo程序的文件说明:

main.c 主程序文件

base.h 头文件

Makefile 编译的Make文件

poll_rftcm_s.txt 配置文件,包含MQTT的服务器的地址和端口等配置信息

MQTT的消息格式:

网关发布消息的TOPIC:/ge/MQTT帐号/网关MAC/采集设备地址

网关订阅消息的TOPIC:/gc/MQTT帐号/网关MAC/采集设备地址

比如服务器发布一个时间消息给网关的82号设备格式如下:

/ge/bluegw/C2-48-00-00-32-47/82

{ "h":{/* message header */

"T":85,

"ID:1

},

"b":{/* message body */

"cf":3,

"cc":1,/* message command */

"dl":{/* message parameter list */

"week":1,

"hour":12,

"minites":35,

"second":21,

}

}

}

网关订阅一个MQTT消息:/ge/bluegw/C2-48-00-00-32-47/82,这样服务器或者其他客户端只要发送这个消息主题的内容,网关都会收到,然后网关根据实际实际情况处理。

华杰智控HJ8200MQTT demo说明

HJ8200系列有很多接口,比如RS232/RS485/ETH/RF433M等,HJ8200的软件管理了这些接口,如果用户需要使用这些接口,可以发送一个接管命令给HJ8000的软件,HJ8000就会把这些接口的数据直接发送到linux的命名pipe里面,这样就可以直接从这些命名pipe里面读取数据,或者写入数据到命名pipe,HJ8000软件就会直接写到实际的端口。

MQTT的demo使用的RF433M接口,RF433M接口的命名pipe如下

读取的pipe名称: /var/vspp/WR_RF4;

写入的pipe名称: /var/vspp/RD_RF4;

MQTTdemo的框架示意图(由PIPE线程和MQTT线程组成)

MQTT网关

1. MQTT订阅的消息处理回调函数解析命令,把命令挂在在PIPE线程的rf_cmmd_list队列,由PIPE线程负责发送

2. PIPE线程的定时器负责检查超时的数据处理。

3. PIPE线程接收函数负责处理从RF433M的管道来的数据,同时发送rf_cmmd_list队列的数据到RF433M的管道。

如有需要请联系  13088880809(微信/电话)