关注官方微信

EN

EN.

卓岚MQTT和JSON转Modbus网关用法

发布时间:2019-09-09 作者:上海卓岚 浏览量:11523
1.概述

本文介绍卓岚支持MQTT和JSON的设备的用法,支持的设备包括ZLAN5143、ZLAN8303-7、ZLAN1043、ZLAN7144等。其中ZLAN5143、ZLAN8303-7、ZLAN1043的固件版本要在1.577及以上,ZLAN7144需要在1.489及以上。需要和zlvircom的5.09版本配合使用。

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

主要特点是:

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

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

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

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

5.支持无符号数据和有符号数据,支持小数点表示,支持4字节长度数据。

6.所有配置都可以界面化配置完成,用户自主配置无需定制。

2.JSON
2.1.Modbus RTU转JSON

卓岚Modbus RTU转JSON可以实现Modbus RTU表的自动采集,并按照JSON格式自动上发给云端服务器。

这里我们通过一个具体的案例来讲解这个用法。

2.2.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位。

2.3.设备配置

我们按照设备作为客户端的方式进行配置。

使用SocketDlgTest,在本地计算机1883端口监听一个TCP服务器。

Socket模拟服务器接收数据

使用ZLVircom对设备进行配置。

设备配置

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

下载界面

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

点击“JSON配置”按钮。

JSON配置主界面

这里的参数说明如下:

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

2.是否上发设备ID:如果选择1则会在每次上发的JSON数据中包含有设备的ID,设备ID就是在设备编辑界面左上角看到的设备的MAC地址。

3.ID的JSON关键词是自己命名的ID对应的的JSON关键词,这里写MyID,最长为32字节。这样以后JSON格式中会增加”MyID”:”2850002F0EEC”的内容。这类似于注册包,有利于服务器识别是哪一台设备发来的数据。

4.添加/查看:点击后可以进行Modbus寄存器的设计,也可以查看目前已经内容。

5.删除全部:删除由“添加/查看”按钮设计的所有的Modbus寄存器,方便重新开始设计。

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

现在点击“添加/查看”按钮。对于之前的Modbus表的第一行:

寄存器地址 参数名 字节长度 备注
0 当前总有功电能 4 无符号,保留2位小数

对应的配置如下:

寄存器设置

这里的参数说明如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

下载

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

2.4.新建Modbus模拟表

这里使用Modbus Slave来模拟一个表

测试结果

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

3.MQTT

MQTT可以单独使用也可以和JSON功能配合使用。当单独使用的时候MQTT功能将串口数据透传上发MQTT服务器。也就是将串口接收的数据作为MQTT的载荷。同时MQTT的载荷会以透传的方式从串口输出。实现串口转MQTT。

3.1.设备配置

MQTT配置1

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

MQTT配置2

这里选择“网页目录下载”,然后选择一个空的目录,比如MQTTHTTPD目录,然后先点击“清除全部”清除之前的设计(注意如果之前按有JSON设计的,则不要清除全部,否则会清除之前的JSON设计)。然后点击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.订阅质量:订阅的交付质量级别。

10.发布质量:客户端发布消息的交付质量级别。

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

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

下载

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

自动修改

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

IP配置

这样配置就完成了。

3.2.数据测试

连接完成后设备的LINK灯(一般为中间的蓝色灯)变亮。说明设备正常连接上MQTT服务器。

现在打开串口工具:

串口发送和接收

使用和设备一样的波特率打开串口,并发送数据“dev send”,此后在接收窗口看到返回的数据“dev send”。这是由于我们将dev send这个信息以zlansub的主题发布给MQTT服务器。但是同时我们的设备也订阅了zlansub这个主题,所以服务器立刻会给我们发送一个订阅信息,订阅信息的内容就是dev send。这个信息作为MQTT的载荷发送下载,通过透传的方式从串口输出。

如果其它设备发布信息过来,这个设备也能够收到数据。

一般来说,用户可以直接将串口指令(比如Modbus RTU)指令直接透传给MQTT服务器。另外也可以使用JSON功能,采用自动Modbus RTU格式采集,定时JSON格式上发的形式。另外也可以找上海卓岚定制一些非标的仪表和上位机协议格式。

4.MQTT+JSON转Modbus RTU

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

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

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

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

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

如果需要MQTT+JSON转Modbus RTU功能的,可以分别设计MQTT和JSON,不分先后次序。设计完一种不要点击“清除设计”按钮,两个设计完,一起点击“下载”按钮下载到设备内容。

一般可以下载后手动重启设备,加载设置。