打印

【求助】请各位版主,热心人等来看看!RS485掉线等故障!

[复制链接]
11131|64
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
emailli|  楼主 | 2007-8-22 08:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【系统功能】
主要是用来做一个老化设备。工人只需要将被老化的设备插上,而节省了复杂的接线过程。
PC机用来记录老化数据。
LPC2131和LPC922通信用来收集各个LPC922通过AD获得的信息,然后转发给PC机。


【系统构成】 
系统为三级结构。
第一层是PC机。
第二层是LPC2131,最多有16个2131和PC同时通过RS485连接。
第三层是LPC922,最多有16个LPC922和一个LPC2131通信,也是RS485连接。

RS485的速度均为9600波特率。

也就是说,最终一台PC一个串口可以同时获取16*16=256个LPC922内的信息。
RS485转换芯片均为75176。
PC机和LPC2131目前连线不超过2米,目前一台PC仅和一个LPC2131通信,其他的LPC2131还未同时接上。
LPC2131和LPC922通信线是在电路板上,我们做了一个很大的电路板,RS485通信总线分两排从电路板上穿

过。在其中一端接上,形成一个右框形。

16个LPC922分布在总线旁边。LPC922由以下几个模块组成:
电源+AD+DA+RS485。
LPC2131由以下几个模块组成:
电源+UART0+UART1。

整个电路板的电源通过一个220转0-30V,5A的开关电源提供24V输入。该开关电源型号是APR-3005。
每个模块上使用一个MC34063将该24V降压到9.5V,然后经过LM7805降压到5V给模块供电。
LPC922和LPC2131的3.3V是经过LDO将5V降压到3.3V。使用的芯片是NCP500SN33。
各个不同电源之间的GND均通过跳线焊接。

之所以这样设计,是因为DA输出需要配电24V输出。而LM7805用24V输入发热太大。

RS485电路TTL电平侧均没有设计隔离。不过由于LPC922和LPC2131均为3.3V供电的系统。
而RS485为5V供电。
差分侧有A+上拉到VCC+5V,B-下拉到GND设计。
RS485芯片的发送端DE有下拉设计。
RS485的5V系统的GND和3.3V系统的GND通过一个0Ω的电阻连接。

【当前问题】
16台LPC922同时和LPC2131通信的时候。正常通信2-3小时没有任何问题。
2-3小时候过后,随机出现16台LPC922中间任意一台掉线的现象。
LPC922采用独立的RX,TX中断入口。

【已经测试过的方案】
1、怀疑LPC922长时间通信后死机。
    增加程序运行指示灯控制。如果程序正常运行,则不停的闪烁。
    测试发现,当模块LPC922掉线以后,他的程序运行指示灯闪烁正常。
2、怀疑RS485芯片失效。
    当模块掉线以后,使用示波器观察RS485芯片的RXD引脚,有正常的数据波形。
3、由于RS485是一个半双工通信。怀疑是否在发送状态和接收状态的切换中出现问题,导致一直处于发送状

态,所以即使有RXD信号,也不进入中断读取信息。
    增加发送状态和接收状态的强制切换,如果发送状态持续超过3S,则强制切换到接收状态。
    测试结果表明,增加这样的处理依然存在掉线的情况。同时掉线后用示波器检查RS485发送使能引脚,
    该引脚已经是高电平,可以从某种程度上证明,已经除以接收状态了。
4、增加串口接收中断指示灯。只要是串口有中断,则将对应的指示灯取反操作。
    测试表明,当模块掉线以后,串口接收指示灯不再闪烁。
    而此时程序运行灯闪烁正常。
所以,怀疑此时是否出现这样的状况,LPC922主程序运行没有死机,而串口部分死机不再通信?
5、为了进一步的检测是否4的结论成立,开启了LPC922的内部看门狗。测试表明,掉线后不能重新
回来,也可以从某种程度上证明,内部看门狗没有产生复位动作。
因为当模块掉线以后,如果我用镊子将LPC922的复位引脚碰一下GND,让LPC922复位的话,LPC922
是可以重新通信的。
6、为了检测总线上是否存在误码传输,在通信协议内的校验检查部分增加了一个指示灯控制。
如果校验码不正确,则控制一个指示灯取反。
测试表明,运行一段时间以后,误码开始发生。但误码也不是很频繁。结论是存在误码。

