搜索
bottom↓
回复: 103

傻孩子:我终于找到了RS485时,高波特率,大数据量时通讯不好的解决方法.

  [复制链接]

出0入0汤圆

发表于 2010-2-24 17:31:20 | 显示全部楼层 |阅读模式
现象:
    我的程序 定时中断=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%)时,才在主程序中使用"查询方式"发送数据.

出0入0汤圆

发表于 2010-2-24 17:36:52 | 显示全部楼层
mark

出0入296汤圆

发表于 2010-2-24 17:38:21 | 显示全部楼层
恭喜哈,看来你领悟到了很多对自己有用的东西。

举一反三:
AD里面如果使用autorun模式来连续采样,开启中断的情况下,系统资源可能消耗很大;
使用SPI通讯,如果通讯速率较高,并且开启了中断,则系统资源消耗较大。

对付以上情况,可以参考楼主地分析,使用类似的方法解决。

出0入0汤圆

发表于 2010-2-24 22:11:32 | 显示全部楼层
软件处理很重要

出0入0汤圆

发表于 2010-3-7 23:21:55 | 显示全部楼层
mark

出100入0汤圆

发表于 2010-3-8 14:16:08 | 显示全部楼层
记录

出0入0汤圆

发表于 2010-3-8 16:14:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-8 17:23:40 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2010-3-10 09:25:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-10 11:09:30 | 显示全部楼层
我一般都用 空中断 + 缓存方式 发送

出0入59汤圆

发表于 2010-3-11 01:22:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-11 08:13:30 | 显示全部楼层
收藏,485 确实有很多地方要用到

出0入0汤圆

发表于 2010-3-11 08:33:25 | 显示全部楼层
mark

出0入4汤圆

发表于 2010-3-11 09:02:19 | 显示全部楼层
不理解你说的,你的解决方法似乎只是在两个发送字节之间加入了一定的延时。我想可能还是你的通信线路上无法达到最高的通信速度,与软件无关。

出0入0汤圆

发表于 2010-3-23 19:23:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-23 20:45:14 | 显示全部楼层
楼主测试过距离有没关系呢?

出0入0汤圆

发表于 2010-6-10 00:31:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-10 02:50:42 | 显示全部楼层
主程序查询,二字节间的时间可能延长!, 你讲的“通讯成功率”是指PC发送的数据你不回,还是你回的数据PC收的不正确。。

出0入0汤圆

发表于 2010-6-30 15:52:31 | 显示全部楼层
记号 谢谢指点

出0入0汤圆

发表于 2010-6-30 17:46:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-30 18:43:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-30 13:21:24 | 显示全部楼层

出0入0汤圆

发表于 2010-8-11 15:41:00 | 显示全部楼层
17 楼问的好

出0入0汤圆

发表于 2010-10-6 21:40:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-6 23:20:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-6 23:41:47 | 显示全部楼层
我想说~~~~除非很特殊的场合  要不~~~~  没见过这么高的波特

波特率 常用到的就 9600 / 1000米   2400/1800米   当然对通信物理线路,和接地处理也有要求才能达到好的通信质量。

出0入0汤圆

发表于 2010-10-7 00:24:02 | 显示全部楼层
mark

出0入4汤圆

发表于 2010-10-7 00:42:19 | 显示全部楼层
我把串口波特率升到了187.5K,跑好三百米,PROFIBUS,运行正常,一般掌握好收发切换时间,任意支持的速度都可以100%的

出0入0汤圆

发表于 2010-10-7 00:48:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-7 15:45:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-7 21:06:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-8 02:42:05 | 显示全部楼层
中断没问题的,大框架要设计好,别的中断中时延不要超过8us就行了.
当然你的观点也是正确的,不要老盯着中断不放,很多时候查询反而是最有效率的.
我用的方法是使用更快的单片机.
没有万能的方法,变通才是硬道理.

出0入0汤圆

发表于 2010-10-9 17:12:27 | 显示全部楼层
mk

出0入0汤圆

发表于 2010-11-30 22:34:48 | 显示全部楼层
由于数据发送时,采用了"空中断"+"发送完成中断",
这句话怎么理解的啊。我不懂的

出0入0汤圆

发表于 2010-12-1 00:06:53 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-12-7 11:52:46 | 显示全部楼层
回复【楼主位】ba_wang_mao
-----------------------------------------------------------------------

标记 485啊!

出0入0汤圆

发表于 2010-12-30 10:27:45 | 显示全部楼层
标记。

出0入0汤圆

发表于 2010-12-30 10:36:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-13 10:47:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-13 15:13:16 | 显示全部楼层
和高速网卡驱动程序一个道理,频繁的中断反而降低系统效率,特别是大型操作系统。所以,高速网卡的驱动多用查询的方式接收数据包。

出0入0汤圆

发表于 2011-2-13 19:13:12 | 显示全部楼层
Mark.

出0入0汤圆

发表于 2011-4-15 16:11:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-15 22:44:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-16 00:49:47 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-4-18 08:25:29 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-4-18 10:28:26 | 显示全部楼层
mark,学习了

出0入0汤圆

发表于 2011-4-18 11:15:05 | 显示全部楼层
这个要好好领悟

出0入0汤圆

发表于 2011-4-18 11:33:29 | 显示全部楼层
查询方式的话,即使波特率很高,通信效率就低了啊

出0入0汤圆

发表于 2011-4-18 11:40:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-18 12:14:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-18 13:29:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-18 16:30:29 | 显示全部楼层
mmmk

