搜索
bottom↓
回复: 9

关于ModBus通讯应答时间的理解

[复制链接]

出0入0汤圆

发表于 2016-12-15 22:01:23 | 显示全部楼层 |阅读模式

关于modbus的响应机制以下是网络收集的相关信息:
modbus消息发送至少要以3.5个字符时间的停顿间隔作为开始。整个消息帧必须作为一连续的流传输。
如果在一帧数据完成之前有超过1.5个字符时间的停顿时间,接收设备将抛弃不完整的消息并假定下一个字节是一个新消息的地址域(或起始字符)。
同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。1.5~3.5个字符间隔就算接收异常,只有超过3.5个字符间隔才认为帧结束。

1.也就说主机必须在上一帧数据发完后等待3.5t后在发送数据。无论上一帧数据是主机发的或是从机响应的。
2.从机必需在主机发完数据后,等待3.5t后方可发送响应数据。

不知以上理解是否正确,还望大家指正。谢谢!
其实我在设想能否在主机发送一帧数据后立即就响应主机,在最短的时间应答。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2016-12-15 23:00:07 | 显示全部楼层
本帖最后由 4058665 于 2016-12-15 23:31 编辑

首先要明白串口可以连续不断的发很长很长很长的数据
但是要一包包短数据怎么样区分一包一包呢?   就是发一串停一会儿   然后再发一串停一会   挺的最短时间就是3.5T
主机从发送第一个字节 注意是第一个字节        从机从收到第一个字节就开始不断的进行接收超时检测 ,每收一个字节就重新复位下超时时间
主机不断发送直到发完最后一个字节,主机就切换到接收状态了 ,并设置一个超时时间,等待从机回复,这个时间一般为几百毫秒,根据数据大小设定  
从机收到最后一个字节,发现主机不发了,超时定时器就超时了,认为这包数据完整了 接着处理 数据  crc  命令 等等,并根据命令  准备好回的数据包,处理完后 可以立即发给主机  只要在规定的几百毫秒内就可以了,这样就完成了基本的一发一收
实际用的时候3.5T一般也不会很严格的     只要主机发的时候  帧与帧之间不要太频繁就可以了
这是常见的方式    stm32 串口 还有帧超时中断  ,可以省定时器,方便些   


3.5t作用的本质是什么?
想象下我们通过流量器打开amobbs网页,是不是希望越快越好
采集端发送数据后,也希望设备端数据返回的越快越好,这个3.5t就是在不同的波特率下,能准确区分帧的最短最合适的时间   
太长响应慢   太短了就容易分帧错误  这也算一种均衡处理
要说最最本质是  "接收端用来区分不同的帧 "  ,一个正常交互 包含2个过程   
(主机发送的时候   从机为接收端    |   从机响应的时候    主机为接收端)






出0入0汤圆

发表于 2016-12-16 08:08:33 | 显示全部楼层
明确告诉你可以立即响应,因为只有一个主机,同时也只有一个从机会响应主机的指令,主机不会自发自收从机也不会自发自收。

出0入0汤圆

发表于 2016-12-16 08:14:37 | 显示全部楼层
这是rtu帧,就靠这个时间间隔来判断帧结束,要严格遵守,理解没有问题

出0入0汤圆

发表于 2016-12-16 08:58:11 | 显示全部楼层
实际应用中1.5t不用考虑,只考虑3.5t就可以了

出0入0汤圆

 楼主| 发表于 2016-12-16 09:22:01 | 显示全部楼层
本帖最后由 ThinkCell 于 2016-12-16 09:24 编辑

呵呵,好人一生平安!
谢谢楼上各位朋友回答,特别是二楼的朋友打下这么多文字,说的如此的清楚细致.在此谢谢!
再问如何判断从机超时?从机的超时时间一般是多少?

出0入0汤圆

 楼主| 发表于 2016-12-16 14:02:25 | 显示全部楼层
4058665 发表于 2016-12-15 23:00
首先要明白串口可以连续不断的发很长很长很长的数据
但是要一包包短数据怎么样区分一包一包呢?   就是发一 ...

非常感谢你的回复!
请教一下如何判断从机超时?主机认为从机没有应答的超时时间一般是多少?谢谢!

出350入477汤圆

发表于 2016-12-16 21:51:32 来自手机 | 显示全部楼层
ThinkCell 发表于 2016-12-16 14:02
非常感谢你的回复!
请教一下如何判断从机超时?主机认为从机没有应答的超时时间一般是多少?谢谢! ...

由自己配置决定,没有一定之规。
如果本地直连,一般不用太长,但是如果你用个透传模块把数据传到远程,就可能造成很长的延时。你要是固定超时时间,这种情况就没法用了

出0入0汤圆

发表于 2016-12-18 14:07:26 | 显示全部楼层
ThinkCell 发表于 2016-12-16 14:02
非常感谢你的回复!
请教一下如何判断从机超时?主机认为从机没有应答的超时时间一般是多少?谢谢! ...

主机发出后  在主机设定的超时时间内 没有收到从机应答 或错误的应答 就认为超时了
楼主可以参照freemodbus 分析下源码

出0入0汤圆

 楼主| 发表于 2016-12-18 14:27:08 来自手机 | 显示全部楼层
似乎主机设定的超时时间是不固定的,根据实际情况有的长有的短
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 20:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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