打印

RS485:鱼和熊掌不可得兼

[复制链接]
5710|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
myfaith|  楼主 | 2009-9-16 23:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
485挂有几百个节点,通过485集线器连接到PC.因为节点的信息都要求比较实时,所以主机PC需要连续不断的以尽量快的波特率及速度轮询.而主机询问任何一个节点都会引起所有节点的串口中断,所以相当于每个节点都时时刻刻的不断被中断,降低节点的系统效率(节点需要频繁的处理串口中断,不管询问的是不是自己).因主机的询问必须得到节点的应答,这样须使串口中断拥有较高的优先级,频繁的高优先级的串口中断可能还会影响MCU处理其它一些需要精确定时的事情(解码).
如何解决轮询的实时性与尽量减少对节点MCU的中断这两者之间的矛盾?
51的串口方式3因区分地址和数据可以减小上述矛盾,但不清楚PC串口能否处理9位方式.最多也只能寻256个节点.

请有经验者指点一二

相关帖子

沙发
z_no1| | 2009-9-17 08:04 | 只看该作者
上层节点弄个MCU做网关,先在自己的小网里面把节点的数据收上来,然后打包发给顶层主控。

使用特权

评论回复
板凳
mohanwei| | 2009-9-17 08:32 | 只看该作者
还可以用串口带自动地址识别功能的单片机。

使用特权

评论回复
地板
myfaith|  楼主 | 2009-9-17 10:03 | 只看该作者
上层节点弄个MCU做网关,先在自己的小网里面把节点的数据收上来,然后打包发给顶层主控。
z_no1 发表于 2009-9-17 08:04

节点和主机需要相互交互,当主机询问节点,节点发送信息给主机后后还需要及时收到主机根据具体情况返回的信息,如果中间增加一级网关因节点不能直接与主机"对话"而不能完成这个过程.比如网关询问自己这一子网内的节点时,并不能对子网内的节点返回信息,因为这个信息只有主机PC才知道根据接收到的数据决定返回什么信息.如果等到主机询问到自己的这个网关,得到该子网的节点数据并通过网关再返回给节点信息,那这个时间长度将不确定的,因为主机处理其它网关的时间不确定.这样不能使节点发送数据后能及时的得到主机返回信息.

使用特权

评论回复
5
e掾木| | 2009-9-17 10:42 | 只看该作者
51是不是有点太慢了,我用了16MIPS的16位MCU来做,没发现任务很拥挤现象。每一次轮询时间在10mS左右,MCU仅仅是响应一次地址查询,感觉压力不大。如果是1mS周期轮询,那就不是20MIPS以下的MCU能胜任的了。

使用特权

评论回复
6
e掾木| | 2009-9-17 10:43 | 只看该作者
另:问大家一个问题,带地址识别的MCU如何跟PC通讯呢,PC不支持9位数据。

使用特权

评论回复
7
chunyang| | 2009-9-17 10:50 | 只看该作者
想要兼得的话,需要在网络结构上下功夫,将网络拆分成多个网段,每个网段用一部“主机”(中间层节点)管理,所有“主机”又都作为PC的下级节点组成所谓“树形”网络拓扑,对终端节点而言,这相当于“并行”轮询了,中间层节点越多,轮询效率越高,但额外的成本支出越大,需兼顾一下。

使用特权

评论回复
8
myfaith|  楼主 | 2009-9-17 11:00 | 只看该作者
7L chunyang,对于这个办法请参见4L解释

使用特权

评论回复
9
mohanwei| | 2009-9-17 11:05 | 只看该作者
最好还是加个“网关”,毕竟再高级的PC机,在串口通信方面也是很难和单片机比实时比速度的(受系统,运行程序数量、种类,个人编程水平等因素影响)

使用特权

评论回复
10
myfaith|  楼主 | 2009-9-17 11:44 | 只看该作者
加网关确实是个好办法,但是对于主机需要及时回复从机的情况却存在如4楼所述的问题

使用特权

评论回复
11
chunyang| | 2009-9-17 12:44 | 只看该作者
这个问题不难解决,这里不用“网关”这个词,是因为网关的功能太薄弱,如此只能组成形式上的树形网络但功能上并无不同,要靠合理的协议编制,PC和中间节点,中间节点和终端节点间跑的协议不同,只要协议合理,问题即可解决且是唯一之道,楼主如果对“通讯”有足够深刻的理解的话就知道该怎么办了。

使用特权

