RS-422通讯数据传输率能达到每秒传送4608个字节数据吗??

[复制链接]
8070|11
 楼主| helloCan 发表于 2007-8-20 09:52 | 显示全部楼层 |阅读模式
最近有个小项目需要采用RS-422通讯,通讯要求如下:<br />通讯波特率为:串口工作模式3,11bit,波特率为115.2K<br />用户要求每秒传送有效数据768个数据帧即4608字节/S,帧格式如下:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />数据帧格式定义如下:用于发送浮点数据<br />起始标志(0x16<font color=#3EFFFF><font color=#400040>)&nbsp;</font>&nbsp;</font><font color=#FF00FF>数据字节1&nbsp;&nbsp;&nbsp;&nbsp;数据字节2&nbsp;&nbsp;&nbsp;&nbsp;数据字节</font><font color=#FF00FF>3&nbsp;&nbsp;&nbsp;&nbsp;数据字节4&nbsp;&nbsp;&nbsp;&nbsp;</font>数据校验字节&nbsp;&nbsp;共计6字节数据<br /><br />但我在进行调试时,发现RS-422通讯根本达不到如此多的数据,最多能达到每秒20个有效数据帧即120字节/S。<br />发送数据时是一字节一字节发送,TB8位为空,串口发送子程序如下:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt6;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//一帧数据包括6个字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SBUF=SendBuf;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!TI_0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TI_0=0;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_1ms(x);&nbsp;&nbsp;&nbsp;&nbsp;//延时程序,延时时间约为x&nbsp;ms;<br />}&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />在双方通讯时,当波特率为115.2Kbps或9.6Kbps时,若发送延时时间小于3ms时,接收方接收数据就会出现丢帧或帧不完整现象。<br />请高手帮分析分析,该通讯要求能否达到,如何达到?&nbsp;谢谢啦!!!
alin_99 发表于 2007-8-20 10:03 | 显示全部楼层

算一下最少要600kbps啊,

  
xwj 发表于 2007-8-20 10:19 | 显示全部楼层

晕,不会算时间吗?

  
 楼主| helloCan 发表于 2007-8-20 10:24 | 显示全部楼层

RS422理论上发送数据速率应该很快,不至于最多20帧数据吧!

发送程序发送时一般需要延时否?要保证发送数据能被可靠接收,单片机接收程序时间是否应该比发送时间快?
 楼主| helloCan 发表于 2007-8-20 10:32 | 显示全部楼层

双时间???什么意思,请赐教

  
chunyang 发表于 2007-8-20 12:36 | 显示全部楼层

485/422要做到高速传输是很讲究设计和工艺的

422是全双工的,不需要延时,485才需要。
zhaoyu2005 发表于 2007-8-29 11:25 | 显示全部楼层

算了一下,56Kbps或64Kbps就能满足通讯要求

至于LZ程序需要延时,是不是接收方处理速度跟不上造成的?正常的485通讯9.6Kbps也不用延时3mS这么常,100uS就基本上够了
dafei 发表于 2007-8-31 11:39 | 显示全部楼层

完全能够达到通信要求

你每秒要发送的bit数为:<br />4608×11&nbsp;=&nbsp;51Kbit&nbsp;左右,而你采用115.2Kbit的波特率,每秒的通信能力超过要求1倍还多。<br /><br />那么为什么你的方案时间不够?<br />原因在你加入了延时程序,你发送每个字节后都延时3ms,在加上每个字节发送时间约0.1ms,即你实际发送一个字节要用3.1ms,这样你每秒能够发300多字节。<br />而你现在只能发120字节,说明你帧间还有时间延时。<br /><br />怎样提高通信速度?<br />对于422、485通信,发送方在字节间不需要延时。<br />但是接收方每收到一个字节都要处理,不同的处理方式会影响接收速度。<br />按你现在的通信要求,每秒要传4.6K字节,即每字节的处理时间必须小于约0.2ms。<br />你可以检查下你的接收方程序,估计你现在的方式不能达到这个要求。<br /><br />如果接收方是MCU,则建议,接收中断中只将接收到的数据放入接收缓冲区中,成帧后再处理。发送方根据接收方帧处理需要的延时,适当加入延时。当然也可能不需要加,如果你处理程序注意节约时间的话。<br /><br />如果接收方是PC,那你在用串口控件时,注意要设够大的接收缓冲区,因为PC的时间不确定性太大。<br />
 楼主| helloCan 发表于 2007-9-21 18:42 | 显示全部楼层

谢谢各位的帮助,我在接收数据时,采用485-232转换,计算机

我在接收数据时,采用485-232转换,计算机串口助手接收,当在通讯波特率大于57Kbps时,如果发送端不加延时的话,串口助手接收到的数据就完全出错,请分析分析原因???
dafei 发表于 2007-9-22 11:03 | 显示全部楼层

计算机的串口用的晶振频率很低

UART频率是由晶振分频而来,不能任意选择,计算机内可选的只有57.6K和115.2K,不能选择中间的数字。由于单片机内的晶振和PC内的晶振不同频,故频率不准,造成误码。
lixun00 发表于 2007-9-23 13:31 | 显示全部楼层

完全没问题,注意发送程序的编写。

  
ocon 发表于 2007-9-25 22:21 | 显示全部楼层

我遇到过类似问题,后来查出是485/232转换器不行,

当时用的是光电隔离的窃电转换器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

73

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部