[讨论] 485通信,中间数据丢失问题。

huzi741   2014-9-15 20:39 楼主
小弟最近遇到一个问题,主机A与8个从机485通信,但是出现一个问题,主机发送数据的时候,主机的232数据没有问题(232和485同时连接到MCU串口),但是485总线数据数据出现丢失混乱的现象,并且收尾数据都正确,中间出现了问题。最开始以为是485收发使能信号有问题,最终做了一个测试程序,发现最终问题不是这个,问题是程序的分时的时间基准为250US,改为1MS就解决啦,虽然问题找见啦,但是怎样影响的,实质还是没有解决,求大神帮忙。

回复评论 (9)

485总线方向切换后要有个稳定时间,不能立刻发送。该时间取1ms即可。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2014-9-16 16:09
引用: chunyang 发表于 2014-9-16 16:09
485总线方向切换后要有个稳定时间,不能立刻发送。该时间取1ms即可。

但是我做了一个测试程序,只发送数据,发送使能端始终有效,还是会出现中间数据丢失的情况。
点赞  2014-9-17 17:03
引用: huzi741 发表于 2014-9-17 17:03
但是我做了一个测试程序,只发送数据,发送使能端始终有效,还是会出现中间数据丢失的情况。

如此,检查波特率的精度。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2014-9-17 21:37
还有一个就是协议处理的问题了。我前两天也做485通讯,中间也有短的,情况跟楼主的类似,延时长一些就会好,最终发现是发送过程中缓冲区溢出导致的,协议处理上没有对这个做限制,从而发错了也不知道。
说到485我有一个收发自适应的电路,好像在论坛里贴出来过,感兴趣的话可以看看哦。可以免去控制线
点赞  2014-9-18 23:23
引用: 程序的分时的时间基准为250US,改为1MS就解决啦

你用的是时间片?
点赞  2014-9-19 15:27
引用: huayuliang 发表于 2014-9-19 15:27
你用的是时间片?

恩啦对的,把时间片的时间改为1ms就正常啦
点赞  2014-9-20 16:49
引用: jishuaihu 发表于 2014-9-18 23:23
还有一个就是协议处理的问题了。我前两天也做485通讯,中间也有短的,情况跟楼主的类似,延时长一些就会好 ...

数据缓冲区溢出,是值得是SBUF吗,我要发送的数据时存储在数组里面的,应该没有溢出,并且发送数据是前一个数据发送完成以后,TI =1 之后再发送的数据。大神能否给个详细的说明,让小弟也多学习学习。
点赞  2014-9-20 17:02
时间片得根据整个系统的时间开销来找出最小值。不能太小,俺一般都用5ms以上的。
最好是对不同的任务分个优先级。
点赞  2014-9-20 20:17
引用: huzi741 发表于 2014-9-20 17:02
数据缓冲区溢出,是值得是SBUF吗,我要发送的数据时存储在数组里面的,应该没有溢出,并且发送数据是前一 ...

我的处理方式跟你不太一样,我的是收到数后先放到一个buffer里面。等我 需要的时候再去取数处理,这样就存在溢出的问题了。还有就是波特率较高的话中断也可能处理不过来。你这个应该不存在这个情况。
点赞  2014-9-21 09:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复