吕学志,范保新,赵新会,尹 健,王宪文,姚 耀
1.国防大学 信息作战与指挥训练教研部,北京 100091
2.陆军炮兵训练基地教研部,河北 宣化 075100
为了提高系统的可靠度,通常采用两种方式:一是提高组件单元的可靠度,二是采用冗余形式。为了提高组件单元的可靠度,可能需要更精进的制造工艺,这就需要投入更多的人力、资金、时间进行研发,从而增加制造成本,但组件单元可靠度的增加非常有限。在实际应用中,一般采用组件冗余的方式,提高整个系统的可靠度。因此,冗余系统在现实世界中应用非常广泛。而可用度(Availability)是装备可用性的概率度量,是系统效能的重要因素,是用户最关心的重要参数之一。所以,分析冗余系统的可用度是工程人员经常面临的问题。
目前,对系统可用度分析主要使用马尔可夫过程和仿真方法。文献[1]运用马尔可夫过程分析了可修系统的可用度。文献[2]运用马尔可夫过程分析了汽车机轴的可靠性。文献[3]概述了马尔可夫方法在多阶段任务系统可靠性分析中的应用。文献[4-5]系统介绍了系统可靠性数字仿真方法。文献[6]给出了基于最小路集的复杂系统可用度仿真算法。此外一些商业可靠性仿真软件可以很好地实现对基于基本可靠性框图的可靠性仿真,例如Blocksim 7.0,只要用户给定可靠性、维修性参数、可靠性框图,计算机将自动仿真计算出各类可靠性参数[7]。文献[8]介绍了利用仿真方法确定最小割集以及可靠性的方法,系统的结构用基于最小割集的真值表进行描述。但是,上述仿真方法并不适用于包含冷储备关系的冗余系统,使得其应用范围受到了限制。
综上所述,冗余系统可用度可以使用马尔可夫过程,但是这种方法只适用于部件较少、结构并不复杂的系统,如果部件数量增加,结构更加复杂,则由于状态空间的急剧增加,很难对其进行分析。虽然仿真方法不受部件规模的限制,但是目前的仿真方法主要用最小路基、最小割集、可靠性框图来描述系统结构,这种描述方法很难反映部件状态的相关性,并不适用于包含冷储备这种状态相关关系的冗余系统,限制了其应用范围。所以,需要对冗余系统可用度仿真算法以及系统结构描述进行深入研究,解决目前面临的难题。
冗余系统通常包括储备系统和表决系统。储备系统中有k个单元工作,把n-k个单元作为备件,且可以代替工作中失效的单元工作,以提高系统的可靠度,把这样的系统称为“n中取n-k备用(n-kout-ofn;Standby)的储备系统”,记为n-k/n(S)系统。单元的储备形式有多种多样,常见的有冷储备、热储备和温储备[9]。表决系统也是一种冗余系统,在工程实践中得到了广泛的应用。组成系统的n个单元中,只要有k个或k个以上单元正常,则系统正常,把这样的系统称为“n中取 k好(k-out-ofn;Good)表决系统”,记为 k/n(G)系统。表决系统的特例是并联(1/n(G))和串联(n/n(G))系统。热储备系统可以归为表决系统。由于温储备和冷储备都需要启动备用单元,所以温储备可以归为冷储备的一种特例。所以经过以上简单分析,可以说冗余系统包括冷储备系统和表决系统[9]。
图2 并联系统状态转移图
本文的研究目的是利用离散事件仿真方法来分析冗余系统可用度,需要解决的第一个难题就是如何用结构化的形式来表示冗余系统结构。由于冗余系统中可能存在冷储备系统,其部件状态相关,关系结构非常复杂,所以不能再按照基本可靠性框图的方式来使用最小路集或最小割集来表示其结构。这里采用BS树形式来表示冗余系统结构。见图1。
图1 BS树状结构图示例
在BS树中,有三种图形,即矩形、圆形、连接线。圆形表示下层部件,按数字顺序进行编号。矩形表示下层部件的关系,矩形中的“S”表示冷储备关系,“B”表示表决关系。如果是冷储备关系,矩形中数字表示冷储备系统n-k/n(S)中正常工作单元数k。如果是表决关系,矩形中数字表示k/n(G)表决系统中的k。
为了分析复杂冗余系统行为,首先分析一下简单的2部件并联系统与2部件冷储备系统的行为。图2是2部件并联系统状态转移图,图中x1与x2分别表示部件1和部件2,sys表示部件1和部件2组成的系统。 x1、x2有3个状态:wait(待用)、off(故障)、on(正常);sys有2个状态:off(故障)、on(正常)。 sys、x1与 x2的初始状态为正常状态;当x1、x2两个部件都故障之后,整个系统故障。如果部件 x1或x2处于wait状态,当sys进入on状态,即en(sys.on),则 x1、x2进入on状态。当部件x1或 x2处于on状态,当sys进入off状态,即en(sys.off),则 x1、x2进入wait状态。 f1、f2分别表示 x1、x2的故障事件,当发生故障事件后,x1或x2由on状态转变为off状态;g1、g2分别表示 x1、x2的修好事件,当发生修好事件后,x1或x2由off状态转变为wait状态。图3是2部件冷储备系统状态转移图。x1、x2两个部件中x2是备件,x2的初始状态为wait状态,x1、sys的初始状态为on状态;当x1故障之后,则x2进入正常状态;当x2与x1都故障时,则系统故障。通过比较图2、3,发现在冗余系统中,部件状态是相关的。当系统正常时,则原本处于待用状态的部件也将进入正常工作状态。当系统故障时,则原本正常工作的部件也将进入待用状态。因此,对于冗余系统来说,不仅部件状态要受到系统状态的影响,而且可能由于某些部件是备用的,部件之间状态也是相互影响的[10]。
图3 冷储备系统状态转移图
接下来,以图1中的冗余系统为例对具有两层嵌套结构的冗余系统行为进行分析。假设x1、x2、x3、x4、x5初始状态为正常,处于第2层的“B,1”子系统正常,“S,2”子系统正常,则顶层的“S,1”系统状态正常。顶层“S,1”系统状态正常,由于其关系是冷储备,所以处于第2层的“B,1”子系统、“S,2”子系统必有一个处于待用状态,选择“S,2”子系统处于待用状态,则其下属部件x3、x4、x5处于待用状态。若x1、x2都故障且没有修好,第2层的“B,1”子系统进入故障状态,“S,2”子系统处于待用状态,启动“S,2”子系统后顶层的“S,1”系统仍处于正常状态,选择“S,2”子系统下属部件x3、x4处于正常状态,x5处于待用状态。
根据以上对图1中冗余系统的分析,可以总结出以下规律。对于多层嵌套结构的冗余系统,其行为总是由部件的事件引起的,部件修好或故障事件再影响到上层子系统的状态,上层子系统的状态将影响其上层子系统的状态,直至顶层系统状态,顶层系统状态又会影响到下层子系统状态,直至底层部件状态,这样部件就会间接影响到兄弟部件状态。这样的行为演变具体来说可分为两个过程:一是确定顶层系统状态的过程,这是一个“自下而上”的过程,二是确定底层部件状态转移的过程,这是一个“自上而下”的过程。
算法假设条件有:(1)部件三状态:部件有三个状态,即正常、故障、待用,且部件之间状态相关。(2)系统两状态:在任一时间,系统或者正常或者故障。(3)单调关联系统:复杂冗余系统被认为是单调关联系统(如果每个部件处于正常状态,则系统必定处于正常状态;如果每个部件处于故障状态,则系统必定处于故障状态;如果部件从故障状态向正常状态转变,则不会导致系统从正常状态向故障状态转变)。(4)复杂冗余系统结构:复杂冗余系统的可靠性关系结构已知,可以用BS树的形式给出。(5)部件的维修时间分布函数与故障分布函数:每个部件的维修时间分布函数与故障分布函数已知,即分布类型与分布参数已知。(6)维修策略:对于每个部件持续监视其状态,并采用事后维修策略,不考虑由于维修资源有限而产生的排队问题。(7)部件修复后如新:当部件故障后经过维修(换件),部件如同新的一样。
输入数据主要包括:(1)仿真次数:调整仿真次数可能影响仿真结果的精确性、耗费的仿真时间与计算资源;(2)仿真时间:每次仿真过程中的逻辑时间;(3)部件数量;(4)部件故障分布函数;(5)部件维修时间分布函数;(6)复杂冗余系统结构参数。
输出数据主要包括:(1)系统仿真时间内平均可用度;(2)平均可用时间(Mean Up Time,MUT);(3)平均非可用时间(Mean Down Time,MDT);(4)平均故障次数(Mean Times of Failure,MTF);(5)平均首次故障时间(Mean Time to First Failure,MTTFF);(6)平均维修时间(Mean Time to Repair,MTTR)[11]。
根据离散事件仿真方法设计了复杂冗余系统可用度仿真算法,如图4所示。复杂冗余系统中的每个部件可能会经历故障事件与修好事件。算法步骤如下[12]:
步骤1仿真时钟、统计变量初始化为0。
步骤2根据复杂冗余系统结构参数,以及部件的故障分布函数初始化事件表与每个部件的状态。
步骤3确定下一个事件的类型、时间,以及发生部位(即确定由哪个部件产生的)。
步骤4判断是故障事件,还是修好事件。若是故障事件则执行故障事件操作流程;否则,执行修好事件操作流程。
图4 复杂冗余系统可用度仿真算法
步骤5更新系统状态、统计变量,推进仿真时钟。
步骤6重复执行步骤3到步骤5,直到满足仿真时间。
步骤7记录单次仿真数据。
步骤8重复执行步骤1到步骤7,直到达到仿真次数要求。
下面对故障事件操作流程图进行介绍,如图5所示。首先,根据相应部件维修时间分布函数随机生成维修部件所需维修时间tm,安排部件下一个事件为修好事件,修好事件发生时间为当前时钟加上维修时间tm。然后确定复杂冗余系统状态st(1):
(1)如果系统状态st(1)为正常,则确定部件转移状态。根据部件状态和转移状态更新部件事件表。①如果部件状态为备用并且转移状态为正常,则部件状态为正常,安排故障事件。如果部件剩余寿命为0,则故障事件时间为仿真时钟时间加上根据部件故障分布随机生成的故障时间tf。如果剩余寿命不为0,则故障事件时间为仿真时钟时间加上剩余寿命。②如果部件状态为正常并且转移状态为备用,则部件状态为备用,安排备用事件(事件编号设置为2,事件时间设置为inf(无限大)),并记录部件剩余寿命。
(2)如果系统状态st(1)为故障,则所有处于正常状态部件处于备用状态,记录部件的剩余寿命(故障事件时间减去仿真时钟时间),并安排备用事件(事件编号设置为2,事件时间设置为inf)。
图5 故障事件操作流程图
图6 是修好事件操作流程图。首先,修好部件处于备用状态,更新部件对应的仿真事件表(既不安排故障事件也不安排修好事件),修好部件剩余寿命为0。然后,确定复杂冗余系统状态st(1),如果系统状态st(1)为正常,则确定部件转移状态。根据部件状态和转移状态更新部件事件表。(1)如果部件状态为备用并且转移状态为正常,则部件状态为正常,安排故障事件。如果部件剩余寿命为0,则故障事件时间为仿真时钟时间加上根据部件故障分布随机生成的故障时间tf。如果剩余寿命不为0,则故障事件时间为仿真时钟时间加上剩余寿命。(2)如果部件状态为正常并且转移状态为备用,则部件状态为备用,安排备用事件(事件编号设置为2,事件时间设置为inf),并记录部件剩余寿命。以上介绍了复杂冗余系统可用度仿真算法的流程,接下来介绍表示BS树、如何确定系统状态以及部件的转移状态。
图6 修好事件操作流程图
从图1可以观察到BS树像一棵倒过来的树,很显然应该使用树这种数据结构来描述BS树。在编程语言中有两种描述树的方法:一种是父指针表示法,另一种是左子结点/右兄弟结点法[13-15]。这里介绍前一种方法。BS树可以表示为图7中的三维数组形式。
图7 BS树的父指针数组表示法
在父指针表示法中,每个结点包含一个指向父结点的指针、类型值和标记值。父指针表示为父结点在数组中位置的下标值。例如,结点1的指针为0,表示其为根结点;结点2的指针为1,表示其父结点是根结点。类型值只取1、2、3这三个值,取1表示结点为表决关系结点,其子结点组成表决子系统,标记值为k/n(G)表决系统中的k;取2表示结点为冷储备关系结点,其子结点组成冷储备子系统,标记值为n-k/n(S)冷储备系统中的k;取3表示结点为部件,其没有子结点,标记值为部件编号。在复杂冗余系统可用度仿真算法中,用类(Class)来描述树t,并定义树的方法。这些方法主要包括得到结点i的子结点向量getchildren(i),得到结点i的类型值gettype(i),得到结点i的标记值getmark(i),得到树t的宽度搜索向量breadthfirstiterator,判断结点i是否是叶子isleaf(i)。
确定复杂冗余系统状态是一个“自下而上”的过程。输入数据包括t(描述复杂冗余系统结构的BS树)和sc(描述所有部件状态的向量)。输出数据是BS树所有结点状态向量st,st(1)表示BS树根结点状态,即复杂冗余系统状态。确定复杂冗余系统状态的流程图如图8所示,其中|I|表示向量I中的元素个数;|C|表示向量C中的元素个数;sign()是一个函数,当x非0时,sign(x)=x/|x|;当 x=0时,sign(x)=0。
图8 确定系统状态流程图
根据第3章的分析,确定底层部件转移状态需要判断系统状态是否正常。(1)如果系统状态正常,则再根据系统的关系确定下层子系统的转移状态,再由下层子系统状态确定其下层子系统或部件的转移状态,直至确定所有底层部件的转移状态,所以这个过程是一个“自上而下”的确定过程。(2)如果系统状态为故障,则令所有处于正常状态的部件直接进入待用状态。确定底层部件转移状态需要系统状态必须为正常,也就是说只有确定了系统状态为正常的情况下才会确定部件转移状态。而如何确定系统状态在前面已经探讨过了。
确定部件状态转移算法的输入数据包括sc(所有部件状态的向量)和t(系统结构的BS树)。输出数据是s′c(所有底层部件转移状态的向量)。
在BS树中,对于转移状态为正常(即等于1)且类型是冷储备关系的结点,可以称其为“S型”结点。对于不是“S型”结点的结点,可将其称为“B型”结点。
确定“S型”结点的子结点(包括子系统和部件)的状态转移流程较为复杂(图9中由上向下第3个“判断”框图左下部分描述了这种结点的状态转移流程)。具体确定转移状态可以采用以下思路。首先,按照是否可能转移状态可以将“S型”结点分为两种:一种是可能转移状态的子结点,包括处于待用状态、正常状态的子结点;另一种是不可能转移状态的子结点,包括处于故障状态的子结点。然后,从可能转移状态的子结点中,确定哪些子结点转移状态为正常,哪些子结点转移状态为备用。所以整个流程可以分为三步:第一步,确定可能转移状态子结点集合;第二步,从可能转移状态子结点集合中确定转移状态为正常的集合;第三步,确定所有子结点转移状态。
图9 确定部件转移状态流程图
在图9中,第一步“确定可能转移状态子结点集合”的流程图的背景色填充为5%度灰。“确定待转移状态子结点集合”可以采用两种策略。一种策略是处于正常、待用状态的子结点可能转移状态,而处于故障状态的子结点不能可能转移状态,将其称为策略1。图9采用了这种策略。另一种策略是处于待用状态的子结点可能转移状态,而处于故障、正常状态的子结点不能可能转移状态,将其称为策略2。采用策略2确定可能转移状态集合的算法如图10所示。在算法编程中可以根据需要选择其中一种策略。
在图9中,第二步“从可能转移状态子结点集合中确定转移状态为正常的集合”的流程图的背景色填充为10%度灰。这里也可以采用两种策略,一种策略是随机确定转移状态为正常的集合,称其为策略3。图9中采用了这种策略。另一种策略是按照预先设定的优先顺序确定转移状态为正常的集合,称其为策略4,具体流程如图11所示。
图10 策略2流程图
图11 策略4流程图
在图9中,第三步“确定所有子结点转移状态”的流程图是由剩余的三个“判断”框图构成的循环结构组成。由于前两步已经确定了状态转移集合,就可以按照前面的集合确定具体子结点的转移状态的,所以这一步比较简单。
对于“B型”结点,其处理流程图为从上向下第3个“判断”框图右下部分。如果结点转移状态为1,则所属子结点中处于待用状态的子结点的转移状态为正常状态,否则所属子结点中处于正常状态的子结点的转移状态为待用状态。
考虑这样的系统,其可靠性框图如图12所示,部件2和3、部件4和5、部件6和7、部件8和9、部件10和11都是冷储备关系,它们和部件1又共同构成串联关系。图13是该系统的BS树。
图12 实例系统的可靠性框图
图13 实例的BS树
系统由7个相同部件组成,其故障分布函数均为e-0.01t,t≥0,修理时间分布均为1-e-0.1t,t≥0。时间单位为小时(h)。表1用数组描述了系统的结构。
表1 表示系统BS树的数组
根据所提出的算法用Matlab进行了编程,分别评估复杂冗余系统可用性。仿真时间为1 000 h,仿真的次数100次。平均可用度为0.896 6。每次仿真可用时间和不可用时间直方图与累计概率分布曲线如图14、15。平均可用时间为67.9 h,平均不可用时间为8.5 h。每次仿真首次故障时间直方图与累计概率分布如图16,平均首次故障时间MTTFF为69.3 h。每次仿真维修时间与维修次数的直方图如图17,平均维修时间MTTR为9.9 h。故障次数直方图与累计概率分布曲线如图18,平均故障次数为12.17。
图14 系统可用时间统计分析图
图15 系统不可用时间统计分析图
图16 首次故障时间统计分析图
图17 维修时间与次数直方图
图18 故障次数统计分析图
本文介绍了复杂冗余系统及其可用度分析的重要性;提出利用BS树来描述冗余系统的结构;用状态图描述了复杂冗余系统的复杂行为;在离散事件系统仿真方法基础上,设计了复杂冗余系统可用度的仿真算法,重点探讨了如何描述BS树,如何利用BS树确定复杂冗余系统状态和部件转移状态。该仿真算法可以对具有多层嵌套结构的复杂冗余系统进行可用度等多种参数进行计算,不需要太多输入参数,计算机实现简单,实用性与通用性都很强,较好地解决了复杂冗余系统结构描述、确定复杂冗余系统状态及部件转移状态的技术问题。在今后的研究中,可以继续考虑其他类型的冷储备系统、类型表决系统,以及考虑备件转换的可靠性,不断完善该仿真算法。