搜索
bottom↓
回复: 40

请教:485总线实现竞争机制通信的可行性

[复制链接]

出0入0汤圆

发表于 2014-5-8 13:51:24 | 显示全部楼层 |阅读模式
公司的设备节点之间需要传输模拟音视频,以前的系统采用485主从轮询机制通信,这样的缺点是项目节点多的时候(设计是一个主机能支持255个节点)轮询时间长,主机对节点请求的响应时间长,用户体验差;还一个是轮询方式总线上数据量大,总线会影响到模拟音视频信号的质量(比如节点通话有噪音),正准备开发一套新机型,现在想放弃原先的通信方式,采用竞争方式通信,CAN成本太高,想在485上做竞争。现在讨论的实现方式是将485的RX脚接一个外部中断来判断总线上是否有通信,如果节点需要占用总线发送数据则检测到一定的时间内都没有通信则计算出一个随机的延迟时间后发送数据,延迟的过程中如果发现总线有通信放弃发送重新等待空闲。这种方式需要使用两个定时器和一个外部中断,一个定时器用于检测总线状态计时另外一个用于精确延时,如果单片机UART有接收开始中断则可以省掉外部中断。
大家能否看下这个方案的可行性或者有没有其它方案。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2014-5-8 13:54:59 | 显示全部楼层
不可靠,放弃吧

出0入0汤圆

发表于 2014-5-8 13:58:36 | 显示全部楼层
一主多从的方式吗?
第一可以考虑提高波特率,速度就上去了。
第二是主机选择有多路usart的单片机,多接几路485出来就ok,什么都不用改动,支持节点提升一倍。
第三是软件轮牌的方式,从机根据各自节点的地址按顺序上发数据,主机负责轮牌的开始和结束。

出0入0汤圆

 楼主| 发表于 2014-5-8 14:03:37 | 显示全部楼层
y595906642 发表于 2014-5-8 13:58
一主多从的方式吗?
第一可以考虑提高波特率,速度就上去了。
第二是主机选择有多路usart的单片机,多接几 ...

以前就是轮牌方式,但是主要想减小485对音频的干扰才想放弃这种方式,设备在现场的安装方式只能是手拉手,所以主机接多路也不现实

出0入0汤圆

发表于 2014-5-8 14:12:19 | 显示全部楼层
定义一个变量,在定时器里自减,当接收到串口数据把变量赋值,发送数据前要满足该变量为0.

出0入0汤圆

发表于 2014-5-8 14:15:26 | 显示全部楼层
拉手连接的话从机分成两组不就行了吗?
有干扰加屏蔽不行吗?
不管查询还是轮牌,数据量都是那么多,该干扰还是会干扰。

出0入0汤圆

发表于 2014-5-8 14:17:21 | 显示全部楼层
485的物理层不支持多主;同时发数存在烧输出级的可能性。或者用CAN物理层跑UART,这个速度被物理层约束了。

出0入0汤圆

 楼主| 发表于 2014-5-8 15:43:06 | 显示全部楼层
因为在网上搜到几篇相关的论文,所以觉得这种方法应该可行,就是不知道可靠性如何

出10入113汤圆

发表于 2014-5-8 16:10:39 | 显示全部楼层
按有效数据量来计算,轮询应该是最快的方法了,可以优化通讯时间和优化协议字节数。

出0入0汤圆

发表于 2014-5-8 16:31:56 | 显示全部楼层
轮询应该是最有效率的了,不要一直轮询所有的站点,
记录静默的站点,每次查询部分,有响应才记录到存在的站点列表里面去

出0入0汤圆

 楼主| 发表于 2014-5-8 16:53:29 | 显示全部楼层
我们的节点虽然多但是绝大部分时间节点基本都是无发送请求的,以前是令牌轮询的方式,这样总线大部分时间发送的全是空令牌,效率太低,设备之间通话都是“滋滋”声,传输线用的是网线,这种噪音还是比较难屏蔽的

出0入0汤圆

