杨晓强,贺 非,贺 强,徐 晨
(中国民用航空飞行学院 航空工程学院,四川 广汉 618307)
系统理论过程分析方法(System-Theoretic Process Analysis,STPA)由麻省理工Leveson提出,是基于系统理论的事故模型的一种危害分析方法[1]。它不仅能识别系统级危险(不安全控制行为),还能进一步分析交互组件是如何导致危险的发生,识别致因路径[2]。近年来,STPA广泛应用于对安全要求苛刻的系统分析中。张宏宏等提出基于STPA-TOPAZ的低空无人机冲突解脱安全性分析方法,仿真结果表明该方法的有效性和优越性[3]。甘旭升等采用STPA对空中交通态势感知程序设计案例进行危险分析,找出导致不安全控制行为的真正起因[4]。Zheng等基于STPA建立机轮刹车系统在飞机降落过程中的模型并对该过程的不安全控制行为进行仿真,结果表明STPA的有效性[5]。Li等采用STPA对车载地震紧急处理装置的不安全控制行为进行分析,结果表明STPA比FTA方法识别出更多的危害因素[6]。Osiris等提出了一种基于STPA的海事安全管理系统设计安全系统工作流程[7]。刘莎晨提出基于STPA与模型验证相结合的RDC安全性分析方法,结果表明与传统方法相比识别风险更准确[8]。章仕杰等采用STPA模型从控制角度分析了一起重大坍塌事故,得出管理层是预防同类事故重点的结论[9]。但是当前STPA模型多采用自然语言来描述过程模型和控制算法,会产生歧义并导致算法描述不准确等问题,对最终的分析结果产生不利影响。
机务维修模块是保障飞机安全高效运行的关键环节,是关系到飞机能否持续适航的一个基石。同时高新技术的广泛应用使得飞机表现出高集成度、高耦合度等复杂性特点,也为机务维修模块的安全性分析提出新的挑战。加之传统的安全性分析理论基于线性思维,对于非线性和难解型系统难以全面深入地分析,亟待新的分析方法。
针对以上复杂系统所带来的挑战以及STPA模型中自然语言的弊端,本文从控制的角度对某机型的机务维修模块进行安全性分析。在建模过程中运用对象约束语言(Object Constraint Language,OCL)和统一建模语言(Unified Modeling Language,UML)状态图来形式化描述STPA模型中过程模型和控制算法,对机务维修模块的不安全控制动作进行深入的研究,最终分析出导致事故或事故征候的潜在致因并提出相应安全需求。
STPA是一种主动、自上而下的分析方法,通过控制结构图来描述系统组成和控制反馈路径,充分考虑组件之间的耦合和非线性交互,能对差错致因问题进行有效的分析。它可用于系统的全寿命周期中,并根据使用的不同阶段,可为系统设计、制造、使用、维修和事故分析等过程提供保证安全约束实施所需的条件。STPA模型的三个最基本结构分别为安全约束、分层控制结构和过程模型[10]。
安全约束是STPA模型中最基本的概念。安全来自组件之间的耦合,保证系统安全就要对组件施加必要的约束,从而系统安全问题就转换成保证组件满足约束条件,所以事故源自施加给系统组件的安全约束没能得到充分的满足。
在系统理论中,系统被视为一种分层控制结构,系统高层向系统低层施加约束,而系统低层一旦违反约束就会产生危害并反馈给系统高层,所以反馈回路是系统实现自适应控制的关键。一般情况下,包含人和组织的系统控制结构,甚至于物理设备都会随时间而改变,这就需要以更高的自由度并结合最新发展趋势施加控制,以期实现从严苛死板的制度管理控制到人性化的高效管理控制目标的转变。
图1 过程模型
过程模型是控制过程的核心,包含目标、行动条件、可观测条件和控制算法等4个要素,如图1所示。目标是分层控制结构中施加给下一级的安全约束,行动条件在下一级中被实现,可观测条件是向上一级反馈的通道,控制算法是一种规范,控制器通过这种规范对被控对象进行控制。过程模型能够为系统提供两方面作用,分析出事故的致因和设计出稳定的系统。当控制器所使用的过程模型与实际不匹配时,会转化为系统危险,具体表现为发出错误的控制命令、不能实施控制命令、控制命令过早或过晚发出、控制过早或过晚终止。
STPA作为一种基于STAMP的分析方法,其基本步骤为:Step 1识别潜在的危险控制,ⅰ确定系统级危险,ⅱ构建分层控制结构,ⅲ构建控制回路,ⅳ辨识不安全控制行为;Step 2危害场景分析,ⅰ过程模型,ⅱ控制算法,ⅲ辨识出危害场景,ⅳ提取安全需求。
本文选取某型直升机机务维修模块中的更换发动机燃油喷射歧管(以下简称歧管)项目作为实例,运用形式化的STPA方法对其进行安全性分析,识别潜在的不安全控制行为,提出安全约束,构建系统的安全需求。
针对机务维修模块,识别出可能导致系统危险的不安全控制行为。
2.1.1 确定系统级危险
机务维修模块主要负责排除直升机故障,使之恢复到适航水平。更换发动机歧管项目主要目标是完整、及时、准确地完成直升机发动机更换歧管工作。从中可以提取机务维修模块的3个系统目标,G1机务人员能完整地更换歧管,G2机务人员能及时地更换歧管,G3机务人员能准确地更换歧管。
首先将系统主要功能转化成系统的目标,然后通过违反系统目标提取系统危险。运用这种方法可以确定机务维修模块的系统危险:H1更换歧管步骤丢失,H2更换歧管迟滞,H3更换歧管出现错误。为了有效防止系统危险的发生,则要给系统施加必要的系统级安全约束。系统实际运行过程中,将系统级约束细化并分配给每个组件。系统危险对应的安全约束如表1所示,其中SC(Security Constraint)为安全约束。
表1 系统危险对应的安全约束
2.1.2 构建分层控制结构
机务维修模块是一个包含不同工作模式的复杂系统。首先通过分析找出机务维修模中所有独立的组件,分析每个组件在系统中的功能及适用环境。机务维修分为两个阶段:初始化阶段和维修阶段。初始化阶段负责机务维修模块的准备工作;维修阶段主要任务是维修人员按工卡完成歧管的更换,放行人员遵循放行程序对直升机进行试车,若满足放行条件则给予放行。由于初始化和维修的控制动作不同,所以本文针对两个不同阶段分别构建控制结构图,以便提取出对应的安全需求。机务维修模块控制结构如图2所示。
图2 机务维修模块控制结构图
安装歧管进程作为机务维修过程中的重要一环,里面的控制结构很复杂,这就需要对安装歧管进程进一步构建控制结构,从而深入分析出机务维修的运作机制和控制方式。
下面将对安装歧管进程和放行进程进行分析,提取出对应子组件。安装歧管进程控制程序功能为控制安装歧管的进程,安装歧管进程等待功能为领取航材进程受阻,维修人员遵循工卡功能为依照工卡进行歧管的安装,放行进程控制程序功能为控制放行进程的进展,放行进程等待功能为确定是否已进行交叉检查和有无维修差错,放行人员遵循放行程序功能为依照放行程序进行放行。安装歧管和放行进程的控制结构如图3所示。
图3 安装歧管和放行进程控制结构图
2.1.3 构建控制回路
通过分析得出机务维修模块13个控制动作(Control Action,CA),其中初始化1个控制动作,维修阶段12个控制动作。初始化控制动作为生产技术分部编辑工卡CA1。维修阶段12个控制动作分别为:安装歧管进程控制程序向航材库申请歧管CA2、安装歧管进程控制程序指示维修人员带上航材单领取歧管CA3、安装歧管进程控制程序要求维修人员遵循工卡CA4、安装歧管进程控制程序提示维修人员打力矩CA5、安装歧管进程控制程序确定维修人员安装正确CA6、安装歧管进程控制程序告知下一模块维修结束CA7、放行进程控制程序向放行人员申请试飞CA8、放行进程控制程序要求放行人员遵循放行程序进行试飞CA9、放行进程控制程序确定满足放行条件CA10、放行进程控制程序指示放行人员签署适航放行证CA11、放行进程控制程序指示放行人员将飞机交付给客户CA12、放行进程控制程序告知下一模块放行结束CA13。
在STPA模型中,每个控制动作都有对应的控制回路(Control Loop,CL),控制回路能够细化每个控制动作,便于分析耦合的危险控制行为,为后续研究奠定良好基础。机务维修模块的控制回路如表2所示。
表2 控制回路
2.1.4 辨识不安全控制行为
根据STPA理论,从“没有提供”“提供”和“不正确的时间/顺序”3种控制不力的情况出发,得到不安全控制行为(Unsafe Control Action,UCA)。本文选取与安装歧管进程相关的控制动作(CA2~CA7)作为分析的实例,通过分析得到15个不安全控制行为,如表3所示。
表3 不安全控制行为
构建控制器过程模型和控制算法,找出不安全控制动作发生的场景和过程。
2.2.1 过程模型
过程模型描述了控制状态的改变,如下所示,本文使用OCL对控制结构图的安装歧管进程模块构建过程模型,能够克服STPA方法描述的不准确性。
System Variable:
gmbqIsFull:boolean//领取航材等待队列是否已满
mpIsWML:boolean//维修人员是否携带航材单
mpIsFWOC:boolean//维修人员是否遵循工卡
mpIsGTorque:boolean//维修人员是否打过力矩
mpJIsCorrectly:boolean//维修人员判断是否正确
mpIsIEnd:boolean//维修人员是否告知维修结束
WMListMotion:boolean//携带航材单动作
FWOCMotion:boolean//遵循工卡动作
GTorqueMotion:boolean//打力矩动作
JudgeMotion:boolean//判断动作
InformMotion:boolean//告知动作
gmbqLength:integer//领取航材等待(队列)的长度
maxLength:constant//领取航材(队列)的最大长度
Relationship:
1.gmbqIsFull----gmbqlength
Context:gmbqIsFull
Inv:gmbqlength=maxlength implies gmbqIsFull=true
Inv:gmbqlength 2.mpIsWML----WMListMotion Context:mpIsWML Inv:WMListMotion=0 implies mpIsWML=false Inv:WMListMotion=1 implies mpIsWML=true 3.mpIsFWOC----FWOCMotion Context:mpIsFWOC Inv:FWOCMotion=0 implies mpIsFWOC=false Inv:FWOCMotion=1 implies mpIsFWOC=true 4.mpIsGTorque----GTorqueMotion Context:mpIsGTorque Inv:GTorqueMotion=0 implies mpIsGTorque=false Inv:GTorqueMotion=1 implies mpIsGTorque=true 5.mpJIsCorrectly----JudgeMotion Context:mpJIsCorrectly Inv:JudgeMotion=0 implies mpJIsCorrectly=false Inv:JudgeMotion=1 implies mpJIsCorrectly=true 6.mpIsIEnd----InformMotion Context:mpIsIEnd Inv:InformMotion=0 implies mpIsIEnd=false Inv:InformMotion=1 implies mpIsIEnd=true 2.2.2 控制算法 控制算法是控制行为的理论依据,控制器会根据控制算法做出控制动作[11]。UML状态图能够准确直观地描述系统控制过程中的状态转移。本文用UML状态图描述安装歧管控制算法,如图4所示。 图4 安装歧管状态转移图 2.2.3 辨识危害场景 控制动作的控制类型有提供、没有提供和过晚提供三种情况。 对于CA2,当领取航材等待队列为满时,控制类型为没有提供。对于CA3,当携带航材单动作为否时,控制类型为没有提供;当维修人员携带航材单动作为是且领取过晚时,控制类型为过晚提供。对于CA4,当遵循工卡动作为否时,控制类型为没有提供;当维修人员遵循工卡动作为是且同事未进行交叉检查时,控制类型为提供;当维修人员遵循工卡动作为是且把安装顺序搞反时,控制类型为过晚提供。对于CA5,当磅力矩动作为否时,控制类型为没有提供;当维修人员磅力矩动作为是且同事交叉检查未发现磅的不准确时,控制类型为提供;当维修人员磅力矩动作为是且交叉检查过晚发现差错时,控制类型为过晚提供。对于CA6,当判断动作为否时,控制类型为没有提供;当判断动作为是且判断失误时,控制类型为提供。对于CA7,当告知动作为否时,控制类型为没有提供;当维修人员告知动作为是且在维修差错前提下告知下一模块维修结束,控制类型为提供;当维修人员告知动作为是且过晚告知下一模块维修结束,控制类型为过晚提供。 2.2.4 提取安全需求 通过危害场景识别出相应的安全需求,若要避免该型直升机发生事故或事故征候,就要满足以下安全需求。申请航材时,等待队列未满且航材单开具全面且及时;领取航材时,维修人员记得带航材单;开始维修时,维修人员要严格遵循工卡且同事间要进行交叉检查;磅力矩时,维修人员磅力矩时要规范操作且避免遗漏以及同事之间要仔细交叉检查;检查维修质量时,维修人员要严格遵循检查程序且慎重以避免判断失误;维修结束时,维修人员在确保维修正确的前提下及时告知下一模块维修结束。 (1)从控制的角度对某型直升机机务维修模块实例建立STPA模型,并运用对象约束和统一建模语言对所建模型进行描述,综合考虑各安全控制环路之间的耦合,分析出导致事故的潜在致因和危害机制,进而提出对应的安全需求,结果表明了STPA模型在机务维修模块的安全性分析中有很强的适用性。 (2)将来可以尝试STPA与某种定量方法相结合,从而发挥出系统理论过程分析方法的强大分析能力。3 结论