amobbs.com 阿莫电子技术论坛
标题:
傻孩子:我终于找到了RS485时,高波特率,大数据量时通讯不好的解决方法.
[打印本页]
作者:
ba_wang_mao
时间:
2010-2-24 17:31
标题:
傻孩子:我终于找到了RS485时,高波特率,大数据量时通讯不好的解决方法.
现象:
我的程序 定时中断=12ms,中断服务程序大约执行时间=0.5ms
我用MODSCAN32软件读取保持寄存器,寄存器数量=125,即:
上位机发送8字节的请求命令,从机返回254字节的应答命令,发送通讯间隔=100ms.
A.RS232测试结果
(1).波特率在9600,19200,38400时,通讯质量非常好,成功率100%. 但是当波特率=57600,115200时,通讯质量说得过去,只达到99.1%左右.
(2).当屏蔽中断服务程序中的代码,则当波特率=57600,115200时,通讯质量也非常好,成功率100%
B.RS485测试结果
(1).波特率在9600,19200时,通讯质量非常好,成功率100%. 但是当波特率=38400,57600,115200时,通讯质量非常差,只达到2%左右.
【1】.虽然中断嵌套能够解决通讯问题,我不想使用中断嵌套.
因为通讯只是次要工作,而定时中断中的代码是非常重要的代码,我不希望其它中断打断它.
【2】.数据接收:采用中断+缓存的方法
【3】.数据发送:采用"空中断"+"完成中断"方式
由于硬件上可能焊接485芯片,因此数据发送:采用"空中断"+"完成中断"方式.
即为确保最后一个字节到达上位机,最后一个字节采用发送完成中断发送.
由于数据发送时,采用了"空中断"+"发送完成中断",根据马潮老师所说的,达到了最佳的流水性性能,即:不停的装载数据发送.
但是却又增加了系统的负荷.导致频繁的产生"数据空中断".
解决方法1:
仅仅使用"发送完成中断"发送数据,通讯质量有所好转,在波特率=115200时,通讯成功率至少达到90%
解决方法2:
使用"查询方式"发送数据,在波特率=115200时,通讯成功率达到100%
结论:
当定时中断中的代码执行时间稍微长时,应该禁止使用"空中断"+"完成中断"方式发送数据,
最好仅仅使用"完成中断"发送数据.
只有当仅仅使用"完成中断"发送数据时,通讯质量不好(没有达到100%)时,才在主程序中使用"查询方式"发送数据.
作者:
VERY
时间:
2010-2-24 17:36
mark
作者:
Gorgon_Meducer
时间:
2010-2-24 17:38
恭喜哈,看来你领悟到了很多对自己有用的东西。
举一反三:
AD里面如果使用autorun模式来连续采样,开启中断的情况下,系统资源可能消耗很大;
使用SPI通讯,如果通讯速率较高,并且开启了中断,则系统资源消耗较大。
对付以上情况,可以参考楼主地分析,使用类似的方法解决。
作者:
kingsabbit
时间:
2010-2-24 22:11
软件处理很重要
作者:
tingfenghu
时间:
2010-3-7 23:21
mark
作者:
wochai
时间:
2010-3-8 14:16
记录
作者:
gxy508
时间:
2010-3-8 16:14
mark
作者:
hetao7241
时间:
2010-3-8 17:23
学习了。
作者:
kbdcj2000
时间:
2010-3-10 09:25
mark
作者:
Forever
时间:
2010-3-10 11:09
我一般都用 空中断 + 缓存方式 发送
作者:
sonna
时间:
2010-3-11 01:22
mark
作者:
xinchangkk
时间:
2010-3-11 08:13
收藏,485 确实有很多地方要用到
作者:
tick
时间:
2010-3-11 08:33
mark
作者:
banyai
时间:
2010-3-11 09:02
不理解你说的,你的解决方法似乎只是在两个发送字节之间加入了一定的延时。我想可能还是你的通信线路上无法达到最高的通信速度,与软件无关。
作者:
ybqwf
时间:
2010-3-23 19:23
mark
作者:
l456789
时间:
2010-3-23 20:45
楼主测试过距离有没关系呢?
作者:
denglu
时间:
2010-6-10 00:31
mark
作者:
wxzhouqing
时间:
2010-6-10 02:50
主程序查询,二字节间的时间可能延长!, 你讲的“通讯成功率”是指PC发送的数据你不回,还是你回的数据PC收的不正确。。
作者:
kinggao
时间:
2010-6-30 15:52
记号 谢谢指点
作者:
yaya001
时间:
2010-6-30 17:46
mark
作者:
liujing0146
时间:
2010-6-30 18:43
mark
作者:
gsl8828
时间:
2010-7-30 13:21
好
作者:
twd3621576
时间:
2010-8-11 15:41
17 楼问的好
作者:
ming076
时间:
2010-10-6 21:40
mark
作者:
jckj
时间:
2010-10-6 23:20
mark
作者:
jrcsh
时间:
2010-10-6 23:41
我想说~~~~除非很特殊的场合 要不~~~~ 没见过这么高的波特
波特率 常用到的就 9600 / 1000米 2400/1800米 当然对通信物理线路,和接地处理也有要求才能达到好的通信质量。
作者:
adai
时间:
2010-10-7 00:24
mark
作者:
electricit
时间:
2010-10-7 00:42
我把串口波特率升到了187.5K,跑好三百米,PROFIBUS,运行正常,一般掌握好收发切换时间,任意支持的速度都可以100%的
作者:
kneken
时间:
2010-10-7 00:48
mark
作者:
EILIANHELL
时间:
2010-10-7 15:45
mark
作者:
ye_song
时间:
2010-10-7 21:06
mark
作者:
rainyss
时间:
2010-10-8 02:42
中断没问题的,大框架要设计好,别的中断中时延不要超过8us就行了.
当然你的观点也是正确的,不要老盯着中断不放,很多时候查询反而是最有效率的.
我用的方法是使用更快的单片机.
没有万能的方法,变通才是硬道理.
作者:
twlkzxy
时间:
2010-10-9 17:12
mk
作者:
tiaomiaodu
时间:
2010-11-30 22:34
由于数据发送时,采用了"空中断"+"发送完成中断",
这句话怎么理解的啊。我不懂的
作者:
yywin
时间:
2010-12-1 00:06
学习
作者:
Shi_Tou
时间:
2010-12-7 11:52
回复【楼主位】ba_wang_mao
-----------------------------------------------------------------------
标记 485啊!
作者:
win100
时间:
2010-12-30 10:27
标记。
作者:
HuNB
时间:
2010-12-30 10:36
mark
作者:
star_tale
时间:
2011-2-13 10:47
mark
作者:
mitchell
时间:
2011-2-13 15:13
和高速网卡驱动程序一个道理,频繁的中断反而降低系统效率,特别是大型操作系统。所以,高速网卡的驱动多用查询的方式接收数据包。
作者:
more
时间:
2011-2-13 19:13
Mark.
作者:
liulj1007
时间:
2011-4-15 16:11
mark
作者:
flyingcys
时间:
2011-4-15 22:44
mark
作者:
cxbbb
时间:
2011-4-16 00:49
学习
作者:
mystar1984
时间:
2011-4-18 08:25
MARK
作者:
wxx116zh
时间:
2011-4-18 10:28
mark,学习了
作者:
GZLJZ
时间:
2011-4-18 11:15
这个要好好领悟
作者:
ljt8015
时间:
2011-4-18 11:33
查询方式的话,即使波特率很高,通信效率就低了啊
作者:
ledatou
时间:
2011-4-18 11:40
mark
作者:
shamork
时间:
2011-4-18 12:14
mark
作者:
zhaoghsea
时间:
2011-4-18 13:29
mark
作者:
haimie
时间:
2011-4-18 16:30
mmmk
作者:
dengxiaofeng
时间:
2011-4-18 17:18
标记 回去看 现在下班了!!!
作者:
Chuda
时间:
2011-4-20 20:11
mark
作者:
djw1981
时间:
2011-7-15 13:44
485,学习了。谢谢!
作者:
blackhorse21
时间:
2011-7-15 14:06
mark!
作者:
myhonour
时间:
2011-7-15 14:07
mark
作者:
kupica
时间:
2011-7-15 14:22
不懂空中断是什么意思,还望楼主指教。
作者:
prowin
时间:
2011-7-15 16:14
mark!!
作者:
zhikai_wu
时间:
2011-7-21 09:22
485搞这么高.用在现场一段时间试下.
作者:
2233223
时间:
2011-7-21 10:40
1382400波特率,100-200米,经常用,无压力
作者:
icexiong
时间:
2011-7-21 11:01
可以换成can,or ethernet
作者:
canberry00
时间:
2011-8-5 12:02
mark
作者:
defineme
时间:
2011-8-17 16:56
我觉得楼主的分析不是真正问题原因所在!
作者:
xiaozhe101424
时间:
2011-8-19 11:41
空中断+发送完成中断?
作者:
tothen5
时间:
2011-8-20 17:46
485误码问题,很多不是在软件上解决的!
即时采用57600波特率,采用查询方式发送!
作者:
19001579
时间:
2011-8-20 20:38
RS485一般是一次性把数数发完比较好,在进入了装载数据期间就不要中断了,一定要等到装载完成以后,也就是要发完以后才可以中断
还有个小问题,我让楼主测试回来后告诉我
作者:
Trylin
时间:
2011-8-20 21:30
mark
作者:
zjy9430
时间:
2011-8-21 00:00
mark!
作者:
zhunyan
时间:
2011-10-2 13:35
mark
作者:
Hello_World
时间:
2011-10-2 14:49
mark
作者:
Helloeveryon
时间:
2011-10-3 00:10
MARK
作者:
287355586
时间:
2011-10-9 14:21
回复【楼主位】ba_wang_mao
-----------------------------------------------------------------------
mark
作者:
haolaishi
时间:
2011-11-21 23:36
MARK
作者:
pcwhy
时间:
2011-11-21 23:52
谢谢了'
作者:
qinhya
时间:
2011-11-22 08:32
mark
作者:
saluo
时间:
2011-11-22 11:11
mark
作者:
taocongrong
时间:
2011-12-29 16:03
mark 还不错
作者:
terrorist
时间:
2012-3-8 14:01
Mark
作者:
Felix257
时间:
2012-3-8 14:04
好东西
作者:
xingzhong
时间:
2012-3-8 15:04
回复【楼主位】ba_wang_mao
-----------------------------------------------------------------------
mark
作者:
yuzr
时间:
2012-3-8 15:07
mark
作者:
senbaby2
时间:
2012-3-28 21:14
恩,通讯时候需要了解学习的地方。
作者:
wpnx
时间:
2012-3-28 21:23
没有万能的方法,变通才是硬道理!
作者:
mimikankan
时间:
2012-3-28 21:33
发送完中断时切换收发状态基本误码率在十万分之一
作者:
pisgah
时间:
2012-3-28 21:46
为了高波特率而降低了位元组的传送速率,那高波特率有什么好处?
作者:
sheji105
时间:
2012-3-30 17:37
看看波特率精确性情况,总线电阻匹配
作者:
lhuan
时间:
2012-5-16 12:52
我在调试是波特率为9600及以下通信率很低,但是在14400以上时通信率为100%,不知道为啥?也是利用马老师的程序。
作者:
TW_strivehappy
时间:
2012-5-16 12:59
mark
作者:
wszyjsw2
时间:
2012-5-16 18:58
有人鉴定了 有用吗?
作者:
jqfsjt
时间:
2012-5-16 23:22
先标记下,有时间研究下。
作者:
just_be_fine
时间:
2012-5-16 23:38
MARK!顶
作者:
xiatianzhang
时间:
2012-7-24 09:19
看的不是很明白!
作者:
layi.lau1986
时间:
2012-8-14 11:09
请教楼主您一个问题,,我正在传输数据64kpbs 通讯数据很大,能否给点建议呢!!我需要使用485通讯!!
作者:
linucos
时间:
2012-8-14 12:31
学习学习!
作者:
yfgww
时间:
2012-8-17 23:02
收藏起来
作者:
kowajw
时间:
2012-9-10 20:53
mark。。。。。。
作者:
jz701209李
时间:
2013-1-29 21:17
学习学习.......
作者:
xiangweixx
时间:
2013-2-26 11:28
Mark一下!
作者:
liyang121316
时间:
2014-4-21 21:21
lhuan 发表于 2012-5-16 12:52
我在调试是波特率为9600及以下通信率很低,但是在14400以上时通信率为100%,不知道为啥?也是利用马老师的 ...
能给解释下什么叫通信率吗?谢谢!
欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/)
Powered by Discuz! X3.4