RS232 TO ETH (B) MQTT 和 JSON使用手册

概述

  • MQTT 和 JSON 可以单独使用也可以合起来使用。其中的 JSON 支持Modbus RTU 格式转化为 JSON 格式。

主要特点是:
1. 采用 MQTT 为基础的协议和服务器建立连接,采用订阅发布的形式进行数据通讯。
2. 支持 Modbus RTU 寄存器的自主设计和自动采集。
3. 支持将特定的 Modbus 寄存器内容转化为 JSON 格式定时主动上发。
4. 支持在 JSON 格式中加入设备 ID、时间、任意字符串。
5. 支持 JSON 格式的嵌套书写方法。
6. 支持 NTP 协议,自动获取时间。
7. 支持无符号数据和有符号数据,支持小数点表示,支持 4 字节长度数据。
8. 所有配置都可以界面化配置完成,用户自主配置无需定制。

JSON 简单例子

MODBUS RTU 转 JSON

  • Modbus RTU 转 JSON 可以实现 Modbus RTU 表的自动采集,并按照JSON 格式自动上发给云端服务器。
  • 这里我们通过一个具体的案例来讲解这个用法。

MODBUS 表

  • 假设现在有一个功能码为 3,地址为 1 的 Modbus 表,其寄存器地址和参数名如下。其中字节长度为 4 的表示需要连续读 2 个寄存器。
寄存器地址参数名字节长度备注
0当前总有功电能4无符号,保留2位小数
97A相电压2无符号,保留1位小数
98B相电压2
99C相电压2
100A相电流2无符号,保留2位小数
101B相电流2
102C相电流2
119频率2
356A相有功功率4无符号,保留3位小数
358B相有功功率4
360C相有功功率4
362总有功功率4
  • 所谓有符号是指,2 字节或者 4 字节最高 bit 为符号位,例如 0xFFFF 将被认为是-1。保留 2 位小数是指将数据当作整型转化之后,小数点从最右边向左移动 2 位。

设备配置

  • 我们按照设备作为客户端的方式进行配置。
  • 使用 SSCOM 工具,在本地计算机 1883 端口监听一个 TCP 服务器。


图 SSCOM 模拟服务器接收数据

  • 使用 Vircom 对设备进行配置:


图 设备配置

  • 点击修改配置,可以让设备连接上 SSCOM 工具。再次进入设备编辑对话框。点击“固件和配置”按钮。


图 下载界面

  • 首先点击“网页目录下载”进入配置下载模式。然后选择一个新的空目录,比如MQTTHTTPD目录。防止之前的设计有残留,请先点击“清除全部”按钮,这样可以清空之前的设计内容。设计文件将会保存在这个目录,等一下可以通过点击“下载”按钮下载到设备内部。
  • 点击“JSON 配置”按钮


图 JSON 配置主界面

  • 这里的参数说明如下:

1.上发服务器时间:默认JSON数据每隔多少时间上发到服务器,服务器就是刚刚在设备配置界面设置的目的IP,单位是毫秒。

2.选择接入的云平台:提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA 升级、设备联 动规则等能力,并可将设备数据灵活流转到华为云其他服务。

3.JSON的上层协议:三种选择(NONE/MQTT、HTTP POST、HTTP GET),选择NONE/MQTT,下面不用设置域名、地址和变量名,选择另外两种根据实际使用去填写即可。

4.上发数据增加帧头、帧头格式:用户可自行选择是否需要添加,主要用来区分设备

5.上发多少次后输出指令和输出条件:这里主要是用来判断一个循环,该功能根据需求使用即可

6.添加或者删除Modbus寄存器:点击后可以进行Modbus寄存器的设计,也可以查看目前已经内容,删除是删除设计的所有的Modbus寄存器,方便重新开始设计。

7.保存JSON设置:设计完成后只有点击这个按钮才可以保存数据到刚才的下载目录,之后可以下载到设备内部。

8.导出/导入EXCELL格式文件配置:方便导出跟导入JSON配置

  • 现在点击“添加/查看”按钮。对于之前的Modbus表的第一行:
寄存器地址参数名字节长度备注
0当前总有功电能4无符号,保留2位小数
  • 对应的配置如下:


图 添加Modbus寄存器

  • 这里的参数说明如下:

1.第1个寄存器:这里的1,表示现在的设计界面是配置第一个寄存器。

2.已经添加过:如果打勾说明是已经添加的,查看已经配置的信息的时候会出现打勾的情况。

3.JSON数据节点类型:根据需求选择对象数据跟数组数据