评论回复
12
84335262| | 2009-9-17 14:11 | 只看该作者
如果数据量不是太大,可以用网关+收集数据的办法。假设PC查询下位机是为了得到下位机50个数据中的一个,每个网关管理20个下位机。那就在网关里开辟个1k的内存空间把这20个下位机的数据先全部存里头。PC爱哪个取哪个走,网关的数据轮番刷新,先进先刷。

使用特权

评论回复
13
渤海三叠浪| | 2009-9-17 14:29 | 只看该作者
各位!各位!

我目前还处于盲目崇拜阶段----------只要chunyang说的,我就拥护!!

使用特权

评论回复
14
hyhjjg| | 2009-9-17 14:31 | 只看该作者
还是使用DEVICE NET 吧,速度高的了,不过开发起来比较费周折

使用特权

评论回复
15
冷漠| | 2009-9-17 15:04 | 只看该作者
本帖最后由 冷漠 于 2009-9-17 15:10 编辑

咱们一直在这想办法用几十年前的异步方式解决多点通信问题,也没注意网上调研一下看看世界单片机组网通信水平都走到哪了。

51内核带通信控制器的单片机1984年Intel公司就有了。同步通信方式,......可以到航天部五院三华公司调研一下,他们把80152做成通信卡插在PC机上,这个主机可以带200个单片机80152从站,当然更没有LZ说的无关地址会中断所有节点的问题。我们用它的卡按Intel80152技术手册实现了令牌环形网,主站一次轮询就触发所有从站相应,IBM的环形网技术规程的轮询效率是目前技术最高的吧。

    有兴趣再看看现场总线技术的书,中国并不一定非要购买国外的FB装置,多少万$一个节点,欺负咱们不懂呢。现在中国所有的名牌理科重点大学,都被外国各个FB公司进驻创办了现场总线实验室。连清华也有了美国XXXX现场总线实验教学实验室。接下来是北航(PHiliPs),哈工大(  ),浙大(  )......

就因为我们只会用UART串口来“想办法”实现现场总线技术?

使用特权

评论回复
16
mohanwei| | 2009-9-17 16:44 | 只看该作者
现场总线在工业场合用的很普遍……不过对于楼主的要求,还是485物美价廉。

使用特权

评论回复
17
bitter| | 2009-9-17 20:34 | 只看该作者
很久就看到德国一个地铁通讯的系统好像叫ATS,使用RS485+CDCA (载波监测冲突避免)的机制实现了多主从的通讯.

使用特权

评论回复
18
myfaith|  楼主 | 2009-9-17 21:23 | 只看该作者
LS详细说说看

使用特权

评论回复
19
冷漠| | 2009-9-17 21:44 | 只看该作者
回16楼。现场总线8个国际标准中,好像每个都能配置成RS485主从子网或者像楼上说的多(段)主从通信形式。最典型的多主随机访问机制的CAN总线,也能配置成主从准RS485总线访问形式。

还有,国内早就有人把51多机通信中的rs485总线驱动接口芯片改为CAN接口驱动器,就能实现类似CAN那样的多主随机访问机制了。那样解决LZ的问题不是很简单吗。

1、PC机接收总线上所有的数据。任何UART都是可以设置为11位字符通信的。
2、PC机设置第9位奇偶校验位设为“恒0”,这样总线上的数据帧不会造成其它单片机中断。——它们设自己的SM2=1。
3、PC机发送时,自己的第9位奇偶校验位设为“恒1/恒0”是自己的意愿,单片机一方按照多级通信方式配置。

4、LZ不知想通了没有,就是PC机UART是有第9位的,即奇偶校验位,奇偶校验位可以任意设置,—— 1,0,奇校验,偶校验,发送接收时设为何值你自己编程设置就完了。书上有现成的PC机主站和单片机从站多机通信的例子。没那么复杂,只是我们没想到而已。

使用特权

评论回复
20
84335262| | 2009-9-18 09:30 | 只看该作者
19# 冷漠
我觉得是你没有弄懂楼主的意思。楼主是说PC以最大的速度在查询下位机。下位机在查询的时候都要响应PC。这样影响下位机处理其他事情。但是PC每次查询的时候都只针对一个下位机,其他的下位机都是白响应的。是故有没有什么好的办法让其他下位机不响应。而你说的令牌环也好,can也好,都避免不了响应的问题;8位9位11位是通讯协议问题,更无关。
不过我觉得:如果不等待接收,只是接收完中断的话,下位机比较下地址也花不了什么时间啊……

使用特权

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

本版积分规则

68

主题

468

帖子

0

粉丝