本帖最后由 any012 于 2016-5-11 09:23 编辑 以03功能码为例,该功能为读取保持寄存器。 主机发送格式为: 从机地址 | 功能码 | 从机地址高字节 | 从机地址低字节 | 寄存器数量高字节 | 寄存器数量低字节 | CRC高字节 | CRC低字节 从机响应格式为: 从机地址|功能码|字节数|数据1高位|数据1低位|...|CRC高字节|CRC低字节 为什么发送时是用两个字节表示的寄存器数量,返回时却是一个字节的字节数? 以为其他命令也都是类似的,看到06时,写一个掉电保持寄存器时,响应返回来的是 寄存器数量高字节 | 寄存器数量低字节。 看到10H命令时,写多个掉电保持寄存器,响应返回来的是 寄存器数量高字节 | 寄存器数量低字节 | 字节数。 难道不是所有的寄存器都是16位的吗? |
评分
查看全部评分
关于哪些使用寄存器、哪些使用字节,这只是协议标准规定的!
如果你的应用需要完全遵守协议,那你就必须按照《Modbus标准》来定义你的寄存器映射表!
如果你只想要遵循modbus的协议格式,这种通讯方式,那你完全可以自己规划。比如用寄存器地址0x0010的值来表示 一串开关量 信息,这也是可以的!
------------------------------------------------------------------------
所以,协议是死的、而应用是多变的。有时为了节省内存,全部使用寄存器也是可以的。
只在于你是循规蹈矩,还是借鉴使用。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
请仔细阅读协议标准,协议上讲的很详细!《GB/T19582.1-2008》
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
感谢您的回复,贴的资料挺详细的。
但是里面并没有讲到为什么有的是有用寄存器访问,有的用字节访问。