发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] 请问RS485通讯中单次发送多少字节可靠性最好?
300 华强芯城 cpu 单片机
分享
一直在思考一个问题:上位机采用高级语言编程,下位机采用单片机,点对多通讯。在通讯测试中,发现随着单次发送(含下位机发送)字节数的增加,通讯的可靠性越来越低,而且上位机CPU的性能越来越接近百分之百。发送频率的提高,也会增加CPU的负担。
     那么,以多少的发送频率、单次发送多少字节最为可靠呢?没有可靠性,追求速度没有用啊。
0
2019-10-16 03:47:18   评论 分享淘帖 邀请回答
13个回答
“在通讯测试中,发现随着单次发送(含下位机发送)字节数的增加,通讯的可靠性越来越低,而且上位机CPU的性能越来越接近百分之百。发送频率的提高,也会增加CPU的负担。”

多高的波特率?光是通讯就能给上位机造成负荷?
帧长度还会影响通讯可靠性?你所用的物理层评估过可靠性了吗?
2019-10-16 07:36:09 评论

举报

数据的单帧长度过长且若缓冲区不够大的话,确实容易出错(丢失数据)。当然,若传输速率过快的话,也同样会有问题(接收速度跟不上)。具体得根据实际使之匹配,含物理及以上各协议层。
2019-10-16 07:45:09 评论

举报

单次发送多少字节只取决于你的设计,只要缓冲区不溢出,多少字节都可以。

反而是每次帧间的间隔时间,必须合理计算留出足够的间隔让对方有足够的时间能够响应、处理,毕竟操作系统下的任务切换时间是比较长并且不确定的。
同时,好的协议才是关键。
2019-10-16 07:50:44 评论

举报

使用 115200  xmodem   没见CPU满负荷啊
2019-10-16 07:56:38 评论

举报

明显LZ的软件设计问题。

单片机能把PC机拖死的话,那你的软件设置之差也差得很牛B了
2019-10-16 08:13:40 评论

举报

现实中遇到的,同样的测试,在RS232中没有遇到,很郁闷啊!
2019-10-16 08:25:48 评论

举报

楼主的问题应该通过改进系统设计来解决,只要有数据校验和侦错重发机制,数据包的长度与可靠性无关。
2019-10-16 08:34:13 评论

举报

不知道你们怎么都没遇到过这个问题:帧错误!
首先,单片机与PC机之间的波特率是存在误差的,理想情况是在每一个bit的中间位置判断电平高低,实际上随着帧长度的加长,波特率的误差会累积起来,导致不是在每个bit的中间位置判断高低电平,最终导致出错。解决这个问题的办法很简单,在每一个字节发送完成后,插入一小段延时,比如插入一个bit的时间,就足以让接收端重建同步,比如用1.5或2个停止位的方法,就可以大大提高通讯的可靠性。实际使用可以在发送数据前插入两个NOP指令,效果就好得多。
因为我在实践中就观察到帧错误的情况,表现为:接收到N个字节后,接下来的一个字节的停止位没被检测到,而这个字节的第一位刚好是0的话,就被当成是起始位,而最后一个停止位被当成第八位,这就接收到了一个错误的字节,并且下一个字节会漏掉,之后接收到的数据就会根据字节内容(0的位置)不断变化了。

补充一点:帧错误通常发生在PC端。
2019-10-16 08:40:52 评论

举报

再说,你说“实际使用可以在发送数据前插入两个NOP指令,效果就好得多。”

“插入两个NOP指令”才多少时间,相对于串口波特率来说算什么?
不是DMA方式的话,一般都是基于字节接收完或发送完中断 来收发每个字节的,字节间必然会有间隙,就算用等待TI的方法,也会有间隙;
除非你是用的固定延时的非常规方法才会有一个字节毫无间隙接着一个字节发送的可能,甚至没发送完就接着送入下一字节(比如老x以前做的用单片机产生VGA显示信号,但那个波特率可是好几M的,正常设计没人会那样做的,也不应该那样做)
2019-10-16 08:59:40 评论

举报

可能是我理解错误,但我在实际应用中就是在每个字节发送前插入20-100个NOP指令,完美解决问题,否则PC机端就会出错,而且换不同PC机出错的几率大不一样。我单片机端是用的中断方式发送数据,波特率19200-38400,每次发送几十到数百个字节。
出错的时候,PC端的程序直接报帧错误,加入延时后不再出现此错误。
2019-10-16 09:15:19 评论

举报

前面所说插入"两个"NOP是泛指,就是N个的意思。:lol

波特率偏差10-20%,我我认为在一个字节内就足以产生为偏差,导致张冠李戴了。不信就用12M晶振与11.0592M的来试一下,不改波特率设置,发送一串数据,绝对有问题。
2019-10-16 09:23:36 评论

举报

如果是较多的数据,建议拆分成一个个小包发送,中间可以对每个数据包校验。错了就重发。
有道理,这种测试换了几台电脑了,从老些的到刚买的,都有类似的问题。结果是:与波特率关系不大,与通讯的频率和单次通讯的字节数有关。通讯次数多和通讯字节数多,会导致上位机电脑莫名其妙的退出测试。
2019-10-16 09:51:59 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
关闭

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

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