4.对应的JSON关键词:对应上发的JSON中的keyword。例如”CurrentW”:232.12。

5.从站地址:Modbus的表地址。

6.Modbus功能码:目前支持03和04功能码。

7.寄存器地址:这里对应的0。

8.数据长度:这里对应是4字节。

9.保留小数点:这里保留2位。

10.根据需求启用平移跟缩放

11.数据格式:这里对应是无符号整型。

12.数据和增加单位:根据数据,设置对应的单位

13.数据是否需要用引号包含:是打勾,否不打勾

14.串口轮询时间:这里设为100ms。是指这个寄存器和下个寄存器的轮询的间隔,而不是这条指令的轮询间隔。

15跟16.功能选择,根据需要选择

17.设计下一个:点击后进入下一个寄存器的设置。

18.删除并到下一个:删除现在已添加的,配置下一个寄存器

19.保存设计:完成设计,之后点击上一个界面的“保存JSON配置”即可。

20.取消设计:取消当前的所有设计,如果是查看设计内容,可以点击这个按钮退出。

  • 这里点击“设计下一个”按钮继续设计Modbus表中的其它寄存器。全部设计完表格中的寄存器后,点击“完成设计”,然后点击“保存JSON配置”后退出。然后点击“下载web”页面的“下载按钮”


图 下载界面

  • 然后点击“确定”,设备会自动重启。如果没有重启请手动重启。

新建 MODBUS 模拟表

  • 这里使用 Modbus Slave 来模拟一个表(需要一个串口设备,用来模拟Modbus设备,我这边使用的是USB TO RS232/485/TTL)


图 测试结果

  • 测试结果显示,使用 Modbus slave 工具模拟的仪表能够被网关所采集。同时可以定时,按照 json 格式上发到 SSCOM 模拟的服务器软件端。

JSON 转 MODBUS RTU

  • JSON 转 Modbus RTU 支持 05/06/16 指令。如果需要用 15 指令设置多个线圈请多次使用05 指令即可。
  • 根据字节数的长度系统会自动选择 06 或者 16 指令来发送。这里分别举一个设置线圈和设置寄存器的例子。
  • 假如收到{alert:”on”}的 JSON 数据需要用 05 指令设置站地址 02,寄存器03 开始的线圈。则在:JSON 转 Modbus 界面中点击“JSON 下发”


图 进入 JSON 下发

  • 配置界面如下:注意这里的 alert:”on 置需要写入部分就可以了。


图 配置线圈

  • 点击“下一步”可以再增加一个下发转化,否则点击“保存全部并退出”。回到主界面后点击“保存JSON 设置”,然后点击“返回”。然后注意在下载界面点击“下载”。这样就完成了配置。
  • 假如现在有发送{power:”12345”}下来则需要将 power 的值 12345 设置到站地址2,寄存器3。则设置如下:


图 JSON 设置寄存器

  • 注意这里的关键词只需要输入 power:”即可,不需要将后面的 12345 输入,因为这个数值是变化,但是需要输入冒号,如果引号在下发数据中有的也需要输入引号。

MQTT

设备配置

  • 首先搜索到设备,然后点击编辑设备:


图 MQTT 配置图 1

  • 点击“固件与配置”,弹出配置下载和设计对话框:


图 MQTT 配置图 2

  • 这里选择“网页目录下载”,然后选择一个空的目录,比如 MQTTHTTPD 目录,然后点击MQTT 配置。


图 MQTT 配置图 3

这里配置说明如下:

1.服务器域名或 IP:这里填写的是 MQTT 服务器的 IP,最长为 30 个字符。

2.用户名:是 MQTT 服务器的用户名。

3.密码:是这个用户的登录密码。

4.客户端 ID:是 MQTT 的 client ID。

5.订阅主题:是这个设备订阅的主题,有其它设备发布这个主题的时候,服务 器会下发给这个设备。如果只是发布,一般无需填写这个字段。

6.发布主题:这个设备串口转 MQTT 的时候向服务器发送的数据的主题。

7.MQTT 高级参数:用于配置高级参数。

8.保存 MQTT 设置:设计完毕点击这个按钮进行保存,然后点击网页下载目录的“下载按钮”下载。

  • 现在先点击“MQTT 高级参数”(一般无需配置高级参数):


图 MQTT 高级参数配置图

说明如下: 1.协议版本:目前主流的是 3.1.1 版本,如果需要选择 3.1 版本,请在这里选择。

2.保活时间:MQTT 的心跳时间,最少为 10 秒,默认为 60 秒。

