RS485总线的死锁检测与解除.doc

上传人:laozhun 文档编号:3622980 上传时间:2023-03-14 格式:DOC 页数:6 大小:25.50KB
返回 下载 相关 举报
RS485总线的死锁检测与解除.doc_第1页
第1页 / 共6页
RS485总线的死锁检测与解除.doc_第2页
第2页 / 共6页
RS485总线的死锁检测与解除.doc_第3页
第3页 / 共6页
RS485总线的死锁检测与解除.doc_第4页
第4页 / 共6页
RS485总线的死锁检测与解除.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《RS485总线的死锁检测与解除.doc》由会员分享,可在线阅读,更多相关《RS485总线的死锁检测与解除.doc(6页珍藏版)》请在三一办公上搜索。

1、RS-485总线的死锁检测与解除作者:(广州)增城市电力局 黄沛芳 来源:单片机与嵌入式系统应用 摘要:针对RS-485接口收发电路的特点,讨论RS-485总线在Polling和CSMA/CD通信方式中死锁检测和解除死锁的方法。该方法同样适用于RS-422接口。 关键词:RS-485接口 死锁检测 死锁解除 RS-485总线传送距离远、速度快、抗干扰能力强,是工业现场广泛应用的数字通信标准。RS-485总线是一种半双工通信标准,支持总线方式多点互连,使其成为集散控制系统和现场总线控制系统中采用最多的通信和组网方法。采用RS-485总线连接的多个站点,任一时刻只能有一个站点在“说”,其它站点只能

2、处于“听”状态。如果有多个1个的站点在“说”,数据将在通信总线上碰撞,结果是处于接收状态的站点不能收到正确的数据。在RS-485总线通信网中,必须控制好每个站点的“听、说”状态,即收发状态,以保证能及时、正确地传输数据。 图1是最常见的RS-485接口。在RS-485总线通信系统中,挂在总线上的收发电路一般大于2个。使用图1所示接收电路,如果系统中的某一个站点死机或出了问题,可能使单片机的P1.0口恒为“1”。其发送器将长期占用通信总线,产生称为RS-485总线“死锁”的状态,其它所有站点的均无法使用通信总线进行通信,这将导致整个通信系统崩溃。为了说明方便,把RS-485总线A线对地电压为称为

3、VA,B线对地电压为称为VB;VAVB时的死锁称为“1”死锁,VAVB时的死锁称为“0”死锁。如果2个站点失控,其中一个是“1”死锁,另一个是“0”死锁,而系统无法及时解除该死锁状态,不但各站点间无法正常通信而且会烧坏锁站点的RS-485接口芯片,引发更大的故障。 在RS-485总线通信系统中,通常设有个功能强、工作可靠的站点作为主站,其它的作为子站。主站除了完成它的相关工作任务外,通常它还负责管理挂在RS-485总线上的其它子站。程序跑飞是所有基于微处理器系统均需面对的普遍问题。在工业测控系统中,可靠、稳定地工作是第一位的。若同时赋予主站RS-485总线死锁检测与解除的软/硬件和在所有的子站

4、中配置相关硬件,将可以有效解决由于子站程序跑飞而引发的RS-485总线死锁问题。 一、RS-485总线死锁检测 1.查询方式的RS-485总线死锁检测 RS-485总线在发送数据时,允许同时接收刚发送的数据。RS-485总线通信系统如果工作于查询方式,主站将不断地每隔一定时间轮询各个子部。只要轮询时间不太长,如轮询时间间隔1min,则只须软件开锁就可以满足RS-485总线死锁检测要求。主站在轮询过程中,若检测到以下两种情况,就可以初步判为RS-485死锁: (1)主站发送的数据与接收到的不相同; (2)在轮询某个子站时,无响应或响应的数据不正确(可能是RS-485总线死锁或子站死机,也有可能孩

5、子站已退出运行)。 2.工作于CSMA/CD方式的RS-485总线死锁检测 采用CSMA/CD通信方式的RS-485总线,主站一般不主动轮询每个子站。此方式下,主站可以采用图2所示硬件来检测RS-485总线的死锁状态。在RS-485总线空闲时,要求信号线A至少比信号线B高0.2V以上。只要使RS-485总线空闲时0.2VVA-VB正常发送2字节时间,判为RS-485总线“1”死锁。 (2)RXD低电平持续时间正常发送2字节时间,判为RS-485总线“0”死锁。 二、RS-485总线死锁解除 RS-485总线死锁往往是由于子站的微控制器程序跑飞,使得RS-485发送器的发送使能DE恒为高电平引起

