搜索
查看: 2683|回复: 12

[已解决] 求教,关于modbus协议的一些疑问。

[复制链接]

该用户从未签到

76

主题

759

帖子

17

蝴蝶豆

论坛元老

最后登录
2022-5-20
发表于 2016-5-6 09:47:00 | 显示全部楼层 |阅读模式
本帖最后由 any012 于 2016-5-11 09:23 编辑

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

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

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


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

使用道具 举报

该用户从未签到

4

主题

853

帖子

7

蝴蝶豆

论坛元老

最后登录
2024-4-24
发表于 2016-5-9 09:12:01 | 显示全部楼层
modbus本身是只能支持255地址,也就是8位足够。使用高8位地址应该是兼容行的需要吧。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

回复 支持 2 反对 0

使用道具 举报

该用户从未签到

4

主题

375

帖子

31

蝴蝶豆

金牌会员

最后登录
2019-7-29
发表于 2016-5-10 12:46:13 | 显示全部楼层
Modbus协议很通用,但是对高实时性应用则不适用,因为返回某些位的值需要先发送命令才能返回,最近最一个项目就遇到这个问题,没办法,只好自己重新做了一套,协议格式还是Modbus的,只是改了数据返回方式。
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

15

主题

946

帖子

29

蝴蝶豆

金牌会员

最后登录
2023-6-20
发表于 2016-5-10 11:19:08 | 显示全部楼层
any012 发表于 2016-5-10 10:39
感谢您的回复,贴的资料挺详细的。
但是里面并没有讲到为什么有的是有用寄存器访问,有的用字节访问。 ...

关于哪些使用寄存器、哪些使用字节,这只是协议标准规定的!
如果你的应用需要完全遵守协议,那你就必须按照《Modbus标准》来定义你的寄存器映射表!

如果你只想要遵循modbus的协议格式,这种通讯方式,那你完全可以自己规划。比如用寄存器地址0x0010的值来表示 一串开关量 信息,这也是可以的!

------------------------------------------------------------------------
所以,协议是死的、而应用是多变的。有时为了节省内存,全部使用寄存器也是可以的。
只在于你是循规蹈矩,还是借鉴使用。
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

11

主题

60

帖子

0

蝴蝶豆

中级会员

最后登录
1970-1-1
发表于 2016-5-9 08:55:41 | 显示全部楼层
是的,比如01,02,05,15使用比特方式访问。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

2

帖子

0

蝴蝶豆

新手上路

最后登录
2018-1-1
发表于 2016-5-9 09:12:16 | 显示全部楼层
r看下标准的协议去哟

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

120

帖子

0

蝴蝶豆

金牌会员

最后登录
2020-2-12
发表于 2016-5-9 09:32:26 | 显示全部楼层
看楼主的问题,应该是对modbus协议的内容不够清楚吧

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

69

主题

1815

帖子

124

蝴蝶豆

版主

最后登录
2021-3-16
发表于 2016-5-9 09:38:42 | 显示全部楼层
楼主是一定要用标准的modbus协议吗?

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

40

主题

799

帖子

4

蝴蝶豆

金牌会员

最后登录
2021-3-26
发表于 2016-5-9 13:11:30 | 显示全部楼层
ModBus支持位访问(如线圈的读写)和寄存器(如03.06功能码)访问,但是不管哪种方式,返回的数据包长度最多255个字节,故一个字节足够,至于协议的格式为什么不一致,那就不清楚了...

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

15

主题

946

帖子

29

蝴蝶豆

金牌会员

最后登录
2023-6-20
发表于 2016-5-9 14:52:36 | 显示全部楼层
本帖最后由 Dylan疾风闪电 于 2016-5-9 14:58 编辑

请仔细阅读协议标准,协议上讲的很详细!《GB/T19582.1-2008》
新建位图图像.jpg
新建位图图像 - 副本.jpg

2.jpg

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

143

帖子

0

蝴蝶豆

金牌会员

最后登录
2022-2-5
发表于 2016-5-9 22:27:39 | 显示全部楼层
又复习一遍modbus协议

评分

参与人数 1ST金币 +1 收起 理由
沐紫 + 1

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

762

帖子

0

蝴蝶豆

金牌会员

最后登录
2020-8-18
发表于 2016-5-10 07:52:00 | 显示全部楼层
响应地址的数据8位够了

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-28 06:19 , Processed in 1.258539 second(s), 59 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表