打印

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

[复制链接]
6675|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
helloCan|  楼主 | 2007-8-20 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近有个小项目需要采用RS-422通讯,通讯要求如下:
通讯波特率为:串口工作模式3,11bit,波特率为115.2K
用户要求每秒传送有效数据768个数据帧即4608字节/S,帧格式如下:             
数据帧格式定义如下:用于发送浮点数据
起始标志(0x16)  数据字节1    数据字节2    数据字节3    数据字节4    数据校验字节  共计6字节数据

但我在进行调试时,发现RS-422通讯根本达不到如此多的数据,最多能达到每秒20个有效数据帧即120字节/S。
发送数据时是一字节一字节发送,TB8位为空,串口发送子程序如下: 
     for(i=0;i<6;i++)          //一帧数据包括6个字节
     {    
      SBUF=SendBuf;   
       while(!TI_0);      
       TI_0=0;  
      delay_1ms(x);    //延时程序,延时时间约为x ms;
}    

在双方通讯时,当波特率为115.2Kbps或9.6Kbps时,若发送延时时间小于3ms时,接收方接收数据就会出现丢帧或帧不完整现象。
请高手帮分析分析,该通讯要求能否达到,如何达到? 谢谢啦!!!

相关帖子

沙发
alin_99| | 2007-8-20 10:03 | 只看该作者

算一下最少要600kbps啊,

使用特权

评论回复
板凳
xwj| | 2007-8-20 10:19 | 只看该作者

晕,不会算时间吗?

使用特权

评论回复
地板
helloCan|  楼主 | 2007-8-20 10:24 | 只看该作者

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

发送程序发送时一般需要延时否?要保证发送数据能被可靠接收,单片机接收程序时间是否应该比发送时间快?

使用特权

评论回复
5
helloCan|  楼主 | 2007-8-20 10:32 | 只看该作者

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

使用特权

评论回复
6
chunyang| | 2007-8-20 12:36 | 只看该作者

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

422是全双工的,不需要延时,485才需要。

使用特权

评论回复
7
zhaoyu2005| | 2007-8-29 11:25 | 只看该作者

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

至于LZ程序需要延时,是不是接收方处理速度跟不上造成的?正常的485通讯9.6Kbps也不用延时3mS这么常,100uS就基本上够了

使用特权

评论回复
8
dafei| | 2007-8-31 11:39 | 只看该作者

完全能够达到通信要求

你每秒要发送的bit数为:
4608×11 = 51Kbit 左右,而你采用115.2Kbit的波特率,每秒的通信能力超过要求1倍还多。

那么为什么你的方案时间不够?
原因在你加入了延时程序,你发送每个字节后都延时3ms,在加上每个字节发送时间约0.1ms,即你实际发送一个字节要用3.1ms,这样你每秒能够发300多字节。
而你现在只能发120字节,说明你帧间还有时间延时。

怎样提高通信速度?
对于422、485通信,发送方在字节间不需要延时。
但是接收方每收到一个字节都要处理,不同的处理方式会影响接收速度。
按你现在的通信要求,每秒要传4.6K字节,即每字节的处理时间必须小于约0.2ms。
你可以检查下你的接收方程序,估计你现在的方式不能达到这个要求。

如果接收方是MCU,则建议,接收中断中只将接收到的数据放入接收缓冲区中,成帧后再处理。发送方根据接收方帧处理需要的延时,适当加入延时。当然也可能不需要加,如果你处理程序注意节约时间的话。

如果接收方是PC,那你在用串口控件时,注意要设够大的接收缓冲区,因为PC的时间不确定性太大。

使用特权

评论回复
9
helloCan|  楼主 | 2007-9-21 18:42 | 只看该作者

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

我在接收数据时,采用485-232转换,计算机串口助手接收,当在通讯波特率大于57Kbps时,如果发送端不加延时的话,串口助手接收到的数据就完全出错,请分析分析原因???

使用特权

评论回复
10
dafei| | 2007-9-22 11:03 | 只看该作者

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

UART频率是由晶振分频而来,不能任意选择,计算机内可选的只有57.6K和115.2K,不能选择中间的数字。由于单片机内的晶振和PC内的晶振不同频,故频率不准,造成误码。

使用特权

评论回复
11
lixun00| | 2007-9-23 13:31 | 只看该作者

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

使用特权

评论回复
12
ocon| | 2007-9-25 22:21 | 只看该作者

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

当时用的是光电隔离的窃电转换器。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

73

帖子

1

粉丝