6、的。出现这种情况只需给相应的子站复位一下,让它重新执行初始化程序始可解决。在检测到RS-485总线死锁后,如果各子站的软/硬件无问题,可以采用复位程序跑飞的子站来解除死锁。以下介绍两类可以由主站自动复位子站的硬件电路。该电路适用于RST引脚高电平有效时复位的单片机,如国内广泛应用的51系列单片机。对于RST引脚低电平有效时复位的单片机则须将电路的逻辑取反。 1.有选择性地复位死锁子站电路 图3是具有选择性的复位死锁子站电路,是一种巧妙的解除通信总线死锁状态设计。它利用了RS-485总线死锁,则对应死锁子站的发送使能DE为“1”的特点,在子站中只用了少量的硬件开销(1个与非门、1个电阻和1只三极

7、管),即实现了有选择性的复位死锁子站的电路。在正常工作时,主站的P1.1置为“0”,此时不管各个子站的DE为何状态,它们的与非门输出均为高电平,三极管T1截止,RST为低电平,不会复位任何子站。当检测到RS-485总线死锁时,主站只需将P1.1置为“1”,只有DE为“1”子站的与非门输出低电平,三极管T1导通,RST为高电平,相应的子站被复位。其它子站的与非门输出高电平,不会被错误地复位。 2.无选择性地复位所有子站电路 图4是一个无选择性复位子站的电路。它由主站的P1.1驱动,通过屏蔽电缆引到各子站的外复位电路T1的基极。正常运行时,主站置P1.1为“1”,此时它不影响各子站原有的复位功能。

8、当主站检测到RS-485总线死锁或复位各子站时,只须将P1.1置为“0”,所有挂在复位总线上的T1均导通,RST输出高电平,各子站均被无条件复位。 结束语 单片机的复位电路是对干扰较为敏感的电路。施加在单片机的复位电路上一个ms级的微小毛刺干扰,就会对单片机造成极为严重的影响。若毛刺干扰持续时间大于单片机要求最小的可靠复位时间,单片机被复位;否则单片机还末完成复位过程,复位信号就被撤消,其内部寄存器将处于不确定状态,令单片机的应用中,为了可靠起见,一般不外引复位电路。在要文的应用中,需将复位电路外引,复位总线采用屏蔽线以提高抗干扰能力。 本文介绍的2种远方复位电路,各有优缺点。具有选择性的复位

9、电路优点是:有选择性地复位锁RS-485总线的子站,而不影响其它正常的子站,满足解除RS-485总线死锁的要求。缺点是:当子站程序跑飞但并没有使得DE恒为高电平时,RS-485总线处于正常状态,主站可以和所有正常的子站通信,但主站对这个异常的子站无能为力。无选择性的复位电路优点是:主站可以复位任何类型的由于程序跑飞引起异常的子站,此外,在电路的实现上较有选择性的复位电路简单。缺点是:它的动作是无选择性的,不管子站是否异常,挂在复位总线上的所有子站均被无条件复位。 RS-422接口的电气参数要求与RS-485接口相同,主要差别在于RS-422是全双工接口,而RS-485是双工接口。本文介绍RS-

10、485总线死锁检测方法,只需稍加修改,同样适用于RS-422总线系统,而解除死锁的方法无需任何修改即可直接应用于RS-422总线系统。1 问题的提出在工业控制及测量领域较为常用的网络之一就是物理层采用RS-485通信接口所组成的工控设备网络。这种通信接口可以十分方便地将许多设备组成一个控制网络。从目前解决单片机之间中长距离通信的诸多方案分析来看,RS-485总线通信模式由于具有结构简单、价格低廉、通信距离和数据传输速率适当等特点而被广泛应用于仪器仪表、智能化传感器集散控制、楼宇控制、监控报警等领域。但RS485总线存在自适应、自保护功能脆弱等缺点,如不注意一些细节的处理,常出现通信失败甚至系统

