Modbus报文解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Modbus报文解析相关的知识,希望对你有一定的参考价值。

参考技术A 1个字节最多改写一个字节中的8位

写入数据FF最多改写8个位为1.如果要改写前四位为1,方法1、可以数量8不变,写入数据 改为0F;方法2、数量改为4,写入数据FF不变。

站号功能码地址-高地址-低数量-高数量-低写入字节数写入数据1写入数据2检验-高校验-低

报文:01050000001002FFFFE390

写入数量10要转换成十进制为数量16个位,刚好2个字节,所以,写入数据需要2个字节,写入数据1对应的是地址低位开始,写入数据2对应的是地址高位。

站号功能码地址-高地址-低数量-高数量-低写入字节数写入数据1写入数据2检验-高校验-低

报文:010F0000001002FFFFE390

写入数量10要转换成十进制为数量16个位,刚好2个字节,所以,写入数据需要2个字节,写入数据1对应的是地址低位开始,写入数据2对应的是地址高位。

C#ModBus Tcp

上一篇博客已经完成 C#ModBus Tcp Master的实现

本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文)

读操作

功能码 0x01 读一组线圈 读取站号为1 从地址12开始的10个线圈

测试结果

技术图片

上一篇博客已经总结了读操作报文格式,就按照格式划分

技术图片

 

报文解析:

技术图片

注意:报文中线圈起始地址 00000 对应设备中 10001 地址,其他顺延 

 

功能码0x02 报文格式与功能码0x01一致,只是第八字节的功能码变为02 其他完全一致,不再重复解析

功能码0x03 读一组保持寄存器 读取站号为1 从地址12开始的10个值

技术图片

报文解析:

技术图片

 功能码0x04 报文格式与功能码0x03一致,只是第八字节的功能码变为04 其他完全一致,也不再重复解析

 

写操作

操作码:0x05 写单个线圈  将站号为1 地址为21的线圈置为On

注意:在报文中 指定线圈通断标志  FF00 置线圈为ON  0000置线圈为OFF

技术图片

报文解析:

技术图片

 

功能码0x0F 写一组线圈  将站号1 起始地址21  的连续五个线圈置为 通,断,断,通,通

测试结果:

技术图片

报文解析:

技术图片

 

功能码 0x06  写单个保持寄存器  将6666写入从站1 地址为21 的保持寄存器中

测试结果

技术图片

报文解析:

技术图片

功能码0x10  写一组保持寄存器   例如 将12 23 34 45 56 67 78 分别写入从站1 起始地址为21的7个连续的保持寄存器中

测试结果

技术图片

报文解析:

技术图片

 

 

到此为止,我们常用的几个ModBus功能码报文都解析完毕了 有错误之处 希望大家不吝赐教,感谢(抱拳~)

C#ModBus Tcp Master

以上是关于Modbus报文解析的主要内容,如果未能解决你的问题,请参考以下文章

modbus_RTU协议报文解析我发:01 03 9F 2E 00 04 0A 14收到:01 03 08 00 00 00 01 00 00 00 00 A8 17。

modbus 报文不知道协议时怎么破译 ,有大神指点下吗

ModbusTCP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析Modbus所含功能码

Modbus报文解析

求助一个MODBUS TCP/IP报文解析。

C#ModBus Tcp