【曾经有效的改进过程】
最开始,掉线很频繁的发生。因为最开始的时候,各个电源模块之间的GND不是通过跳线焊接起来的。
是通过磁珠将各个电源之间的GND连起来的。经过更换成跳线连接后,掉线一度不再发生。让我以为问题
已经找到。可是经过细致的测试,发现运行2-3小时后还是会随即的发生16个模块中某一个掉线的情况。

【求助部分】
请各位分析原因所在。
1、程序原因?
2、硬件原因?电源、RS485总线设计?
3、芯片原因?LPC922、75176?

请各位网友来一下头脑风暴,说出各位的见解!
提出解决方案,最好给出一点解释!好让大家心里有底。

谢谢!
                                                     网友:emailli

相关帖子

沙发
emailli|  楼主 | 2007-8-22 08:59 | 只看该作者

增加一点

解决方案曾经增加过 RS485回路匹配电阻,采用的是100Ω,因为没有120Ω的电阻。

但是依然不能解决问题。

使用特权

评论回复
板凳
emailli|  楼主 | 2007-8-22 09:09 | 只看该作者

通信强度

总的来说,RS485总线上的通信强度还是很大的。
因为采用的软件识别地址的方法。
每一条在总线上传输的数据都会被每一个LPC922和LPC2131接受到。
对每一帧数据都要进行解码。
传输的协议采用的是标准的MODBUS协议。

虽然如此,我还是尽力的将每一帧数据之间的间隔时间隔开了。大概500-800mS才会在总线上传输一次数据。

使用特权

评论回复
地板
zhaoyu2005| | 2007-8-22 09:19 | 只看该作者

这位道友,既然用34063了,为何不直接降到5V?

怀疑是你的LPC922的串口设置参数被改或从机地址被改,建议过一段时间初试化一下串口或从机地址看问题是否解决

3、由于RS485是一个半双工通信。怀疑是否在发送状态和接收状态的切换中出现问题,导致一直处于发送状态,所以即使有RXD信号,也不进入中断读取信息

这个理解有误,485是半双工的,但是你的LPC922是全双工的吧,只要RXD送正常的串行数据它就接收并产生中断,并且485在发送状态时,RXD是没有数据的,同理处于发送状态是即使TXD上有数据也发不出去,因为内部有切换电路

总线上有误码是正常的,没有一点误码反倒不正常了,但是只要误码过后有正常的码,你的机器就应该能接收,既然别的机器能正常接收说明线路通讯还是基本正常的。

使用特权

评论回复
5
zhaoyu2005| | 2007-8-22 09:23 | 只看该作者

不知道你这个系统是谁设计的

真有钱,还用16个LPC2131,一个LPC2131都不用就能达到256个或更多,就一台PC加485转接头就可以直接挂PC922了

使用特权

评论回复
6
emailli|  楼主 | 2007-8-22 09:30 | 只看该作者

受制与RAM空间

这个理解有误,485是半双工的,但是你的LPC922是全双工的吧,只要RXD送正常的串行数据它就接收并产生中断,并且485在发送状态时,RXD是没有数据的,同理处于发送状态是即使TXD上有数据也发不出去,因为内部有切换电路

这里没有看明白!?
RS485的发送接收切换控制就是通过DE,RE控制的。而DE,RE是我的单片机控制的。

让单片机处于半双工的状态。只会让系统更加可靠,而不回导致发生无法收到数据的情况吧。

从机地址被改,也不会让LPC922不进入中断的。因为无论是发给哪个从机的数据,每个从机都需要接收,然后通过解码判断是否发送给自己的数据。如果是发送给自己的数据,则回复,不是则返回接收状态。

串口参数被改,这个可能性也许存在,下一步做做这个试验。

使用特权

评论回复
7
emailli|  楼主 | 2007-8-22 09:33 | 只看该作者

RS485能够挂256个节点?

不认为RS485总线上能够挂256个节点以上。
事实上,挂32个节点都很难。

而我们的这个系统是希望能够挂足够多的LPC922。

我们的LPC922是用来老化其他设备的。

要保证每天的老化量满足要求。

所以就做了一个中继!

使用特权

评论回复
8
lixun00| | 2007-8-22 09:42 | 只看该作者

是比较有钱。没仔细看。有几点疑问。

1。pc机做为主机,查询单片机?
2。是半双工还是全双工?

使用特权