出0入18汤圆

发表于 2011-4-18 17:18:06 | 显示全部楼层
标记  回去看  现在下班了!!!

出0入0汤圆

发表于 2011-4-20 20:11:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-15 13:44:38 | 显示全部楼层
485,学习了。谢谢!

出0入0汤圆

发表于 2011-7-15 14:06:13 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-7-15 14:07:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-15 14:22:39 | 显示全部楼层
不懂空中断是什么意思,还望楼主指教。

出0入0汤圆

发表于 2011-7-15 16:14:25 | 显示全部楼层
mark!!

出0入0汤圆

发表于 2011-7-21 09:22:32 | 显示全部楼层
485搞这么高.用在现场一段时间试下.

出0入0汤圆

发表于 2011-7-21 10:40:39 | 显示全部楼层
1382400波特率,100-200米,经常用,无压力

出0入0汤圆

发表于 2011-7-21 11:01:01 | 显示全部楼层
可以换成can,or ethernet

出0入0汤圆

发表于 2011-8-5 12:02:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-17 16:56:41 | 显示全部楼层
我觉得楼主的分析不是真正问题原因所在!

出0入0汤圆

发表于 2011-8-19 11:41:34 | 显示全部楼层
空中断+发送完成中断?

出0入0汤圆

发表于 2011-8-20 17:46:36 | 显示全部楼层
485误码问题,很多不是在软件上解决的!
即时采用57600波特率,采用查询方式发送!

出0入0汤圆

发表于 2011-8-20 20:38:22 | 显示全部楼层
RS485一般是一次性把数数发完比较好,在进入了装载数据期间就不要中断了,一定要等到装载完成以后,也就是要发完以后才可以中断
还有个小问题,我让楼主测试回来后告诉我

出0入17汤圆

发表于 2011-8-20 21:30:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-21 00:00:38 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-10-2 13:35:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-2 14:49:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-3 00:10:46 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-10-9 14:21:32 | 显示全部楼层
回复【楼主位】ba_wang_mao
-----------------------------------------------------------------------

mark

出0入0汤圆

发表于 2011-11-21 23:36:31 | 显示全部楼层
MARK

出15入9汤圆

发表于 2011-11-21 23:52:47 | 显示全部楼层
谢谢了'

出0入0汤圆

发表于 2011-11-22 08:32:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-22 11:11:05 | 显示全部楼层
mark
头像被屏蔽

出0入0汤圆

发表于 2011-12-29 16:03:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-3-8 14:01:08 | 显示全部楼层
Mark

出0入0汤圆

发表于 2012-3-8 14:04:41 | 显示全部楼层
好东西

出0入0汤圆

发表于 2012-3-8 15:04:08 | 显示全部楼层
回复【楼主位】ba_wang_mao  
-----------------------------------------------------------------------

mark

出50入0汤圆

发表于 2012-3-8 15:07:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-28 21:14:33 | 显示全部楼层
恩,通讯时候需要了解学习的地方。

出0入0汤圆

发表于 2012-3-28 21:23:35 | 显示全部楼层
没有万能的方法,变通才是硬道理!

出0入0汤圆

发表于 2012-3-28 21:33:00 | 显示全部楼层
发送完中断时切换收发状态基本误码率在十万分之一

出0入0汤圆

发表于 2012-3-28 21:46:45 | 显示全部楼层
为了高波特率而降低了位元组的传送速率,那高波特率有什么好处?

出0入0汤圆

发表于 2012-3-30 17:37:31 | 显示全部楼层
看看波特率精确性情况,总线电阻匹配

出0入0汤圆

发表于 2012-5-16 12:52:00 | 显示全部楼层
我在调试是波特率为9600及以下通信率很低,但是在14400以上时通信率为100%,不知道为啥?也是利用马老师的程序。

出0入0汤圆

发表于 2012-5-16 12:59:10 | 显示全部楼层
mark      

出0入0汤圆

发表于 2012-5-16 18:58:24 | 显示全部楼层
有人鉴定了 有用吗?

出0入0汤圆

发表于 2012-5-16 23:22:45 | 显示全部楼层
先标记下,有时间研究下。

出0入0汤圆

发表于 2012-5-16 23:38:04 | 显示全部楼层
MARK!顶
头像被屏蔽

出0入0汤圆

发表于 2012-7-24 09:19:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-8-14 11:09:03 | 显示全部楼层
请教楼主您一个问题,,我正在传输数据64kpbs 通讯数据很大,能否给点建议呢!!我需要使用485通讯!!

出0入0汤圆

发表于 2012-8-14 12:31:29 | 显示全部楼层
学习学习!

出0入0汤圆

发表于 2012-8-17 23:02:40 | 显示全部楼层
收藏起来

出0入0汤圆

发表于 2012-9-10 20:53:47 | 显示全部楼层
mark。。。。。。

出0入0汤圆

发表于 2013-1-29 21:17:46 来自手机 | 显示全部楼层
学习学习.......

出0入0汤圆

发表于 2013-2-26 11:28:20 | 显示全部楼层
Mark一下!

出0入42汤圆

发表于 2014-4-21 21:21:21 | 显示全部楼层
lhuan 发表于 2012-5-16 12:52
我在调试是波特率为9600及以下通信率很低,但是在14400以上时通信率为100%,不知道为啥?也是利用马老师的 ...

能给解释下什么叫通信率吗?谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 15:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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