0 请教485总线多主控制 - 第2页 - 单片机论坛,单片机技术交流论坛 - 21ic电子技术开发论坛
打印

请教485总线多主控制

[复制链接]
楼主: machunshui
手机看帖
扫描二维码
随时随地手机跟帖
21
学生D| | 2009-4-30 14:31 | 只看该作者 回帖奖励 |倒序浏览

同意19楼。

工程上不可能保证RS485上不出现总线冲突,一冲突就烧片子?设计芯片的人比咱菜鸟还不如?连个限流限压电路都考虑不到?

MAX485内部电路一看,原来什么都加了。

是我们自己的问题而已。


即使说“正常情况下,”不会出现冲突。那么系统总会有“不正常情况”出现,即使几个月,一年出现一次异常。那么是不是几个月、或一年,异常出现之后,就要更换一次MAX485?——没烧的也是带病工作,需要全部换。老总下达“常识性”命令了。

使用特权

评论回复
22
machunshui|  楼主 | 2009-4-30 14:33 | 只看该作者

只要同时发送几个字节,485接口肯定不会损坏

只要同时发送几个字节,485接口肯定不会损坏.

当然可以由从机是否应答来确定是否获得总线使用权

使用特权

评论回复
23
machunshui|  楼主 | 2009-4-30 14:59 | 只看该作者

只不过485不能实现,边说边听,效率比以太网差

只不过485不能实现,边说边听,效率比以太网差,比I2C总线多主冲突检测效率差

使用特权

评论回复
24
学生D| | 2009-5-2 15:12 | 只看该作者

各有千秋。都有存在的理由。

如果说RS485效率比其它总线差,是不是应该淘汰了?

举实际生活中的例子:
有些十字路口因为车辆太少,无需安装红绿灯控制。这就是以太网或者CAN的应用条件:节点少,载荷轻时效率高。各个车辆自己仲裁。——边说边听就好像司机边走边观察两侧有没有车辆,如有,只能撞车重新来,躲是躲不过去的。这时就谈不上效率。边说边听体现什么优点?

随着路口车辆越多,网络载荷越重,碰撞概率大大增加,超过一定限度,终于堵车,直到大家互相拥挤,谦让性格的司机长时间过不了路口。正如公交BUS,如若一个车门同时上下,互不谦让,2个逆向的人互相挤在门口,谁也过不去了。

这时体现RS485的好处和效率了:十字路口红绿灯仲裁,大家统一听从一个令牌仲裁,不需要自己边说边听,无论什么性格的司机,都能得到公平时间分配,闭着眼都能把车开过去。

所以,当网络载荷重时,使用RS485效率高。

另外,网络技术中,节点增多时,效率最高,又不会堵车的当属IBM物理令牌环网,一般SDLC通信控制器都有环形拓扑配置。而CSMA通信控制器不可能配置成环形拓扑,机制不一样。(也许可以配置为RS485总线拓扑模拟网。)

使用特权

评论回复
25
ayb_ice| | 2009-5-2 16:06 | 只看该作者

485应用多主,一个字"难",两个字"太难"

使用特权

评论回复
26
kanprin| | 2009-5-4 08:28 | 只看该作者

实际测试过是否会烧的问题

芯片:max1487
过程:分别用两个单片机控制两个485,两个485一直处于发送状态,一个发0xff,一个发0x00,此时将两个485的A,B线接上,连续测试两天半时间,没有发现芯片有任何损坏现象。当然,不知道此测试方法是否可行?

学生D是从理论上的分析如此,实测数据,3台485,接收脚直接引到单片机一个中断口,接收一直使能。只要认为总线是空闲就一直发送数据,若发生碰撞则停止发送,随机延时后再发,在9600bp/s的情况下,总线的使用效率约在90%左右,所以如果在效率可以忍受(各节点不是特忙的那种)的情况,此应用应该没什么问题。节点多,总线使用效率高,但发送碰撞的几率也高。

使用特权

评论回复
27
学生D| | 2009-5-4 09:40 | 只看该作者

敬佩26楼。

大概很少能有人像kanprin那样,真的去实验一把。然后以事实为据再来讨论RS485多主应用的问题。

什么应用方式都是有前提条件的,假设总线上只有10个节点,要求多主访问,是不是也要来个以太局域网或者CAN?  据知:现场总线应用中,CSMA协议应用只占少数。主要原因之一 ——网络行为不可预测,仅此一条就够受的了;正如程序调试那样,难在程序运行起来不可预测,不知道什么时候,哪一点出了问题。所以要借助仿真器这样的工具。