评论回复
9
mohanwei| | 2007-8-22 09:56 | 只看该作者

软件协议是不是太复杂了,

有些考虑不到但是会引起“死机”的地方?


“增加程序运行指示灯控制。如果程序正常运行,则不停的闪烁。
    测试发现,当模块LPC922掉线以后,他的程序运行指示灯闪烁正常。”

使用特权

评论回复
10
emailli|  楼主 | 2007-8-22 09:59 | 只看该作者

软件协议是MODBUS

软件协议是采用的标准的MODBUS,应该不复杂也不会考虑不周全导致掉线的!
毕竟是被广泛使用的协议了。

同时运行指示灯只是一个IO的取反控制。
闪烁时间是通过定时器提供的10ms主节拍时钟计数得到的。

使用特权

评论回复
11
zhaoyu2005| | 2007-8-22 10:03 | 只看该作者

我以为就256个呢

其实485总线能挂32个设备是以前的器件,75176没用过,现在的器件接收需要的驱动电流小,MAX3082能驱动256的接收器件,当然还有其他的芯片也可以,打个对折驱动128个没问题了,再说你的通讯速率低距离也不远,我们用PC加转接头带13个设备,300~400米,很正常,用的是MAX485或75LBC184,所以每一个LPC2131带16个终端太少了,浪费了

使用特权

评论回复
12
lixun00| | 2007-8-22 10:04 | 只看该作者

同时掉线后用示波器检查RS485发送使能引脚,还是为高电平?

使用特权

评论回复
13
lixun00| | 2007-8-22 10:07 | 只看该作者

lz应是挂16个吧?它分成16路,每路16个。。。

第二层是LPC2131,最多有16个2131和PC同时通过RS485连接。
第三层是LPC922,最多有16个LPC922和一个LPC2131通信,也是RS485连接

使用特权

评论回复
14
救火车| | 2007-8-22 10:19 | 只看该作者

贴子还没看,先顶了再说。

置顶10天

使用特权

评论回复
15
emailli|  楼主 | 2007-8-22 10:30 | 只看该作者

不好意思!打错了了一个地方。

“同时掉线后用示波器检查RS485发送使能引脚,还是为高电平?”

应该是掉线后用示波器检查RS485发送使能引脚!

发送DE引脚测试的电平是低电平。

也就是说75176处于接收状态。

To 救火车:

很感谢置顶。

不过更加希望能够给出点建设性的建议。好让我能够找出这个细微的BUG。

虽然细微,但是这个BUG很致命。

使用特权

评论回复
16
emailli|  楼主 | 2007-8-22 10:32 | 只看该作者

置顶对我来说很奇怪哦

都没有注意到我的求助帖子居然被置顶了

我翻了两页都没有找到帖子,

还以为被删了呢!

o(∩_∩)o..回到首页再看,居然就在顶上了。

使用特权

评论回复
17
gjg191| | 2007-8-22 10:44 | 只看该作者

dd

建议lz 加长通讯时间看看是否会多台出现同一问题.在通讯5~6小时后是否还有通讯不正常的.

使用特权

评论回复
18
emailli|  楼主 | 2007-8-22 10:55 | 只看该作者

如果发生通信失效后。

不掉电,也不针对具体一台复位操作,继续工作。

我最多的时候发现上电5-6个小时候后,有12台有3台掉线。

现在测试的时候都不敢接16个LPC922。怕总线驱动芯片受不了。

同时拼接起来的电路板也太大。不方便工人使用。

我们是每4个LPC922放一快电路板。可以一块一块的拼接起来。

现在测试的时候只用到了12个LPC922。也就是还只用了3快电路板。

使用特权

评论回复
19
emailli|  楼主 | 2007-8-22 10:56 | 只看该作者

关键是随机性

现在还有一个困扰我的现象就是随机性。

有时候是地址为1的掉线,有时候是地址为2的掉线,有时候是地址为3的掉线。

总之,测试发现,掉线没有规律。随机发生。

使用特权

评论回复
20
lixun00| | 2007-8-22 11:01 | 只看该作者

你这个中间加了一个中继,lz可不可以先。。。

pc和中继通信,确定中继没问题,再查终端。
::每一条在总线上传输的数据都会被每一个LPC922和LPC2131接受到。??
看来是256个。

使用特权

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

本版积分规则

98

主题

1172

帖子

55

粉丝