本发明涉及一种单控制器主从式网络总线控制器在线切换方法,可以用于解决采用主从式总线架构的分布式系统在运行过程中总线动态切换的问题。
背景技术:
随着模块设计和分布式技术的发展和普及,利用总线来构建系统解决方案的方法变得越来越普遍,大型工业设备控制系统,多点布控的智能监测系统以及航空航天领域等都会用到总线。总线技术按照拓扑结构可以分为星型总线、菊花链结构总线、环形结构总线,按照总线控制权的分布可以分为主从式总线、仲裁式总线、对等式总线等。其中主从式总线在稳定性要求较高的系统中应用较为广泛。
在以主从式总线网络为逻辑拓扑结构的系统中,系统运行过程中根据系统功能和状态的转换,常常希望能够自适应优化网络负载量及局部化负载分布,适时分布网络数据交换量分布。根据功能转换动态切换主从式总线的总线控制器是实现这个目标的一种方式。
单控制器主从式总线的控制器的切换通常会影响正常通信,为了避免通信过程中的异常消息造成系统中各个设备的异常动作,甚至对系统造成危害,通常需要断电,然后通过更换配置软件的方式重新配置新的总线控制器后再重新加电。
为了提高系统工作的效率,少数更加先进的系统方案实现了总线控制器的自动切换技术。目前现有的自动切换方案往往采用“命令后下岗”模式,即当前总线控制器通知备选总线控制器切换后,自己切换为总线从属站点的身份,备选总线控制器在收到总线控制器切换请求后,将自己切换为总线控制器,然后切换过程结束。而这个过程通常是不能容错的,如通信,控制器站点属性切换过程等都可能会引起切换的不成功。在切换失败时,通常会导致总线上无控制器,总线静默,而在这种情况下,由于总线上无任何信息传输,造成设计者无法对系统的故障状态进行进一步的诊断。更进一步的方案是通过备保发送将通信的可靠性增加,但这种方案并不能解决站点切换失败的情况,因此也没有避免总线静默的问题。
技术实现要素:
本发明的技术解决问题是:克服现有技术的不足,提出了一种总线控制器切换失败时不会进入静默状态的高可靠的总线控制器在线切换方法。
本发明的技术解决方案是:一种单控制器主从式网络总线控制器在线切换方法,该方法包括以下步骤:
(1)、当前总线控制器Ctrlorcurrent向将要切换为总线控制器的站点Ctrlorcandidate发送控制器切换请求消息;
(2)、Ctrlorcandidate在收到Ctrlorcurrent发来的控制器切换请求消息后,向Ctrlorcurrent回复控制器切换请求应答消息,然后等待tdelay1后,将自身切换为总线控制器;
(3)、Ctrlorcurrent在收到Ctrlorcandidate发送的控制器切换请求应答消息后,将自己切换为从属站点;
(4)、Ctrlorcandidate在切换为总线控制器后,向已切换为从属站点的Ctrlorcurrent发送切换好消息,并等待tdelay2后,读取Ctrlorcurrent回复消息,若回复标志有效,则切换成功,结束切换过程,否则,Ctrlorcandidate重新将自己切回从属站点;
(5)、Ctrlorcurrent在将自己切为从属站点后,在预设的Tswitch时间段内,若收到Ctrlorcandidate作为总线控制器发来的总线控制器切换好消息,则置位回复消息中的回复标志,发送回复消息后等待总线控制器来取,若预设的Tswitch时间之后,还未收到Ctrlorcandidate作为总线控制器发来的总线控制器切换好消息且切换次数小于等于N,则重新将自己切换为总线控制器,记录切换次数加1,重复步骤(1)~步骤(5),当切换次数大于N时,报警总线故障,结束切换过程。
在总线控制器切换过程中,控制器切换请求消息,控制器切换请求应答消息,切换好消息均通过多次发送以避免通信误差引起的控制器切换失败。
所述tdelay1为Ctrlorcurrent从总线控制器切换为总线从属站点的基准时长;所述Tswitch为Ctrlorcandidate由总线从属站点切换为总线控制器的基准时长;所述tdelay2为已经切换为总线从属站点的Ctrlorcurrent置好总线从属站点切换好状态标志的基准时长。
所述Ctrlorcurrent从总线控制器切换为总线从属站点的基准时长、Ctrlorcandidate由总线从属站点切换为总线控制器的基准时长、已经切换为总线从属站点的Ctrlorcurrent置好总线从属站点切换好状态标志的基准时长均通过统计测试得到的实际执行时间得到,所述测试次数大于5000次。
所述各基准时长具体统计方法为:以测试得到的实际执行时间作为样本,取基准时长对应的样本数据的中位数作为该基准时长待定值,在基准时长待定值的基础上增加各自统计样本标准差的3倍值得到各个基准时长的最终值。
本发明与现有技术相比的有益效果是:
(1)、本发明采用切换失败自检测并重试的功能大大增加了总线切换的稳定性和可靠性,而其可以在保持系统总线功能正常运转的情况下完成总线控制器的切换过程,使整个切换过程对总线中的其他站点透明化,基于主从式总线的特点,在主从式总线上的所有从属站点在需要通信时,无需知道总线上的哪个站点是总线控制器,只需有总线控制器为其服务即可,大大提高了其可用性。
(2)、本发明通过对主从式总线上的控制器切换问题过程逻辑化处理后,尽可能获得一个在逻辑上可以对故障自愈合、避免总线静默的总线控制器切换方法,当总线控制器切换失败时,总线并不会进入静默状态。
(3)、本发明通过请求确认、失败回滚重试等手段避免了由于切换动作执行时序错位,总线控制器切换失败等而导致的总线上多控制器竞争或无控制器等异常状态的产生。
(4)、本发明通过测试切换结果、重新切换等方法实现在出现切换失败的情况下,可以进行重新切换以及在重试失败后及时报警,在这个过程中不会产生额外的噪声通信消息或错误通信消息,降低了系统在总线切换过程中出现故障的概率。
(5)、本发明通过多次、备保发送总线控制器切换过程中所涉及到的控制器切换请求消息,控制器切换请求应答消息,切换好消息,以避免通信误差引起的控制器切换失败,提高控制器切换的成功率。
(6)、本发明通过对tdelay1的设计避免了总线上出现两个控制器竞争而导致通信失败造成的功能虚警问题;
(7)、本发明通过对Tswitch的设计避免了总线长时间处于静默状态,影响其他站点通信的实时性,保持了其他站点在切换过程中依然在线的特点;
(8)、本发明通过tdelay2的设计包容了原总线控制器因初始化内存,任务调度等其他功能带来的状态标志置位延时,从而保证了最终应答时序的顺序,避免了新总线控制器再次误切回总线从属站点。
(9)、本发明根据大数定理及正态分布理论,本发明的各个基准时间获取方法在理论上可以保证实际数据的99.7%落在估计范围内,提高了估计时间的准确性,从而解决了由于预估时间不准确导致的时序偏差,引起故障和虚警的问题。
附图说明
图1为本发明的处理过程示意图;
具体实施方式
以下以MILSTD1553B总线系统为例,结合附图和具体实施方式对本发明进行详细说明。
MILSTD1553B数据总线具有双向输出特性,实时性和可靠性高,广泛应用于当代的运输机和相当数量的民航客机以及军用飞机上,航天系统也广泛的应用这一总线。1553B总线系统主要由3部分组成:总线控制器BC;远程终端RT;总线监视器BM。1553B总线的工作频率是1Mb/s。采用曼彻斯特II码,半双工工作方式。主要硬件部分为总线控制器(BC)和远程终端(RT),总线监控器(BM)作为可选设备。一般情况下,这3部分通过1个多路总线接口(MBI)来完成。可把MBI嵌在计算机内。该总线有10中消息格式。每个消息至少包含2个字(命令字和状态字,不带数据字),每个消息可以包含32个数据字。消息的每个字有16个消息位,1个奇偶校验位和3各位长的同步头。1553B总线是典型的时分制命令/响应式多路复用数据总线,即主从式网络总线,总线上传输的数据均由BC来调度,每个远程终端站点RT将要发送的消息准备好后,放入固定的发送缓冲区中,由BC来决定什么时候发送以及发送到哪个信宿,BC会将信源RT站点的发送缓冲区中将消息取出后,放入到信宿RT的接受缓冲区中,或者BC直接作为信宿直接获得消息,从而实现一次通信过程。本发明将选取1553B总线构建的系统中,总线控制器BC的切换过程来进一步说明本发明所述方法的实施过程。
实施例选择兼容61580芯片功能的微处理器作为1553B总线站点的实现芯片,包括BC和RT,总线中不含BM站点。将总线中的每个RT站点接收当前总线控制器BC发送的总线控制器切换请求的子地址设计为5,每个站点回复BC总线控制器切换请求消息的子地址设计为4,每个站点标示自身已从BC状态切换到RT状态的确认消息发送子地址设计为9,每个站点接收其他站点发送的标示自身已经完成由RT切换到BC的确认消息的接收子地址设计为10,如此,在任意时刻均可将总线中的任意RT站点切换为BC。定义总线控制器切换消息格式为:
下面将具体描述在工作过程中,将总线控制器BC切换为RT5,而将原总线中的RT10切换为新的总线控制器BC的过程。该切换过程将包含如下步骤:
(1)、当前总线控制器BC向将要切换为总线控制器的站点RT10的接收子地址5发送控制器切换请求消息,消息的数据字包括{0xA5F0,0xAAAA,0x0005,0x5438},然后通过循环查询RT10的子地址4来检查RT10是否发送确认收到控制器切换请求的应答消息;
(2)、RT10通过1553B总线芯片中断的方式接收到BC发来的控制器切换请求消息后,识别BC将要切换的目标RT站点地址为5,然后将控制器切换请求应答消息{0xA5F0,0x5555,0x0000,0x8214}放在发送子地址4等待BC来取,待BC取走应答消息后,将该发送子地址清零,等待tdelay1=3s,将自身切换为总线控制器BC。
(3)、BC在收到RT10发送的控制器切换请求应答消息后,开始将自己的1553B芯片初始化为RT5,到此处的上述步骤的设计方式避免了RT10由于没有收到切换请求而未切换成BC站点的故障;
(4)、RT10在切换为BC后,向RT5的子地址10发送切换好消息{0xA5F0,0xF0F0,0x0000,0x4556},并等待tdelay2=500ms后读取RT5发送子地址9中RT5确认已由BC切换为RT的回复消息{0xA5F0,0xFF00,0x0000,0x1568},若回复标志有效,则切换成功,否则重新将自己切为RT10;tdelay2为已经切换为总线从属站点的Ctrlorcurrent置好总线从属站点切换好状态标志的基准时间长度。此基准时间长度根据控制器的处理速度和当前软件的任务调度量来确定,此处取100ms。此步骤主要用于RT10告知原BC站点,此时自己已经成功切换为总线控制站点,当原BC站点(即现在的RT5站点)收到现任BC站点(原RT10)发出的确认消息后,即可确认原RT10站点已经成功切换到BC站点,这个过程避免了由于RT10执行BC站点切换的过程中发生故障导致BC站点切换不成功的问题。若由于通信故障,导致原BC站点(即现在的RT5站点)未收到现任BC站点(原RT10)发出的确认消息时,则需将自身重新切换RT10站点状态,等待原BC站点来再次重新完成BC站点切换功能。
(5)、原BC在将自己切为RT5后,延时Tswitch=3s,在延时时间段内,同样以1553B芯片中断的方式等待接收BC发送的总线控制器切换好消息{0xA5F0,0xF0F0,0x0000,0x4556},若收到BC发来的总线控制器切换好消息,则置将自己的发送子地址10缓冲区中填写表示自身已完成从BC切换到RT的状态的回复消息{0xA5F0,0xFF00,0x0000,0x1568},等待BC来取,若超过Tswitch=3s时间后,还未收到Ctrlorcandidate作为总线控制器发来的总线控制器切换好消息且切换次数小于等于N,则重新将自己切换为总线控制器,记录切换次数加1,重复步骤(1)~步骤(5);当切换次数大于N时,N≥1,如:N取3,N报警总线故障,结束切换过程。本步骤的意义在于,若未收到现任BC站点(即原RT10站点)发送的BC切换好确认消息时,则认为原RT10在向BC站点切换的过程中发生了问题,此时总线处于无BC状态,因此将自己重新切换回BC站点,再次执行总线的调度工作,重新尝试完成总线BC的切换功能。此过程若重试N次后依然存在故障,即认为系统故障无法恢复,输出报警,等待排故。
所述tdelay1为Ctrlorcurrent从总线控制器切换为总线从属站点的基准时长;所述Tswitch为Ctrlorcandidate由总线从属站点切换为总线控制器的基准时长;所述tdelay2为已经切换为总线从属站点的Ctrlorcurrent置好总线从属站点切换好状态标志的基准时长。
所述Ctrlorcurrent从总线控制器切换为总线从属站点的基准时长、Ctrlorcandidate由总线从属站点切换为总线控制器的基准时长、已经切换为总线从属站点的Ctrlorcurrent置好总线从属站点切换好状态标志的基准时长均通过统计测试得到的实际执行时间得到,所述测试次数大于5000次,具体统计方法为:以测试得到的实际执行时间作为样本,取基准时长对应的样本数据的中位数作为该基准时长待定值,在基准时长待定值的基础上增加各自统计样本标准差的3倍值得到各个基准时长的最终值。
上述各个基准时长获取统计方法建立在大数定理及正态分布理论基础上,可以保证实际数据的99.7%落在估计范围内,提高了估计时间的准确性,从而解决了由于预估时间不准确导致的时序偏差,引起故障和虚警的问题。
为了提高控制器切换的成功率,在总线控制器切换过程中,控制器切换请求消息,控制器切换请求应答消息,切换好消息均可以通过多次发送以避免偶然的总线通信干扰故障引起的控制器切换失败。
本发明未详细描述内容为本领域技术人员公知技术。