打印

RS485组网方法

[复制链接]
12899|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aolin|  楼主 | 2008-12-8 18:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有几十个设备通过RS485互联组成一个网络,请教一个问题:有什么最简单的方法能实现设备两两之间的信息交换?
是不是加个服务器最简单?

相关帖子

沙发
hab2000| | 2008-12-8 18:32 | 只看该作者

?????

信息交换?
这么大的题目啊?!
信息量多大?
要用RS485信息量就不会大吧?
两个设备之间信息交换与服务器有直接关系?
糊涂了!

使用特权

评论回复
板凳
ayb_ice| | 2008-12-8 20:44 | 只看该作者

单主就简单了

多主就很麻烦,单主可以参考51的多机通信

使用特权

评论回复
地板
aolin|  楼主 | 2008-12-9 08:21 | 只看该作者

具体一点讲

举个简单例子:
32台设备用RS485互联(应该说是最多允许32台联入,不一定有32台,因为RS485的规范只允许32台),每台设备是对等的,每台设备需要知道其他设备的当前状态,比如需要知道其他设备是运行的,还是停止的,还是在做其他的什么事情等等,什么方法最简单?

使用特权

评论回复
5
chunyang| | 2008-12-9 08:43 | 只看该作者

轮询制是485等低速网络最常用的方法

去通讯技术栏目看老帖

使用特权

评论回复
6
ljm810010| | 2008-12-9 10:36 | 只看该作者

我顶死你了XWJ,大家要good good study

使用特权

评论回复
7
aolin|  楼主 | 2008-12-9 10:41 | 只看该作者

想起来简单,实现起来可不容易

就拿楼上的第一种方法来说:
1、等别人说完了,再看大家都不说,“那我来说两句...”
--这就是突发方式,相信我说话时没人会跟我抢吧?
--要是这时刚好两个人同时开口说话呢?那当然大家都听不清啦,要么“你先说”,要么就等下再说啦

等别人说完了,当你要“说两句”的时侯,别人也要“说两句”,485是半双工的,你怎么判断别人也准备“说两句”呢?所以这个方法根本行不通。

我还是觉得轮询的方法较可靠,但轮询需要一个同步机制,几十个设备,都是对等的,从谁开始轮起?想来想去,还是觉得要加个服务器,协议上才是最简单的,设备之间的通讯都须透过服务器来进行。

使用特权

评论回复
8
xwj| | 2008-12-9 10:53 | 只看该作者

每次发送前判断忙并随机延时再判断,然后加上应答、重发

通讯程序是个系统的整体设计问题,不能单靠某一个设备

基于服务器的设计,能够减小冲突的可能,但也可能因为服务器、服务器线路问题而造成整个系统的瘫痪


但不管采用那种方式,检验、应答和重发机制都是必须的,否则终究只能是“实验室”产品。

使用特权

评论回复
9
xwj| | 2008-12-9 10:59 | 只看该作者

8楼对轮询理解有误

轮询不应该由从设备发起,而应该由主机(服务器)发起哦

使用特权

评论回复
10
yewuyi| | 2008-12-9 11:14 | 只看该作者

一般都是2方式。。。

使用特权

评论回复
11
aolin|  楼主 | 2008-12-9 11:35 | 只看该作者

轮询当然需要服务器发起了

所以在我所说的"对等”设备中,轮询实现不了,这才需要加个服务器。
另外服务器瘫痪了,也只是通讯瘫痪而已,就等于通讯线不通而已,各个分设备还是可以各干各的,何来整个系统就瘫痪?

使用特权

评论回复
12
xwj| | 2008-12-9 11:47 | 只看该作者

呵呵,“各干各的”就回到方式1了

那么“轮询”就没有什么意义了,只是个功能性的巡检罢了

使用特权

评论回复
13
twz8858877| | 2008-12-9 12:18 | 只看该作者

是否可以这样