3.服务器清除订阅:客户端断线后服务器是否清除订阅信息。

4.是否启用遗愿:是否有遗愿。

5.遗愿主题:遗愿主题。

6.遗愿信息:遗愿的信息。

7.是否保存遗愿:服务器是否需要保持客户端异常离线时发送给客户端的遗愿消息。

8.遗愿质量:服务器发送的遗愿消息的交付质量级别。

9.订阅质量:订阅的交付质量级别。有的情况下需要设置为 0,防止重传引起断线。

10.发布质量:客户端发布消息的交付质量级别。有的情况下需要设置为 0,防止重传引起断线。

11.是否保存发布:服务器是否保持最后一条消息(如果有新的客户端订阅则发送给客户端)

  • 我们这里不修改高级参数。直接点击“保存 MQTT 设置”。然后点击“下载”


图 下载

  • 下载完毕点击确定,此时会回到设备管理对话框,看到设备的目的 IP、工作模式、目的端口已经自动修改为 MQTT 的设置:


图 查看是否获取到IP

  • 如果没有自动修改则需要在设备编辑对话框下,设置目的 IP、工作模式、目的端口。然后点击“修改设置”。


图 IP 配置

数据收发测试

  • 连接完成后设备的 LINK 灯(一般为中间的蓝色灯)变亮。说明设备正常连接上MQTT 服务器。
  • 将串口设备跟RS485 TO POE ETH (B)连接好,再打开串口工具:


图 串口发送和接收

  • 使用和设备一样的波特率打开串口,并发送数据“dev send”,此后在接收窗口看到返回的数据“dev send”。这是由于我们将 dev send 这个信息以 mqtt 的主题发布给MQTT 服务器。但是同时我们的设备也订阅了 mqtt 这个主题,所以服务器立刻会给我们发送一个订阅信息,订阅信息的内容就是 dev send。这个信息作为 MQTT 的载荷发送下载,通过透传的方式从串口输出。如果其它设备发布信息过来,这个设备也能够收到数据。
  • 一般来说,用户可以直接将串口指令(比如 Modbus RTU)指令直接透传给MQTT 服务器。另外也可以使用 JSON 功能,采用自动 Modbus RTU 格式采集,定时 JSON 格式上发的形式。另外也可以找微雪电子定制一些非标的仪表和上位机协议格式。

MQTT+JSON 转 MODBUS RTU

  • 将上述的 JSON 和 MQTT 相组合可以实现如下的功能:

1. 采用 MQTT 为基础的协议和服务器建立连接,采用订阅发布的形式进行数据通讯。

2. 支持 Modbus RTU 寄存器的自主设计和自动采集。

3. 支持将特定的 Modbus 寄存器内容转化为 JSON 格式定时主动上发。

4. 支持在 JSON 格式中加入设备 ID,方便云端识别设备。

  • 如果需要 MQTT+JSON 转 Modbus RTU 功能的,可以分别设计 MQTT 和 JSON,不分先后次序。设计完一种不要点击“清除设计”按钮,两个设计完,一起点击“下载”按钮下载到设备内容。一般可以下载后手动重启设备,加载设置。
  • 效果展示
  • MQTT网页版设置:

图 MQTT网页版配置

  • JSON设置

  • MODBUS 模拟表设置

  • MQTT+JSON 转 Modbus RTU的通信效果

HTTP POST/GET+JSON

  • 上位机协议除了选择 MQTT 外还可以选择 HTTP 协议,通过 POST 和GET 指令来上传数据。下面以 POST 指令为例来介绍。


图 POST+JSON

  • Vircom 版本增加了 JOSN 转 Modbus RTU 设置中的两个选项,如图所示:

1. JSON 的上层协议:如果是无协议或者 MQTT 协议,请选择第一项:“NONE/MQTT”。如果为HTTP POST 请选择第二项“HTTP POST”,如果为 HTTP GET 请选择第三项“HTTP GET”。

2. POST/GET 的 URL:选择 POST 或者 GET 的时候必须填写 URL,例如 URL 为http://s.a.com/wri/v2 则去掉前面的http://,直接将 s.a.com/wri/v2 填写进入。

  • 其它的 JSON 结构设计方法和之前介绍的方法一样,之后点击“保存 JSON 设置”按钮时,如果选择了 POST/GET 的会在 JSON 数据的前面增加 HTTP 的头格式信息,用以支持HTTP 传输协议。
  • 此POST/GET 设计方法简便、实用,可以简单、快速实现将 Modbus RTU 等仪表数据以 HTTP POST/GET+JSON 的方式传输到服务器。