概述
- 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位小数 |
---|
97 | A相电压 | 2 | 无符号,保留1位小数 |
---|
98 | B相电压 | 2 |
---|
99 | C相电压 | 2 |
---|
100 | A相电流 | 2 | 无符号,保留2位小数 |
---|
101 | B相电流 | 2 |
---|
102 | C相电流 | 2 |
---|
119 | 频率 | 2 |
---|
356 | A相有功功率 | 4 | 无符号,保留3位小数 |
---|
358 | B相有功功率 | 4 |
---|
360 | C相有功功率 | 4 |
---|
362 | 总有功功率 | 4 |
---|
- 所谓有符号是指,2 字节或者 4 字节最高 bit 为符号位,例如 0xFFFF 将被认为是-1。保留 2 位小数是指将数据当作整型转化之后,小数点从最右边向左移动 2 位。
设备配置
- 我们按照设备作为客户端的方式进行配置。
- 使用 SSCOM 工具,在本地计算机 1883 端口监听一个 TCP 服务器。
图 SSCOM 模拟服务器接收数据
图 设备配置
- 点击修改配置,可以让设备连接上 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 工具模拟的仪表能够被网关所采集。同时可以定时,按照 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网页版设置:
- 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 的方式传输到服务器。