顺序发话,第一个说完了,第二个开始,数据包中应包含当前说话的是谁,对谁说的,是否需要对方回应;如需要回应则下一个说话的等待回应后开始,在设定时间内没有回应则判断回应方故障,下一个说话的开始,下下个在设定时间内判断下一个是否说话,如有则等待它说完后开始,如无则认为下一个故障,下下个启动,依次类推,至最后一个再返回第一个

使用特权

评论回复
14
hab2000| | 2008-12-9 12:46 | 只看该作者

折中一下。

1、所有设备对等,如果要求通信可以有序进行,前提是这些设备绝大部分时间不需要通信,否则网络就堵塞了!
2、增加1个I/O仲裁,如果舍不得这个I/O的话,也可以通过硬件处理检测RXD端,例如低电平表示有设备正在发送;
3、协议规定发送结束延时一定时间,便于监测网络空闲状态;

例如有20个对等设备,如果期望每个设备1秒钟可以进行一次通信的话,意味着每次通信时间及间隔不能大于20mS,如果采用9600的比特率几乎无法交换多少信息,势必要求把比特率提高,例如115.2k,同时要求每个设备的MCU主频尽量大,常规的MCU恐怕难于胜任。

使用特权

评论回复
15
耕在此行| | 2008-12-9 20:04 | 只看该作者

依次传递

1 网络待命状态:所有设备已安装好,但各设备之间的联络未开始.
2 通讯启动.随便从一台设备开始启动整个网络之间的联络.这个需要人为.
3 第一个设备通讯完毕,发一串结束标志帧.表示下一个可以开始.
4 下一个如果如果无数据传递,则直接发一串结束标志帧.
  表示下下个可以开始.
5 在第一个设备收到最后一个设备结束标志帧后则重新开始新一轮.
呵呵 这个不需要服务器.有问题欢迎大家指正.

使用特权

评论回复
16
ayb_ice| | 2008-12-9 21:25 | 只看该作者

轮询可以的

USB其实也是这样的

使用特权

评论回复
17
John_Lee| | 2008-12-9 22:16 | 只看该作者

485上跑I2C

使用特权

评论回复
18
冷漠| | 2008-12-9 22:25 | 只看该作者

为什么不能用现场总线协议,像CAN?

不明白高手们的意思。

现今所有的通信技术问题,都是别人早就研究过的。这么简单的网络协议,也要众多高手从头研究想办法?那世界上的网络技术大概是太落后了?

随便看一本现场总线的书就行了。各种各样的访问协议。很多协议都是用发明人的名字流传于世。惊讶于这些有心人,他们怎么想的到?其实很简单的方法,只是我们想不到罢了。否则怎么国家投资多少亿,也没弄出个现场总线中国标准出来。

举例:
1:RS-485本身就是有个主站分发令牌的。即使需要从站之间通信,也要拿到令牌后才能进行。

2、还可以按令牌总线方式进行,像16楼说的那样。谁启动令牌当然是早就约定好了。设置一个网络监视节点在链路不正常的时候恢复产生令牌就行了。监视节点出故障怎么办?看看现场总线怎么做的,3个备份监视节点是小意思。(

3、最简单的多主访问协议CAN,单片CPU+CAN通信控制器的芯片多得是,价格也不高。keil Cx51/uV2开发环境支持。2节点之间想发送就发送,MAC层自动仲裁,还用自己推敲思索编用户层程序:怎样解决碰撞/仲裁问题?——技术倒退了30年。

4、再看看LonWorksS协议是怎么想出来的?同样是轮询,它就无懈可击。

使用特权

评论回复
19
wswh2o| | 2008-12-10 14:22 | 只看该作者

用can最合适了

使用特权

评论回复
20
耕在此行| | 2008-12-10 14:27 | 只看该作者

呵呵 我不是专业网络的

我想上面的大部分也不是专业搞网络的
大家只是想到什么就说什么。
不要说我们不专业,不明白什么现场总线协议。

使用特权

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

本版积分规则

101

主题

396

帖子

2

粉丝