modbus协议为什么发送时是用两个字节表示的寄存器数量,返回时却是一个字节的字节数?

2019-07-14 16:17发布

以03功能码为例,该功能为读取保持寄存器。

主机发送格式为:
从机地址 | 功能码 | 从机地址高字节 | 从机地址低字节 | 寄存器数量高字节 | 寄存器数量低字节 | CRC高字节 | CRC低字节

从机响应格式为:
从机地址|功能码|字节数|数据1高位|数据1低位|...|CRC高字节|CRC低字节


为什么发送时是用两个字节表示的寄存器数量,返回时却是一个字节的字节数?
以为其他命令也都是类似的,看到06时,写一个掉电保持寄存器时,响应返回来的是 寄存器数量高字节 | 寄存器数量低字节。
看到10H命令时,写多个掉电保持寄存器,响应返回来的是  寄存器数量高字节 | 寄存器数量低字节 | 字节数。
难道不是所有的寄存器都是16位的吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
Songki
1楼-- · 2019-07-15 23:50
又复习一遍modbus协议
不不gudh
2楼-- · 2019-07-16 04:37
响应地址的数据8位够了
谦谦三君子
3楼-- · 2019-07-16 07:02
嘻嘻爱哈哈 发表于 2018-11-6 11:46
本帖最后由 Dylan疾风闪电 于 2016-5-9 14:58 编辑

请仔细阅读协议标准,协议上讲的很详细!《GB/T19582.1-2008》

感谢您的回复,贴的资料挺详细的。
但是里面并没有讲到为什么有的是有用寄存器访问,有的用字节访问。
嘻嘻爱哈哈
4楼-- · 2019-07-16 07:36
 精彩回答 2  元偷偷看……
zhe0010
5楼-- · 2019-07-16 08:14
Modbus协议很通用,但是对高实时性应用则不适用,因为返回某些位的值需要先发送命令才能返回,最近最一个项目就遇到这个问题,没办法,只好自己重新做了一套,协议格式还是Modbus的,只是改了数据返回方式。

一周热门 更多>