MODBUS的字符间隔时间怎么设置

http://www.amobbs.com/forum.php?mod=viewthread&tid=5613372&highlight=MODBUS
现在测试发现一个问题:

我单片机的时间设置
字符间隔时间:2~3ms
帧间隔时间:   4~5ms

发现在与PLC通讯时,会经常断掉,波特率设置为9600

目前在家测试,用的是组态屏,也发现在波特率为9600的情况下,通讯会经常中断,可是我把字符间隔时间设置为3~4ms就没出现了

在   波特率为19200,
字符间隔时间:2~3ms
帧间隔时间:   4~5ms
条件下,

与组态屏没看到问题,可是在实际现场与松下PLC通讯还是有问题,不过故障率比9600少很多

初步判断是这个问题,那么我为了保险可不可以把时间设置为以下?
字符间隔时间:5~6ms
帧间隔时间:   10~11ms



各位是怎么设置的?

可以看看modbus通讯协议,貌似字符之间是3.5个字符时间(传输,与波特率有关),帧之间推荐大一点的,看项目要求尽量大一点的

modbus RUT模式字符之间间隔大于1.5个字符时间,忽略此帧;两个帧之间至少间隔3.5个字符时间,认为是一帧的结束。不明白楼主字符之间为啥要设间隔时间。
建议你不要做字符间超时处理,通讯对象可能做不到,你做到了结果只能是造成通讯不稳定,大部分情况下判断接收超时即可。
可以根据你的帧长、通讯格式和通讯速度来估计。

下面这个例子供参考(所有参数都基于假设):

假设你的最大帧长为10字节,通讯格式为1起始+8数据+1校验+1停止,那么最大发送bit数为11*10=110bit,通讯速度9600bps,即1bit=0.104ms,
那么最长帧传输时间为1100*0.104=11.4ms。你的通讯对象可能是查询方式,也可能是中断方式,实际在处理数据传输时肯定或多或少有些延迟,你可以把帧超时时间设置为传输时间的5~10倍,比如100ms。
即如果你接收到了数据,但是在100ms内都没有接收完一帧,则判断接受超时,把数据清空。
楼主看下http://www.amobbs.com/forum.php? ... ighlight=freemodbus,STM32移植FreeModbus这个帖子吧!牛人所写!




//9600波特率每字符时间为: 1/9600*(1+8+1) ≈  1041.66us
//帧  间: 3.5个字符时间为: 1041.66 * (3.5 + 1) ≈ 4687.5us
//字节间: 1.5个字符时间为: 1041.66 * (1.5 + 1) ≈ 2604.2us





  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值