11、瘫痪等故障,因此提高RS-485总线的运行可靠性至关重要2 硬件电路设计中需注意的问题2.1 电路基本原理某节点的硬件电路设计如图1所示,在该电路中,使用了一种RS-485接口芯片SN75LBC184,它采用单一电源Vcc,电压在35.5 V范围内都能正常工作。与普通的RS-485芯片相比,它不但能抗雷电的冲击而且能承受高达8 kV的静电放电冲击,片内集成4个瞬时过压保护管,可承受高达400 V的瞬态脉冲电压。因此,它能显著提高防止雷电损坏器件的可靠性。对一些环境比较恶劣的现场,可直接与传输线相接而不需要任何外加保护元件。该芯片还有一个独特的设计,当输入端开路时,其输出为高电平,这样可保证接收

12、器输入端电缆有开路故障时,不影响系统的正常工作。另外,它的输入阻抗为RS485标准输入阻抗的2倍(24 k),故可以在总线上连接64个收发器。芯片内部设计了限斜率驱动,使输出信号边沿不会过陡,使传输线上不会产生过多的高频分量,从而有效扼制电磁干扰。在图1中,四位一体的光电耦合器TLP521让单片机与SN75LBC184之间完全没有了电的联系,提高了工作的可靠性。基本原理为:当单片机P1.6=0时,光电耦合器的发光二极管发光,光敏三极管导通,输出高电压(5 V),选中RS485接口芯片的DE端,允许发送。当单片机P1.6=1时,光电耦合器的发光二极管不发光,光敏三极管不导通,输出低电压(0 V)

13、,选中RS485接口芯片的RE端,允许接收。SN75LBC184的R端(接收端)和D端(发送端)的原理与上述类似。2.2 RS-485的DE控制端设计在RS-485总线构筑的半双工通信系统中,在整个网络中任一时刻只能有一个节点处于发送状态并向总线发送数据,其他所有节点都必须处于接收状态。如果有2个节点或2个以上节点同时向总线发送数据,将会导致所有发送方的数据发送失败。因此,在系统各个节点的硬件设计中,应首先力求避免因异常情况而引起本节点向总线发送数据而导致总线数据冲突。以MCS51系列的单片机为例,因其在系统复位时,I/O口都输出高电平,如果把I/O口直接与RS-485接口芯片的驱动器使能端D

14、E相连,会在CPU复位期间使DE为高,从而使本节点处于发送状态。如果此时总线上有其他节点正在发送数据,则此次数据传输将被打断而告失败,甚至引起整个总线因某一节点的故障而通信阻塞,继而影响整个系统的正常运行。考虑到通信的稳定性和可靠性,在每个节点的设计中应将控制RS485总线接口芯片的发送引脚设计成DE端的反逻辑,即控制引脚为逻辑“1”时,DE端为“0”;控制引脚为逻辑“0”时,DE端为“1”。在图1中,将CPU的引脚P1.6通过光电耦合器驱动DE端,这样就可以使控制引脚为高或者异常复位时使SN75LBC184始终处于接收状态,从而从硬件上有效避免节点因异常情况而对整个系统造成的影响。这就为整个

15、系统的通信可靠奠定了基础。此外,电路中还有1片看门狗MAX813L,能在节点发生死循环或其他故障时,自动复位程序,交出RS-485总线控制权。这样就保证整个系统不会因某一节点发生故障而独占总线,导致整个系统瘫痪。2.3 避免总线冲突的设计当一个节点需要使用总线时,为了实现总线通信可靠,在有数据需要发送的情况下先侦听总线。在硬件接口上,首先将RS-485接口芯片的数据接收引脚反相后接至CPU的中断引脚INT0。在图1中,INT0是连至光电耦合器的输出端。当总线上有数据正在传输时,SN75LBC184的数据接收端(R端)表现为变化的高低电平,利用其产生的CPU下降沿中断(也可采用查询方式),能得知

16、此时总线是否正“忙”,即总线上是否有节点正在通信。如果“空闲”,则可以得到对总线的使用权限,这样就较好地解决了总线冲突的问题。在此基础上,还可以定义各种消息的优先级,使高优先级的消息得以优先发送,从而进一步提高系统的实时性。采用这种工作方式后,系统中已经没有主、从节点之分,各个节点对总线的使用权限是平等的,从而有效避免了个别节点通信负担较重的情况。总线的利用率和系统的通信效率都得以大大提高,从而也使系统响应的实时性得到改善,而且即使系统中个别节点发生故障,也不会影响其他节点的正常通信和正常工作。这样使得系统的“危险”分散了,从某种程度上来说增强了系统的工作可靠性和稳定性。2.4 RS-485输

