打印
[51单片机]

求教,关于modbus协议的一些疑问。

[复制链接]
996|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
any012|  楼主 | 2016-5-6 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以03功能码为例,该功能为读取保持寄存器。

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

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


为什么发送时是用两个字节表示的寄存器数量,返回时却是一个字节的字节数?
以为其他命令也都是类似的,看到06时,写一个掉电保持寄存器时,响应返回来的是 寄存器数量高字节 | 寄存器数量低字节。
看到10H命令时,写多个掉电保持寄存器,响应返回来的是  寄存器数量高字节 | 寄存器数量低字节 | 字节数。
难道不是所有的寄存器都是16位的吗?

相关帖子

沙发
hbzjt2011| | 2016-5-6 11:43 | 只看该作者
返回的字节数是你读取寄存器数据的值*2,也就是说返回的寄存器值都是有高低位的

使用特权

评论回复
板凳
any012|  楼主 | 2016-5-6 14:07 | 只看该作者
hbzjt2011 发表于 2016-5-6 11:43
返回的字节数是你读取寄存器数据的值*2,也就是说返回的寄存器值都是有高低位的 ...

想知道,为何03功能码这里返回数是用字节数表示,而不是用寄存器数表示?
到了10功能码这里,返回的倒是有了寄存器数。

使用特权

评论回复
地板
yhn1973| | 2016-5-6 14:15 | 只看该作者
好计算

使用特权

评论回复
5
hbzjt2011| | 2016-5-6 14:53 | 只看该作者
any012 发表于 2016-5-6 14:07
想知道,为何03功能码这里返回数是用字节数表示,而不是用寄存器数表示?
到了10功能码这里,返回的倒是 ...

读写这不是互通的嘛,写的时候值在主机发送的命令里,从机只要反馈主机写了多少个数就可以,主机接收到后与之前发送命令里寄存器的数量比对,只要一样就可以了,这样不是简单吗

使用特权

评论回复
6
any012|  楼主 | 2016-5-6 17:00 | 只看该作者
hbzjt2011 发表于 2016-5-6 14:53
读写这不是互通的嘛,写的时候值在主机发送的命令里,从机只要反馈主机写了多少个数就可以,主机接收到后 ...

主机发送的是寄存器数,而从机返回的是字节数,两者为何不弄成一样的?

使用特权

评论回复
7
any012|  楼主 | 2016-5-6 17:02 | 只看该作者
现在又一想,是因为不确定从机寄存器是多少位的,是这个原因吗?

使用特权

评论回复
8
coody| | 2016-5-6 20:48 | 只看该作者
这个估计只有协议制定者才知道为什么,我们是使用者,我从来不去问为什么。

使用特权

评论回复
9
yhn1973| | 2016-5-6 23:48 | 只看该作者
为什么读寄存器要用03

使用特权

评论回复
10
yklstudent| | 2016-5-7 08:02 | 只看该作者
为什么楼主要有这个疑问

使用特权

评论回复
11
ningling_21| | 2016-5-7 13:16 | 只看该作者
any012 发表于 2016-5-6 17:00
主机发送的是寄存器数,而从机返回的是字节数,两者为何不弄成一样的? ...

最大帧长有限制,不是任意长度

使用特权

评论回复
12
any012|  楼主 | 2016-5-10 10:41 | 只看该作者
ningling_21 发表于 2016-5-7 13:16
最大帧长有限制,不是任意长度

是因为帧长度限制,所以有的情况用一个字节来表示字节数?

使用特权

评论回复
13
受不了了| | 2016-5-10 10:47 | 只看该作者
没必要去深究,常用的就那么几个命令,依葫芦画瓢写个兼容性比较好的MODBUS协议就是了

使用特权

评论回复
14
candysnape| | 2016-5-10 10:50 | 只看该作者
制定者就是这么定的,纠结这个没意义,遵从就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

232

帖子

6

粉丝