rs485用于多主访问的前提条件,来自生活中的基本认知:少数人范围内,很难有2个人在霎那间同时决定相同的行为,双胞胎也少见。这就是26楼kanprin的实验意义,他3个节点满载荷,与30个节点轻载荷比较,可能反而后者碰撞概率高。——因为后者相对前者不是少数人范围。

     其实世界上早就有人论证过这种关系:一个网络上,访问量与节点数的关系曲线,在哪一点效率最高。——在这一点之后,CSMA反而效率迅速下降,(物理)环形网效率不变。

RS485多主访问的前提条件也一样:要考虑节点数和访问量的相对关系。
不能笼统地一概而论,说很困难,不建议用等等。

 

使用特权

评论回复
28
machunshui|  楼主 | 2009-5-4 10:23 | 只看该作者

不用外部中断

不用外部中断,

直接检测串口收发数据的静噪时间即可.

使用特权

评论回复
29
machunshui|  楼主 | 2009-5-4 10:39 | 只看该作者

效率问题

效率问题这样处理:

每个站要启动一次收发数据会话,
先检测收发数据的静噪时间(静噪时间 > 帧间隔时间).

静噪时间到,可以认为别的站收发数据会话结束.

然后,启动一次数据会话请求帧(会话请求帧可以几个字节),
如没有别的站同时启动数据会话请求帧,
那么目的站会立即返回数据会话应答帧,
说明了本次数据会话请求成功,
本站立即开始发收多帧数据.

由于每个站都要检测静噪时间,
所以本站一旦会话请求成功,
别的站必须等到静噪时间满足才能请求会话,
本站的发收多帧数据不会受到影响.

当两站同时发起会话请求的时候,会发生数据冲突,
都收不到正常应答帧,
两者都在一个固定时间内随机延时,
重新发起会话请求即可.


由于每次会话,只需要发送几个字节的会话请求帧,
所以冲突应该不会太厉害.

使用特权

评论回复
30
machunshui|  楼主 | 2009-5-4 10:47 | 只看该作者

每个站都检测收发数据的静噪时间

每个站都检测收发数据的静噪时间.
一旦一个站获得总线使用权,
就一直讲,
别的站插不进话.

一个站在开始讲话前,
等静噪时间到,
讲一句短语,
对方应答,就占用了总线,一直讲.

无应答,
在随机等待一段时间后,
讲一句短语,
等应答.



使用特权

评论回复
31
bjc125| | 2009-5-4 12:36 | 只看该作者

大家继续讨论呀

很有意思 我最近也在做485通信 不过是单主机 呵呵

使用特权

评论回复
32
学生D| | 2009-5-4 13:49 | 只看该作者

machunshui兄长做的像LonWorks协议

 直接参考LonWorks协议即可,很完善的。

首先,兄长的协议必须要比主从轮询快、并且简单才有意义。

LonWorks协议:必须有一个时统信号,——由主监控站发出最简单,其他节点省好多事。

主监控站每发出一个全局地址时统信号,所有的站点就开始计时,每个站点都固定分配了一个时隙,它若有报文要发送,只能在属于自己的那个时隙里启动发言,如果一个时隙远远小于一个查询帧的时间,那么这种多主自主仲裁协议就比主从令牌轮询分配方式效率高得多、快得多。而且不可能出现碰撞,因为一个时隙的发言权只分配给了某个固定站点。

如果位于前面的节点开始发言——有数据发送,当然时隙就要重新分配了。这由监控节点观测当前持有令牌的站点何时发送完毕,——也就是兄长说的静噪观测——交出令牌,然后重新发布时统信号。新一轮发言权分配开始。

可惜这么高效的协议,LonWorks已经做到芯片里硬件实现了。模拟软件也不复杂,只是时隙不能做的像硬件那样很小很精确、快速启动吧?



 

使用特权

评论回复
33
学生D| | 2009-5-4 14:02 | 只看该作者

显然上述协议是带有优先权的。

如果位于前面的站点有一个“话痞子”,每次时统信号重新分配时他都要占用来讲2句,不给后面的节点讲话的机会。结果在他后面的站点就可能永远轮不到讲话的机会。

这种现象可能发生吗?