发表于 2014-5-8 21:43:29 | 显示全部楼层
polestar_xsx 发表于 2014-5-8 16:53
我们的节点虽然多但是绝大部分时间节点基本都是无发送请求的,以前是令牌轮询的方式,这样总线大部分时间发 ...

不会是对讲的吧?255个点够?

出0入4汤圆

发表于 2014-5-8 22:30:53 | 显示全部楼层
PROFIBUS,485的物理连接,12M的速度

出0入0汤圆

发表于 2014-5-8 23:33:23 | 显示全部楼层
我只做了双机通信,侦听采用的是自发自收(不好,还是发送前侦听RX好),通信距离也只有2米,因距离短波特率设置为250K,测试了几天没什么问题。节点多距离长的话波特率效率都低,可靠性不敢说。

出0入0汤圆

 楼主| 发表于 2014-5-9 08:40:19 | 显示全部楼层
ysyt_3 发表于 2014-5-8 21:43
不会是对讲的吧?255个点够?

的确是对讲,一个楼道255个节点够了,楼道外不是485了

出0入0汤圆

发表于 2014-5-9 08:51:46 | 显示全部楼层
半双工通信本身就有缺陷,全双工了?效率和速度都提高!

出0入0汤圆

 楼主| 发表于 2014-5-9 08:56:09 | 显示全部楼层
Xujuango 发表于 2014-5-8 22:30
PROFIBUS,485的物理连接,12M的速度

谢谢,我了解下

出0入0汤圆

 楼主| 发表于 2014-5-9 08:58:50 | 显示全部楼层
activeleo 发表于 2014-5-9 08:51
半双工通信本身就有缺陷,全双工了?效率和速度都提高!

谁说不是呢,倒是想用CAN来着,就是单个节点贵,得考虑成本

出0入0汤圆

发表于 2014-5-9 09:06:35 | 显示全部楼层
dr2001 发表于 2014-5-8 14:17
485的物理层不支持多主;同时发数存在烧输出级的可能性。或者用CAN物理层跑UART,这个速度被物理层约束了。 ...

+10086,用can接口芯片吧!

出0入0汤圆

发表于 2014-5-9 10:22:28 | 显示全部楼层

甭了解了,CAN都嫌贵,PROFIBUS更贵了。
还是在现有的平台上想想办法吧。

出0入0汤圆

发表于 2014-5-9 10:37:20 | 显示全部楼层
zhugean 发表于 2014-5-8 13:54
不可靠,放弃吧

那是因为你没接触过多主站的PROFIBUS,西门子也是这么用的。高速RS485走多主站!

出0入0汤圆

发表于 2014-5-9 10:39:35 | 显示全部楼层
这个其实可以的,走令牌环,所有发送使用回环模式,对发送的数据进行侦听,如果侦听到发送的和接受的异常就证明有多主机冲突,使用令牌协议进行等待及相关令牌时间处理。通过传递令牌及令牌超时进行总线占用时间控制。

出0入0汤圆

发表于 2014-5-9 11:25:25 | 显示全部楼层
sheng1xu 发表于 2014-5-9 10:37
那是因为你没接触过多主站的PROFIBUS,西门子也是这么用的。高速RS485走多主站! ...

profibus是RS485吗?
其他协议的多主当然是可以的,比如以太网的CSMA/CD
但是RS485却不行,他不能简单的可靠检测碰撞

出0入0汤圆

发表于 2014-5-9 11:47:46 | 显示全部楼层






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-5-9 11:51:59 | 显示全部楼层
zhugean 发表于 2014-5-9 11:25
profibus是RS485吗?
其他协议的多主当然是可以的,比如以太网的CSMA/CD
但是RS485却不行,他不能简单的 ...

抱歉,PROFIBUS就是走的485。

出0入54汤圆

发表于 2014-5-9 11:53:21 | 显示全部楼层
485线上一个发0一个发1,出来结果是不确定的吧?而且硬件不会损坏?如果检测到冲突是不是就要重发了。

像I2C这种发0和1冲突出来就是0,那么发1的就知道冲突了,但发0的不用重发。