17、出电路部分的设计在图1中,VD1VD4为信号限幅二极管,其稳压值应保证符合RS-485标准,VD1和VD3取12 V,VD2 和VD4取7 V,以保证将信号幅度限定在-7+12 V之间,进一步提高抗过压的能力。考虑到线路的特殊情况(如某一节点的RS-485芯片被击穿短路),为防止总线中其他分机的通信受到影响,在SN75LBC184的信号输出端串联了2个20 的电阻R1和R2,这样本机的硬件故障就不会使整个总线的通信受到影响。在应用系统工程的现场施工中,由于通信载体是双绞线,它的特性阻抗为120 左右,所以线路设计时,在RS485网络传输线的始端和末端应各接1个120 的匹配电阻(如图1中的R3

18、),以减少线路上传输信号的反射。2.5系统的电源选择 对于由单片机结合RS-485组建的测控网络,应优先采用各节点独立供电的方案,同时电源线不能与RS-485信号线共用同一股多芯电缆。RS-485信号线宜选用截面积0.75 mm2以上的双绞线而不是平直线,并且选用线性电源TL750L05比选用开关电源更合适。TL750L05必须有输出电容,若没有输出电容,则其输出端的电压为锯齿波形状,锯齿波的上升沿随输入电压变化而变化,加输出电容后,可以抑制该现象。3 软件的编程SN75LBC184在接收方式时,A、B为输入,R为输出;在发送方式时,D为输入,A、B为输出。当传送方向改变一次后,如果输入未变化

19、,则此时输出为随机状态,直至输入状态变化一次,输出状态才确定。显然,在由发送方式转入接收方式后,如果A、B状态变化前,R为低电平,在第一个数据起始位时,R仍为低电平,CPU认为此时无起始位,直到出现第一个下降沿,CPU才开始接收第一个数据,这将导致接收错误。由接收方式转入发送方式后,D变化前,若A与B之间为低电压,发送第一个数据起始位时,A与B之间仍为低电压,A、B引脚无起始位,同样会导致发送错误。克服这种后果的方案是:主机连续发送两个同步字,同步字要包含多次边沿变化(如55H ,0AAH),并发送两次(第一次可能接收错误而忽略) ,接收端收到同步字后,就可以传送数据了,从而保证正确通信。 为

20、了更可靠地工作,在RS485总线状态切换时需要适当延时,再进行数据的收发。具体的做法是在数据发送状态下,先将控制端置“1”,延时0.5 ms左右的时间,再发送有效数据,数据发送结束后,再延时0.5 ms,将控制端置“0”。这样的处理会使总线在状态切换时,有一个稳定的工作过程。数据通信程序基本流程图如图2所示。单片机通信节点的程序基本上可以分为6个主要部分,分别为预定义部分、初始化部分、主程序部分、设备状态检测部分、帧接收部分和帧发送部分。预定义部分主要定义了通信中使用的握手信号,用于保存设备信息的缓冲区和保存本节点设备号的变量。设备状态检测部分应能在程序初始化后,当硬件发生故障时,作出相应的反

21、应。主程序部分应能接收命令帧,并根据命令内容作出相应的回应。为缩短篇幅,这里仅给出主程序部分的代码。如下所示:/* 主程序流程 */while(1) /主循环if(recv_cmd(&type)=0) /发生帧错误或帧地址与本机 /地址不符,丢弃当前帧后返回continue;switch(type) case _ACTIVE_:/主机询问从机是否存在send_data(_OK_, 0,dbuf);/发送应答信息break;case _GETDATA_:len = strlen(dbuf);send_data(_STATUS_, len,dbuf);/发送状态信息break;default:br

22、eak;/命令类型错误,丢弃当前帧后返回4 结论RS-485由于使用了差分电平传输信号,传输距离比RS-232更长,最多可以达到3000 m,因此很适合工业环境下的应用。但与CAN总线等更为先进的现场工业总线相比,其处理错误的能力还稍显逊色,所以在软件部分还需要进行特别的设计,以避免数据错误等情况发生。另外,系统的数据冗余量较大,对于速度要求高的应用场所不适宜用RS-485总线。虽然RS-485总线存在一些缺点,但由于它的线路设计简单、价格低廉、控制方便,只要处理好细节,在某些工程应用中仍然能发挥良好的作用。总之,解决可靠性的关键在于工程开始施工前就要全盘考虑可采取的措施,这样才能从根本上解决问题,而不要等到工程后期再去亡羊补牢。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号