使用特权

评论回复
34
machunshui|  楼主 | 2009-5-4 14:12 | 只看该作者

还真没看过LonWorks协议

还真没看过LonWorks协议.

想象多人讲话的情形,

觉得大概可以这么做.

照你的描述,LonWorks协议类似于时分复用+时钟基准广播.

我前面的描述,就是类似于以太网方式,而非LonWorks协议.



使用特权

评论回复
35
machunshui|  楼主 | 2009-5-4 14:15 | 只看该作者

照你的描述,话痞子现象不会存在

"主监控站每发出一个全局地址时统信号,所有的站点就开始计时,每个站点都固定分配了一个时隙,它若有报文要发送,只能在属于自己的那个时隙里启动发言"


每个站都有自己的时隙,只能在自己的时隙里面发言.
具体实现当然要保证,在自己的时隙里面发言完毕.


使用特权

评论回复
36
学生D| | 2009-5-4 16:41 | 只看该作者

不是时间片,是“启动”时隙。

若是时分复用时间片,可就算不上LonWorks的精彩了。

是比时间片短得多的“启动”时隙,就好像很多“坐着的人”要同时发言,但是具体某个人,只能在自己的启动时隙里“站起来”发言,这个时隙是发言之人“站起来的时间”,而不是讲话的时间。LonWorks是几us一个时隙。软件模拟50us一个时隙够了吧。那么确定20个站点的讲话时间仲裁只要1ms 。

只要有一个人站起来(讲话),后面所有人的启动时隙都无效了,只有等当前之人讲话完毕,重新从头建立1ms 启动时隙。

这个协议需要站点侦听网络的,时分复用是不用侦听的。

使用特权

评论回复
37
machunshui|  楼主 | 2009-5-4 17:22 | 只看该作者

要是时钟基准帧带起始站地址,就不会有话痞子现象

要是时钟基准帧带起始站地址,就不会有"话痞子"现象.

把整个网络按照地址看成循环队列,

主战每次发送的时钟基准帧都带有可以第一个开始讲话的地址.

这样就不会有"话痞子"现象.

使用特权

评论回复
38
dengm| | 2009-5-4 20:21 | 只看该作者

精确定时应答: 可能能提高信道利用率

主发:    55H   ----- 所有站点等待, 3 bits时间内发 请求"精确定时应答"
                     BYTE, 所有中断关闭 
主:  等 1 bits 时间
主发:    0AAH  -----  精确定时BYTE

所有站点:  收到 0AAH 后, 在精确的1bit时间 应答  0ffh, 打开中断

主: 准确收到 0ffh 就表示: 所有站点 同意本机使用信道

主发:  0AAH   ---- 放弃信道

使用特权

评论回复
39
cooperate| | 2009-5-4 20:22 | 只看该作者

继续听课

使用特权

评论回复
40
学生D| | 2009-5-4 21:13 | 只看该作者

请教37楼兄长

  “主战每次发送的时钟基准帧都带有可以第一个开始讲话的地址.

这样就不会有"话痞子"现象.”
*********************************************************************
关键是主站怎么知道第一个开始讲话的站点“有数据要发送”?如果它无话可讲怎么办?


其实LonTalk协议虽然新颖创新,也容易理解:逻辑令牌环原理是众所周知。它的问题在于:如果系统中大部分站点无话可讲,那么它只传递空令牌,这是无效行为。一个空令牌至少3字节,9.6k比特率每个不讲话只传递令牌的站点占去至少3ms无效时间。若是10个节点不讲话则要浪费30ms。效率太低了。

能不能把空令牌由3ms化为30us? 这真是一种挑战。各类现场总线中很多都采用了“隐形令牌”技术。这就是不讲话的站点不发送显性令牌帧,只要静默30us,下一个接力站点就知道上一棒把接力棒令牌传给自己了,自己若仍然无话可讲,就再静默30us,下一棒自然也知道前2棒都无话可讲,60us以后接力棒——令牌就轮到自己手里,如若此站点要讲话,此时就可以“起跑了”。
再一个关键:这个起跑的站点讲完话以后,各个节点如何重新计算隐形令牌起点?各自都有创新,怎么简单怎么做吧。

这和过去的传统技术大不一样?好像冷漠兄为此写了一篇论文,叫《班长协议......》什么的。讲得清楚一点。
 

使用特权

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

本版积分规则