出0入0汤圆

发表于 2014-5-9 12:05:50 | 显示全部楼层


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-5-9 12:13:11 | 显示全部楼层

谢谢,主要就是参考这几篇论文的,就是不知道用在产品上稳不稳定

出0入0汤圆

发表于 2014-5-9 12:38:06 | 显示全部楼层
sheng1xu 发表于 2014-5-9 11:51
抱歉,PROFIBUS就是走的485。

profibus物理层可以是485,但是也需要上层协议支持
像楼主说的简单判断冲突的方法是不可靠的

出0入0汤圆

发表于 2014-5-9 13:23:06 | 显示全部楼层
zhugean 发表于 2014-5-9 12:38
profibus物理层可以是485,但是也需要上层协议支持
像楼主说的简单判断冲突的方法是不可靠的 ...

难道你没看到我的另一个回复么?就是说如何实现485多主站方式。令牌环加自收侦听。

出0入0汤圆

发表于 2017-4-14 18:27:35 | 显示全部楼层
前辈可以将轮训的485的源码分享给我一下吗。也可以发我邮箱865542216@qq.com;最近在做毕设,着急!

出0入0汤圆

发表于 2017-4-14 20:24:25 | 显示全部楼层
polestar_xsx 发表于 2014-5-9 08:58
谁说不是呢,倒是想用CAN来着,就是单个节点贵,得考虑成本

只是使用CAN物理层驱动器,不会很贵的,协议自己用单片机写自定义就可以了

出0入0汤圆

发表于 2017-4-15 15:40:14 | 显示全部楼层
pisgah 发表于 2017-4-14 20:24
只是使用CAN物理层驱动器,不会很贵的,协议自己用单片机写自定义就可以了 ...

这样也行?,,,被can的协议文档搞晕了

出0入0汤圆

发表于 2017-4-15 16:03:02 | 显示全部楼层
用控制TR的方式实现发送就可以做到了

出0入0汤圆

发表于 2017-4-15 21:56:31 | 显示全部楼层
wkman 发表于 2017-4-15 15:40
这样也行?,,,被can的协议文档搞晕了

用PCA82C250取代485收發器就好了,程式也不必改,不過這兩者腳位不同,要改LAYOUT

出0入0汤圆

发表于 2017-4-16 10:02:04 | 显示全部楼层
本帖最后由 jianplx 于 2017-4-16 10:10 编辑

可否这样做: 总线上额外挂一个总裁器,总裁器监听总线是否空闲,当发现空闲,就发个令牌,获得令牌的节点获权发言,发言结束后总裁器再次发下一个令牌
如果这个节点发出的数据需要目标应答,再发送的数据中加入应答标记,总裁器在发下一个令牌的时候优先发个需要应答的节点。
相当于大家一起在课堂上发言,老师来负责次序

出0入0汤圆

发表于 2017-4-16 10:14:47 | 显示全部楼层
eryunk 发表于 2014-5-8 16:31
轮询应该是最有效率的了,不要一直轮询所有的站点,
记录静默的站点,每次查询部分,有响应才记录到存在的 ...

刚上电新加入的节点怎么办?

出0入0汤圆

发表于 2017-4-16 22:57:10 | 显示全部楼层
现在芯片不都自带can?

出0入0汤圆

发表于 2017-4-17 09:35:06 | 显示全部楼层
有一个协议解决。。。。原来是用在APRS上的。

出0入0汤圆

发表于 2017-5-15 14:53:21 | 显示全部楼层
每个器件有一个表。按表上的延时检测总线。规定时间内没有通信就轮到自己发送了。如果有别的模块发送了。下一次的时间重新计算 。等待的时间按表换下一个。。一定有一个最佳的表保证通信效率的。

出0入0汤圆

发表于 2017-5-15 19:01:25 | 显示全部楼层
为什么说用CAN成本会高呢? 现在芯片很多都带CAN了,而且CAN收发器跟485差不多呀,也是直接用屏蔽双绞线,就是协议麻烦点
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-3 04:30

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

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