Modbus_TCP 报文格式解析,Modbus RTU通过DTU转MQTT

2022-09-08 17:16:00
微图
原创
3032
摘要:Modbus_TCP 报文格式解析,Modbus RTU转MQTT试验

1.Modbus_TCP报文基础


请求:00 00 00 00 00 06 09 03 00 00 00 01

响应:00 00 00 00 00 05 09 03 02 12 34

一次modbus tcp读取保持寄存器的通信分析(省略了ip/tcp头):从左向右分析该数据报文:

请求:

00 00为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文;

00 00表示协议标识符,00 00为modbus协议;

00 06为数据长度,用来指示接下来数据的长度,单位字节;

09为设备地址,用以标识连接在串行线或者网络上的远程服务端的地址。以上七个字节也被称为modbus报文头;

03为功能码,此时代码03为读取保持寄存器数据;

00 00为起始地址;

00 01为寄存器数量,(word数量)。

响应:

00 00为此次通信事务处理标识符,应答报文要求与先前对应的请求保持一致;

00 00为协议标识符,与先前对应的请求保持一致;

00 05为数据长度,用来指示接下来数据的长度,单位字节;

09为设备地址,应答报文要求与先前对应的请求保持一致;

03为功能码,正常情况下应答报文要求与先前对应的请求保持一致,如果出错则返回80h+先前的功能码;

02指示接下来数据的字节长度;

12 34为被读取的保持寄存器中的数据值,即要求被读取的地址为00 00的保持寄存器中的数值为1234h


2.串口转WIFI DTU调试

2.1.DTU设置

串口选择:Modbus(格式正确发送的会自动添加CRC校验,网络收到的会去掉CRC检验)NONE(透传,直接转发网口数据)

(测试发现:串口设置成Modbus后,网络收到的数据和不对,DTU就会不加CRC直接发给串口)

2.2.设置从站

2.3.设置主站

设置Modbus 主站并查看分析报文


Tx:00 DF 00 00 00 06 01 03 00 00 00 0A 
Rx:00 DF 00 00 00 17 01 03 14 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A
Tx:00 DF 00 00 00 06 01 03 00 00 00 05
Rx:00 DF 00 00 00 0D 01 03 0A 00 01 00 02 00 03 00 04 00 05


2.4.用网络助手调试

3.DTU做Modbus主站

让DTU主动轮询串口设备,网络走MQTT协议,上报数据

3.1.DTU串口设置成透传模式

3.2.DTU网口选MQTT协议


3.3.让DTU主动轮询

导入脚本

3.4.配置调试工具

2款调试工具设置一样的订阅连接信息


3.5.接收数据

发个大于9的数

改成十六进制接收


发现NX用字符类型数据收不到了

4.测试小结

测试了几天DTU的MQTT通讯,小结一下我们汉枫DTU的可行性。特别通用的就不写了

特点
易用情况

导入Flash脚本,DTU主动固定命令轮询 小白直接能导入也能用,简单改改就OK。轮询间隔200毫秒+/指令,上传10秒+/轮。(简单轮询,上传时间可以>10秒的话可以选汉枫)

ModbusMasterScript-20200305.txt
导入非Flash脚本,得先读懂代码 没运行完全成功过,串口能收,网络收不到。资料文档少没加群,不好定位问题。解析JSON数据格式的,汉枫代码解析方式就有点门槛了,抽象,脚本工具装起不起来。(要是涉及解析JSON就不推荐汉枫了)

ModbusMasterScriptC串口能收发不到网口-202209.txt
支持的协议比较多

ALI_IoTScript跑不起来备也份一下.txt

发表评论
评论通过审核后显示。
  • 在线客服
  • 关注微信
    • 客服帆帆
    • 客服娜娜
    • 客服美美
    • 客服龙龙
  • 扫一扫关注微信