0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

RS-485

RS485通讯中,单次发送多少字节可靠性最好?

一直在思考一个问题:上位机采用高级语言编程,下位机采用单片机,点对多通讯。在通讯测试中,发现随着单次发送(含下位机发送)字节数的增加,通讯的可靠性越来越低,而且上位机CPU的性能越来越接近百分之百。发送频率的提高,也会增加CPU的负担。

     那么,以多少的发送频率、单次发送多少字节最为可靠呢?没有可靠性,追求速度没有用啊。

提问者:吔屎蛋拉雷 地点:- 浏览次数:1679 提问时间:10-14 14:34
我有更好的答案
提 交
13条回答
Cdxxgcdx 07-31 00:45 回答数: 被采纳数:
“在通讯测试中,发现随着单次发送(含下位机发送)字节数的增加,通讯的可靠性越来越低,而且上位机CPU的性能越来越接近百分之百。发送频率的提高,也会增加CPU的负担。”

多高的波特率?光是通讯就能给上位机造成负荷?
帧长度还会影响通讯可靠性?你所用的物理层评估过可靠性了吗?
szbliy 08-03 19:08 回答数:0 被采纳数:0
数据的单帧长度过长且若缓冲区不够大的话,确实容易出错(丢失数据)。当然,若传输速率过快的话,也同样会有问题(接收速度跟不上)。具体得根据实际使之匹配,含物理及以上各协议层。
jinheng 07-26 15:53 回答数:0 被采纳数:0
单次发送多少字节只取决于你的设计,只要缓冲区不溢出,多少字节都可以。

反而是每次帧间的间隔时间,必须合理计算留出足够的间隔让对方有足够的时间能够响应、处理,毕竟操作系统下的任务切换时间是比较长并且不确定的。
同时,好的协议才是关键。
huaxu2222 07-31 21:43 回答数: 被采纳数:
使用 115200  xmodem   没见CPU满负荷啊
想变胖的瘦子 07-28 21:39 回答数:0 被采纳数:0
明显LZ的软件设计问题。

单片机能把PC机拖死的话,那你的软件设置之差也差得很牛B了
天地直方 07-29 15:29 回答数:0 被采纳数:0
现实中遇到的,同样的测试,在RS232中没有遇到,很郁闷啊!
YOYOOO 07-27 19:34 回答数:0 被采纳数:0
楼主的问题应该通过改进系统设计来解决,只要有数据校验和侦错重发机制,数据包的长度与可靠性无关。
lq544 07-30 16:38 回答数: 被采纳数:


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

补充一点:帧错误通常发生在PC端。
bairunwanda168 07-28 09:41 回答数:0 被采纳数:0
再说,你说“实际使用可以在发送数据前插入两个NOP指令,效果就好得多。”

“插入两个NOP指令”才多少时间,相对于串口波特率来说算什么?
不是DMA方式的话,一般都是基于字节接收完或发送完中断 来收发每个字节的,字节间必然会有间隙,就算用等待TI的方法,也会有间隙;
除非你是用的固定延时的非常规方法才会有一个字节毫无间隙接着一个字节发送的可能,甚至没发送完就接着送入下一字节(比如老x以前做的用单片机产生VGA显示信号,但那个波特率可是好几M的,正常设计没人会那样做的,也不应该那样做)
wywrtswe 08-03 18:08 回答数:0 被采纳数:0
可能是我理解错误,但我在实际应用中就是在每个字节发送前插入20-100个NOP指令,完美解决问题,否则PC机端就会出错,而且换不同PC机出错的几率大不一样。我单片机端是用的中断方式发送数据,波特率19200-38400,每次发送几十到数百个字节。
出错的时候,PC端的程序直接报帧错误,加入延时后不再出现此错误。
csshan3 07-28 04:19 回答数:0 被采纳数:0


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

波特率偏差10-20%,我我认为在一个字节内就足以产生为偏差,导致张冠李戴了。不信就用12M晶振与11.0592M的来试一下,不改波特率设置,发送一串数据,绝对有问题。
ywyrywer 08-03 11:09 回答数: 被采纳数:
如果是较多的数据,建议拆分成一个个小包发送,中间可以对每个数据包校验。错了就重发。
uywuuwewd 07-29 04:56 回答数:0 被采纳数:0
有道理,这种测试换了几台电脑了,从老些的到刚买的,都有类似的问题。结果是:与波特率关系不大,与通讯的频率和单次通讯的字节数有关。通讯次数多和通讯字节数多,会导致上位机电脑莫名其妙的退出测试。
撰写答案
提 交
1 / 3
1 / 3
相关RS-485
关于RS485隔离防雷的信号地和大地的处理的疑问
关于RS485上拉电阻和下拉电阻阻值的问题
四种RS485防雷保护接地电路
3.3V供电的RS485接口远距离数据通信电路设计
采用C8051F020的RS485串行通信电路设计