硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4537|回复: 15
收起左侧

[UART] Modbus RTU的3.5字符间隔,在波特率从38400开始,都是固定的1.75ms

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2022-9-24 18:10:27 | 显示全部楼层 |阅读模式

modbus规格书要求:

image.png

对应值:

image.png

评分

参与人数 1金币 +1 收起 理由
emwin + 1 赞一个!

查看全部评分

回复

使用道具 举报

4

主题

25

回帖

37

积分

新手上路

积分
37
发表于 2022-9-26 06:44:54 | 显示全部楼层
谢谢大佬分享
回复

使用道具 举报

4

主题

25

回帖

37

积分

新手上路

积分
37
发表于 2022-9-26 08:56:13 | 显示全部楼层
谢谢分享,学习了!
回复

使用道具 举报

9

主题

32

回帖

59

积分

初级会员

积分
59
发表于 2022-9-26 15:57:01 | 显示全部楼层
实际工程中,真的要那么小间隔吗,是不是一般都是间隔至少20ms的?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
 楼主| 发表于 2022-9-26 17:15:17 | 显示全部楼层
hellowolf 发表于 2022-9-26 15:57
实际工程中,真的要那么小间隔吗,是不是一般都是间隔至少20ms的?

20ms太长了。
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2022-9-30 09:02:57 | 显示全部楼层
hellowolf 发表于 2022-9-26 15:57
实际工程中,真的要那么小间隔吗,是不是一般都是间隔至少20ms的?

实际工程中,基本也是按3.5个字节,或者1.75ms去处理的。甚至还有的客户要求基本不能差的,还要高速跑MODBUS,基本就只能有间隔时间,和极短的处理时间。
回复

使用道具 举报

43

主题

1075

回帖

1209

积分

至尊会员

积分
1209
发表于 2022-9-30 09:11:05 | 显示全部楼层
好资料
回复

使用道具 举报

219

主题

1115

回帖

1782

积分

至尊会员

More we do, more we can do.

积分
1782
发表于 2022-9-30 09:19:52 | 显示全部楼层
从实用性角度,高波特率下这样定义,能减小帧超时的实现难度。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-8-29 17:07:11 | 显示全部楼层
谢谢分享,学习研究一下
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
发表于 2023-8-31 07:29:13 | 显示全部楼层
我在工程中按20ms去判断
回复

使用道具 举报

25

主题

101

回帖

181

积分

初级会员

积分
181
发表于 2023-8-31 18:17:27 | 显示全部楼层
jxcrg_t35 发表于 2023-8-31 07:29
我在工程中按20ms去判断

是的,一般在实际中,感觉都不是按照3.5约定
回复

使用道具 举报

3

主题

295

回帖

304

积分

高级会员

积分
304
发表于 2024-3-15 15:01:45 | 显示全部楼层
如果用接收中断触发超时判断的话,实际是4.5T,上一帧最后一个字节的起始时间触发,到下一帧第一个字节的起始时间结束,这样才能保证两帧之间空闲时间是大于3.5T
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-10-19 11:50:16 | 显示全部楼层
是不是可以采用串口空闲中断来判断一帧数据的结束,这样就不用定时器超时判断了?
回复

使用道具 举报

1

主题

80

回帖

83

积分

初级会员

积分
83
发表于 2025-10-20 09:08:45 | 显示全部楼层
这样的话,高速的时候通讯效率就很低了
同类的通讯协议 CDBUS 的超时时间默认是 1 个字节,发送间隔默认是最小 2 个字节,不论什么速率都是相同的定义
回复

使用道具 举报

19

主题

339

回帖

396

积分

高级会员

积分
396
发表于 2025-10-20 13:55:18 | 显示全部楼层
sumuzhe201 发表于 2025-10-19 11:50
是不是可以采用串口空闲中断来判断一帧数据的结束,这样就不用定时器超时判断了?

不可以。

例如在 9600 波特率的情况下,产生空闲中断的条件是 1.15ms, 对应的 MODBUS T3.5 是 4 ms. 空闲中断发生了,并不能代表接收到了一帧完整的modbus 报文。

另外不是所有的 MCU 都有空闲中断。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
 楼主| 发表于 2025-10-21 13:45:03 | 显示全部楼层
sumuzhe201 发表于 2025-10-19 11:50
是不是可以采用串口空闲中断来判断一帧数据的结束,这样就不用定时器超时判断了?

空闲中断是1个字符就空闲了,而Modbus是3.5个字符间隔,

如果你是H7系列,可以使用超时中断,时间参数配置范围很大
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-11-22 00:42 , Processed in 0.051752 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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