本文介绍卓岚支持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.所有配置都可以界面化配置完成,用户自主配置无需定制。
卓岚Modbus RTU转JSON可以实现Modbus RTU表的自动采集,并按照JSON格式自动上发给云端服务器。
这里我们通过一个具体的案例来讲解这个用法。
假设现在有一个功能码为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位。
我们按照设备作为客户端的方式进行配置。
使用SocketDlgTest,在本地计算机1883端口监听一个TCP服务器。
使用ZLVircom对设备进行配置。
点击修改配置,可以让设备连接上SocketDlgTest工具。再次进入设备编辑对话框。点击“固件和配置”按钮。
首先点击“网页目录下载”进入配置下载模式。然后选择一个新的空目录,比如MQTTHTTPD目录。防止之前的设计有残留,请先点击“清除全部”按钮,这样可以清空之前的设计内容。设计文件将会保存在这个目录,等一下可以通过点击“下载”按钮下载到设备内部。
点击“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”页面的“下载按钮”
然后点击“确定”,设备会自动重启。如果没有重启请手动重启。
这里使用Modbus Slave来模拟一个表
测试结果显示,使用Modbus slave工具模拟的仪表能够被网关所采集。同时可以定时,按照json格式上发到SocketDlgTest模拟的服务器软件端。
MQTT可以单独使用也可以和JSON功能配合使用。当单独使用的时候MQTT功能将串口数据透传上发MQTT服务器。也就是将串口接收的数据作为MQTT的载荷。同时MQTT的载荷会以透传的方式从串口输出。实现串口转MQTT。
点击“固件与配置”,弹出配置下载和设计对话框:
这里选择“网页目录下载”,然后选择一个空的目录,比如MQTTHTTPD目录,然后先点击“清除全部”清除之前的设计(注意如果之前按有JSON设计的,则不要清除全部,否则会清除之前的JSON设计)。然后点击MQTT配置。
这里配置说明如下:
1.服务器域名或IP:这里填写的是MQTT服务器的IP,最长为30个字符。
2.用户名:是MQTT服务器的用户名。
3.密码:是这个用户的登录密码。
4.客户端ID:是MQTT的client ID。
5.订阅主题:是这个设备订阅的主题,有其它设备发布这个主题的时候,服务器会下发给这个设备。如果只是发布,一般无需填写这个字段。
6.发布主题:这个设备串口转MQTT的时候向服务器发送的数据的主题。
7.MQTT高级参数:用于配置高级参数。
8.保存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、工作模式、目的端口。然后点击“修改设置”。
这样配置就完成了。
连接完成后设备的LINK灯(一般为中间的蓝色灯)变亮。说明设备正常连接上MQTT服务器。
现在打开串口工具:
使用和设备一样的波特率打开串口,并发送数据“dev send”,此后在接收窗口看到返回的数据“dev send”。这是由于我们将dev send这个信息以zlansub的主题发布给MQTT服务器。但是同时我们的设备也订阅了zlansub这个主题,所以服务器立刻会给我们发送一个订阅信息,订阅信息的内容就是dev send。这个信息作为MQTT的载荷发送下载,通过透传的方式从串口输出。
如果其它设备发布信息过来,这个设备也能够收到数据。
一般来说,用户可以直接将串口指令(比如Modbus RTU)指令直接透传给MQTT服务器。另外也可以使用JSON功能,采用自动Modbus RTU格式采集,定时JSON格式上发的形式。另外也可以找上海卓岚定制一些非标的仪表和上位机协议格式。
将上述的JSON和MQTT相组合可以实现如下的功能:
1.采用MQTT为基础的协议和服务器建立连接,采用订阅发布的形式进行数据通讯。
2.支持Modbus RTU寄存器的自主设计和自动采集。
3.支持将特定的Modbus寄存器内容转化为JSON格式定时主动上发。
4.支持在JSON格式中加入设备ID,方便云端识别设备。
如果需要MQTT+JSON转Modbus RTU功能的,可以分别设计MQTT和JSON,不分先后次序。设计完一种不要点击“清除设计”按钮,两个设计完,一起点击“下载”按钮下载到设备内容。
一般可以下载后手动重启设备,加载设置。