Contents
一.项目背景 (1)
二.死锁产生 (2)
工业制氧气方法三. 死锁检测 (3)
1). 查询方式的RS-485总线死锁检测 (3)rbd-312
2) 工作于CSMA/CD方式的RS-485总线死锁检测 (3)
四. 死锁的解除 (4)
2.无选择性地复位所有子站电路 (5)
五. 软硬件设计 (5)
eoa
1)硬件电路 (5)
2)软件流程图 (7)
六. 总结 (8)
七. 参考文献 (9)
一.项目背景
RS-485总线传送距离远、速度快、抗干扰能力强,是工业现场广泛应用的数字通信标准。RS-485总线是一种半双工通信标准,支持总线方式多点互连,使其成为集散控制系统
和现场总线控制系统中采用最多的通信和组网方法。采用RS-485总线连接的多个站点,
任一时刻只能有一个站点在“说”,其它站点只能处于“听”状态。如果有多个1个的站点在“说”,数据将在通信总线上碰撞,结果是处于接收状态的站点不能收到正确的数据。
在RS-485总线通信网中,必须控制好每个站点的“听、说”状态,即收发状态,以保证能及时、正确地传输数据。
RS-485总线通信模式由于具有结构简单、价格低廉、通信距离和数据传输速率适当等特点而被广泛应用于仪器仪表、智能化传感器集散控制、楼宇控制、监控报警等领域。
但RS485总线存在自适应、自保护功能脆弱等缺点,如不注意一些细节的处理,常出现通信失败甚至系统瘫痪等故障,因此提高RS-485总线的运行可靠性至关重要。
本文就485总线死锁现象的产生,监测和解决提出一种可行方法。
关键词:RS-485接口死锁检测死锁解除
二.死锁产生
蚀刻标牌
图1是最常见的RS-485接口。
在接收方式时,A、B为输入,R为输
出;在发送方式时,D为输入,A、B为
输出。
DE 驱动器输出使能。DE变为高电平时,
驱动器输出A与B有效;当DE为低电平
时,驱动器输出为高阻状态。当驱动器输
胸针设计出有效时,器件被用作线驱动器。而高阻
状态下,若RE为低电平,则器件被用作
线接收器。
死锁原因: 在RS-485总线通信系统中,挂在总线上的收发电路一般大于2个。使用图1
所示接收电路,如果系统中的某一个站点死机或出了问题,可能使单片机的P1.0口恒为“1”。其
发送器将长期占用通信总线,产生称为RS-485总线“死锁”的状态,其它所有站点的均无法使用通
信总线进行通信,这将导致整个通信系统崩溃。为了说明方便,把RS-485总线A线对地电压为称
废棉为VA,B线对地电压为称为VB;VA>VB时的死锁称为“1”死锁,VA<VB时的死锁称为“0”死锁。如果2个站点失控,其中一个是“1”死锁,另一个是“0”死锁,而系统无法及时解除该死锁状态,不
但各站点间无法正常通信而且会烧坏锁站点的RS-485接口芯片,引发更大的故障。
在RS-485总线通信系统中,通常设有个功能强、工作可靠的站点作为主站,其它的作为子站。
主站除了完成它的相关工作任务外,通常它还负责管理挂在RS-485总线上的其它子站。程序跑飞
是所有基于微处理器系统均需面对的普遍问题。在工业测控系统中,可靠、稳定地工作是第一位的。若同时赋予主站RS-485总线死锁检测与解除的软/硬件和在所有的子站中配置相关硬件,将可以有
效解决由于子站程序跑飞而引发的RS-485总线死锁问题。
三. 死锁检测
1). 查询方式的RS-485总线死锁检测
RS-485总线在发送数据时,允许同时接收刚发送的数据。RS-485总线通信系统如果工作于
查询方式,主站将不断地每隔一定时间轮询各个子部。只要轮询时间不太长,如轮询时间间隔<1min,则只须软件开锁就可以满足RS-485总线死锁检测要求。主站在轮询过程中,若检测到以下两种情况,就可以初步判为RS-485死锁:
(1)主站发送的数据与接收到的不相同;
(2)在轮询某个子站时,无响应或响应的数据不正确(可能是RS-485总线死锁或子站死机,也有
可能孩子站已退出运行)。
2) 工作于CSMA/CD方式的RS-485总线死锁检测
采用CSMA/CD通信方式的RS-485总线,主站一般不主动轮询每个子站。此方式下,主站可
以采用图2所示硬件来检测RS-485总线的死锁状态。在RS-485总线空闲时,要求信号线A至少
比信号线B高0.2V以上。只要使RS-485总线空闲时0.2V<VA-VB<3V,图2所示电路就可以正常检测RS-485总线死锁。当RS-485总线发生“1”死锁时,VA-VB约等于5V,光耦输出低电平拉低主站的INT1引脚。对于“0”死锁检测,只需依靠主站的RS-485接口电路就可实现。在“0”死
锁时,RS-485接口电路输出低电平拉低主站的RXD引脚。RS-485总线空闲时,INT1及RXD引脚
为稳定的高电平状态。正常收发数据地,INT1及RXD引脚在一个字节内至少出现一次高低电平交
替交化;“1”死锁时,INT1长期处于低电平状态,“0”死锁时,RXD长期处于低电平状态。根据以
上特点只需用软件检测INT1和RXD的低电平持续时间就可判断RS-485总线的状态。
检测到INT1或RXD低电平后,通过软件用以下两个软件之一来判断RS-485总线“1”死锁或“0”死锁(假定启动发送数据后,两字节间的空隙时间小于发送1字节时间):
(1)INT1低电平持续时间>正常发送2字节时间,判为RS-485总线“1”死锁。
(2)RXD低电平持续时间>正常发送2字节时间,判为RS-485总线“0”死锁。
四. 死锁的解除
RS-485总线死锁往往是由于子站的微控制器程序跑飞,使得RS-485发送器的发送使能DE
恒为高电平引起的。出现这种情况只需给相应的子站复位一下,让它重新执行初始化程序始可解决。在检测到RS-485总线死锁后,如果各子站的软/硬件无问题,可以采用复位程序跑飞的子站来解除
死锁。以下介绍两类可以由主站自动复位子站的硬件电路。该电路适用于RST引脚高电平有效时复位的单片机,如国内广泛应用的51系列单片机。对于RST引脚低电平有效时复位的单片机则须
将电路的逻辑取反。
1.有选择性地复位死锁子站电路
图3是具有选择性的复位死锁子站电路,是一种巧妙的解除通信总线死锁状态设计。它利用了RS-485总线死锁,则对应死锁子站的发送使能DE为“1”的特点,在子站中只用了少量的硬件开
销(1个与非门、1个电阻和1只三极管),即实现了有选择性的复位死锁子站的电路。在正常工
作时,主站的P1.1置为“0”,此时不管各个子站的DE为何状态,它们的与非门输出均为高电平,三
极管T1截止,RST为低电平,不会复位任何子站。当检测到RS-485总线死锁时,主站只需将P1.1
置为“1”,只有DE为“1”子站的与非门输出低电平,三极管T1导通,RST为高电平,相应的子站
被复位。其它子站的与非门输出高电平,不会被错误地复位。
2.无选择性地复位所有子站电路
图4是一个无选择性复位子站的电路。它由主站的P1.1驱动,通过屏蔽电缆引到各子站的外复位电路T1的基极。正常运行时,主站置P1.1为“1”,此时它不影响各子站原有的复位功能。当主站检测到RS-485总线死锁或复位各子站时,只须将P1.1置为“0”,所有挂在复位总线上的T1均导通,RST输出高电平,各子站均被无条件复位
五. 软硬件设计
1)硬件电路