项目介绍
- 标题:持续安全风险评估的实例
- 要点:说明了对具有低临界部件的飞机的连续定量安全风险评估,该部件会影响飞机的整体安全。
- 完成时间:2020.8.24
- 作者:
Peter H. Feiler
软件工程学院
卡耐基梅隆大学
宾夕法尼亚州匹兹堡15213 - 项目版权声明
目录
下载地址
https://download.csdn.net/download/qq_37400312/77864307
项目目的
- 证明在安全风险分析中,加入较低设计保证水平(DAL)组件的重要性。
- 将飞行员的角色包括在整个系统安全分析中。
- 在整个产品生命周期内(包含飞机飞行的状态),进行安全风险分析。
Design Assurance Level,DAL,设计保证水平
研究方法
- 首先描述模型的元素,然后讨论几个使用场景,通过执行故障树分析来评估安全风险,该分析计算重大飞机事故的概率。
模型
模型组成
迎角传感器:Angle of Attack(AoA) sensor
- 迎角传感器作为一个设备的规格,它的输出数据端口以ServiceOmission和BadValue作为错误源进行声明。
- ServiceOmission表示传感器无法产生任何输出。
- BadValue表示传感器产生不正确的值。
- 发生概率设置为1.0e-5,以反映DAL C。
- 我们使用两个来自不同供应商的传感器,具有不同的质量特性。它们是ACC操作中主要的传感器。
辅助爬升控制系统:Auxiliary Climb Control(ACC)
- 辅助爬升控制系统:核心系统。它被认为是DAL-C,如果ACC发生故障,飞行员作为后备。ACC可以配置为使用一个AoA传感器或两个AoA传感器工作。当使用两个传感器操作时,如果两个传感器输出不同,ACC将进入待机模式。
- ACC被建模为接受两个AoA传感器的输入。
- ACC控制飞行面,并向飞行员提供备用指示器。
- 飞行员可以关闭和打开ACC。
- 为了捕捉ACC和飞行员之间的故障交互,我们不必通过模式反映标准ACC开/关行为。
- ACC规范有两种变体
- 单个AoA传感器输入:当AoA传感器提供错误值或未能提供值时,ACC提供错误的控制命令。ACC不会将控制权交给飞行员(ContinuousBadControl的传播)。飞行员需要关闭ACC来获得控制,也就是说,如果ACC没有关闭,则持续的错误控制传播将继续。
- 两个AoA传感器输入:这里我们将操作和待机建模为显式错误状态。如果传感器输出不同(值不同或其中一个值无法提供值),ACC进入待机状态。待机指示灯可能会出现故障,导致ServiceOmission,不向飞行员报告待机状态。
AoA差异检测器:AoA discrepancy detector
- AoA差异检测器:用于向飞行员告知两个AoA传感器的输出是否不同。AoA差异检测器仅用于带有单个AoA传感器的ACC的飞机构型。在两个传感器的ACC配置中,ACC备用指示器反映了AoA传感器的差异。
- 差异检测器通过执行近似值比较,通知飞行员两个AoA传感器是否产生不同的输出。采用近似值比较的方法是过滤掉值微小的变化。
- AoA差异检测器的AADL规范表明,当差异检测器出现故障时,或者当两个传感器输出都有值误差,但值彼此接近时,这种细微的值误差不会被检测到,则ServiceOmission会通过差异指示器特征传播。
- 故障发生概率与这两个检测器相关联。
- 差异检测器规格有一个功能,用于表示检测器配置不正确的情况,此时,不提供差异指示。
飞行面:flight surface
- 飞行面由ACC或飞行员控制。
- 飞行面接收来自ACC或飞行员的控制输入。它通过错误状态机获取指令,飞行员和acc谁处于控制状态,就获取谁的指令。
- 当ACC处于控制状态时,如果持续不良的控制,会导致事故发生。当飞行员处于控制状态时,飞行员没有及时输入控制命令,也会导致事故影响。
- 当ACC发出ServiceOmission命令时,飞行面控制从ACC切换到飞行员。
- 与飞机的其他部件一样,飞行面也可能遇到机械故障,使其无法响应控制指令。
飞行发动机:aircraft engine
- 发动机作为DAL A部件:它们是非常关键的部件,用于评估ACC对飞机整体安全风险影响的重要因素。
- 发动机被模拟成产生推力的装置。
- 发动机有可能无法产生推力,但可能性很小,我们选择的这种情况的发生率为65万飞行小时会发生一次。
飞行员:pilot
- 飞行员作为ACC的后备选择。
- 飞行员被模拟成一个抽象的组件,其输入来自AOA差异指示器或ACC备用指示器,并且能够控制飞行面以及关闭ACC。
- 飞行员有几种变体:
- Nominal:飞行员从AOA差异指示器获得可视化反馈。当指示器不能提供指示时,飞行员必须从飞机的飞行行为中推断出ACC是否提供了错误的控制指令。如果是,飞行员可以通过关闭ACC来控制局面。当ACC持续发出不良控制行为,需要进行关闭。
- NoACCKnowledge:这里我们模拟飞行员不了解ACC,因此,不会关闭ACC进行控制。
- 出现故障时,飞行员可能会关闭ACC,然后控制飞行面。这些错误发生被纠正的速度,取决于飞行员是否了解ACC、AOA差异探测器工作还是不工作。
飞行系统:aircraft system
- 飞机由两个发动机、飞行面、迎角传感器、各种构型的ACC和飞行员组成。
- 如果两个发动机都出现故障,或者由于ACC或飞行员问题导致飞行面出现事故,则飞机作为一个整体会发生事故。
- 飞行系统有多种配置来支持不同的使用场景。几个包含单AoA传感器的ACC配置,内含AoA差异检测器。还有一个双AoA传感器的ACC配置,以及反映来自不同供应商的AoA传感器的配置。
AADL组成
EMV2错误类型库
该模型库为项目自带的模型库
AircraftSafetyExample_AOADiscrepancy.aadl
包含上述要素和各种飞机配置,用于处理ACC的单个AOA传感器的工作。
AircraftSafetyExample_AOAVendors.aadl
包含来自不同供应商的AOA变体和对应供应商指定AOA的各种飞机配置。
AircraftSafetyExample_ACCAOARedundancy.aadl
包含一个ACC的变体,使用两个AOA传感器和各种飞机配置。
两个重要的ACC操作介绍
带AoA差异指示器的单传感器ACC操作
-
描述:显示了该操作的配置。
- aoa1传感器为ACC供电,aoa1和aoa2差异指示器从这两个AoA传感器获取输入。
- ACC影响飞行面(flightsurface)。
- 飞行员可以观察差异指示器(aoaDiscrepancyIndicator)。
- 在ACC的两个或三个传感器配置中,飞行在进入待机模式时,飞行员也会从ACC获得指示。
- 在高临界部件背景下,飞行面(flightsurface)和两个发动机会共同对ACC产生影响。
-
图表
带ACC待机指示灯的三传感器ACC操作
- 描述:显示了带有使用冗余AoA输入的ACC的系统配置。由于迎角故障或不良输入,或加速控制故障,飞行员被告知加速控制进入加速控制故障模式。
- 图表
实验场景
首先,我们将重点放在使用单个AoA传感器的ACC飞机构型上。然后我们考虑双传感器配置。当我们比较由单个AoA传感器ACC和两个AoA传感器配置之间的概率事故树确定的安全风险时,我们发现,当花费两个传感器配置的额外成本时,可以告知客户他们获得的定量安全风险降低。我们还可以考虑供应商A和供应商B提供的AoA对整体安全风险的影响。
场景A:单传感器ACC操作保持控制,飞行员不熟悉ACC,AoA的差异检测器失效
- 场景
- 飞行员不熟悉ACC,AoA差异检测器无法运作,ACC配置为使用单个AoA传感器输入进行操作。
- AoA的故障发生概率来自于DAL(即规格值)。
- ACC开启时,反复从飞行员手中夺回控制权,使飞机始终处于ACC的控制下;如果ACC处于关闭状态的话,则不会。
对OSSNoACCKnowledge进行具有计算概率的故障树分析
- 步骤
- 结果分析
- 第一行是发生整机故障总的概率,为2.1e-5。
- 从数据上分析:这个概率是由两个引擎错误导致整机故障的概率2.3e-12、ACC错误导致整机故障的概率2.1e-05、由于ACC或驾驶员导致飞行面错误导致整机故障的概率1.3e-12、飞行面本身错误错误导致整机故障的概率2.0e-09进行or运算得到
飞行面本身错误错误导致整机故障的概率,是在aadl里指定的,其他的概率,是由各种指定的概率组合而成的,组合方式可能是and、or、xor
- 从行为上分析:这个该率主要由ACC和飞行员控制共同决定,飞行员不熟悉ACC,因此,没有关闭ACC。在ACC出现故障的时候,我们需要将他关闭,以阻止ACC反复夺取飞机的控制权。其他的飞机组件对整机发生故障概率的影响相对来说微不足道。
- 从数据上分析:这个概率是由两个引擎错误导致整机故障的概率2.3e-12、ACC错误导致整机故障的概率2.1e-05、由于ACC或驾驶员导致飞行面错误导致整机故障的概率1.3e-12、飞行面本身错误错误导致整机故障的概率2.0e-09进行or运算得到
- 虽然其他飞机组件的影响的微不足道,因此我们简单了解几个
- 两个引擎同时发生故障的概率为2.3e-12
- ACC没有开启时飞行员误操作发生故障的概率为1.0e-03
- ACC开启,飞行员作为保障操作飞机发生故障的概率为2.1e-5
- ACC的AoA传感器发生故障造成整机故障的概率为2.1e-5
- 第一行是发生整机故障总的概率,为2.1e-5。
ac.OSSNoACCKnowledge是AircraftSafetyExample_AOADiscrepancy.aadl内的一个实现
对OSSNoACCKnowledge进行具有计算概率的最小割集分析
- 步骤
- 结果分析:
- 显示了在计算与“具有计算概率的故障树分析”相同的飞机配置的最小割集时,相同的计算出现概率结果,都是2.1e-05。最小割集结果还显示了飞行员作为ACC后备的关键作用,以及缺乏ACC知识和操作洞察力的影响。
对OSVBNoACCKnowledge进行具有计算概率的故障树分析
- 步骤
- 结果分析
- 我们为上述飞机模型配置了供应商B的AoA传感器(系统实现ac.OSVBNoACCKnowledge),其产品可靠性远低于规定值。最终的FTA结果显示,飞机总体故障概率增加到5.0e-4。这种增加主要是由供应商B提供的AoA传感器质量下降造成的。换句话说,一个小部件对飞机的整体安全风险有重大影响。
ac.OSVBNoACCKnowledge是AircraftSafetyExample_AOAVendors.aadl内的一个实现
OSS:OneSensorSpec,单一传感器规格
场景B:单传感器ACC操作保持控制,AoA的差异检测器失效
- 场景
- 当ACC处于开启状态并控制飞机、AoA的差异检测器不工作时,飞行员可以从飞机的飞行行为中推断出ACC是否故障,如果故障了可以关闭ACC
对OSSPermanentDiscrepancyFail进行具有计算概率的故障树分析
- 步骤
- 结果分析
- 飞机配置的实现ac.OSSPermanentDiscrepancyFail,表示飞机带有失效的AoA差异传感器和基于标准故障率的AoA传感器
- 我们指定飞行员不能够识别AoA故障发生整机故障的概率为1.0e-3,经过一系列计算后,得出由飞行员错误导致征集故障的概率为1.0e-3,与ACC导致故障导致的概率2.1e-05进行PriorityAnd计算,得到概率为2.1e-08,这个数字主要决定了飞机的总体故障率,由此得出,AoA传感器的故障严重影响了飞机的整体安全。
对OSSPermanentDiscrepancyFail进行具有计算概率的最小割集分析
- 步骤
- 结果分析
- 表中显示了导致相同总体飞机故障率的最小割集结果。此时,我们已经在发生概率中反映了飞行员没有识别出AoA故障的风险的情况。AADL模型可以扩展到执行延迟分析,以考虑高海拔和低海拔作战场景下响应时间慢的风险。
对OSVBNoACCKnowledge进行具有计算概率的故障树分析
- 步骤
- 结果分析
- 最后,我们还使用供应商B(系统实现ac.OSVBPermanentDiscrepancyFail)的AoA传感器评估了这种飞机配置。以确定质量较低的传感器对飞机总体故障率的影响有多大。如表所示,飞机的总体故障率从原来的2.3e-8增加到5.0e-7。由此得出,AoA传感器的质量对飞机的安全性影响很大
场景C:单传感器ACC操作保持控制,AoA的差异检测器正常工作
- 场景
- 飞机配置包含AoA差异探测器和一个具有单一AoA传感器的ACC,同时当AoA出现故障仍然继续控制。因此,飞行员从AoA差异指示推断出ACC故障后,将会关闭ACC。请注意,当差异指示器失效时,飞行员关闭ACC,我们假设此时的故障率为1.0e-3(与之前的场景相同),如果差异指示器正常工作时,关闭ACC的故障率会更低,因为飞行员并非只能通过差异灯得出ACC是否故障,飞行员也有自己的判断,所以出故障的可能会更低一些。
对OneSensorSpec进行具有计算概率的故障树分析
- 结果分析
- FTA分析的结果如图所示。在这种配置下,我们可以看到飞行表面故障率(2.0e-9)成为造成总体飞机故障率的主要因素。
对OneSensorVB进行具有计算概率的故障树分析
- 结果分析
- 拿供应商B的AoA传感器进行分析,得到飞机总体故障率增加到2.5e-9。
场景D:双传感器ACC操作保持控制,AoA的差异检测器正常工作
- 场景
- 这个场景反映了使用两个AoA传感器操作的ACC的飞机。当它检测到AoA差异并通知飞行员这种情况时,ACC将进入待命状态,ACC将控制权交给飞行员。
对TwoSensorSpec进行具有计算概率的故障树分析
- 结果分析:
- 飞机总体故障率2.0e-9是由飞行面故障率驱动的。ACC/飞行员爬升控制“子系统”的故障率在4.2e-17左右。
对TwoSensorSpec进行具有计算概率的故障树分析
- 结果分析:
- 拿供应商B的AoA传感器进行分析,飞机总体的故障率保持不变,但ACC/Pilot爬升控制“子系统”的故障率上升到1.0e-15,这仍低于发动机对的故障率(2.3e-12)。
总结
技术总结
- 在示例中,希望将飞行员的角色作为一个被分配了一个较低DAL的组件(ACC)的保障,也就是ACC正常那么ACC控制飞机,ACC异常了再考虑飞行员控制飞机。ACC依赖于一个单一的数据源,即AoA传感器,它从三个不同质量水平的供应商那里获得相应的故障概率,并且在运行过程中有损坏的可能。在飞机的自动飞行和飞行员操作过程中,作出了各种决定,但没有保证飞行员操作绝对没问题,而是在设备没有任何问题的时候,飞行员可能会造成事故,设备有问题,飞行员更有可能造成事故。通过例子表明,飞机的整体安全风险与AoA传感器的故障率和ACC设计的故障率有很大关系。
- 通过这些例子,我们已经证明了在整个产品生命周期中进行安全风险分析是可行的——即使飞机已经在运行中,我们使用了概率故障树和最小切割集分析来确定飞机在一系列使用场景下的总体安全风险。这种分析可以很容易地对不同的假设场景重复实验,不仅在系统安全评估(SSA)中预先应用,而且在整个开发和操作过程中,根据操作设置和设计的决策可以进行相应的更改。
学习总结
- 通过这个样例,学到了什么呢
- error type和error behavior要单独找一个aadl存放,方便调用
- error types里将所有的错误类型都放进去,在其他aadl内作为组件特征的类型使用。
- error behavior主要放入实验主体的状态,比如,控制飞机爬升的就两种状态,ACC或驾驶员,ACC的状态有五种,正常、错误控制、持续错误控制、待机、故障,虽然状态很多,但也并非需要全部使用
- Incident和其他的错误类型有什么区别?
- Incident表示更严重的事故,其他的错误类型可能导致该事故的发生。而我们实验要得到的数据,是由多种组件各自Incident概率计算出来的飞机整体Incident的概率。
- 比如PilotInChargeMistake: PilotInCharge -[pilotcmd {NoPilotControl}]-> flightsurfaceeffect {Incident},就是由飞行员的错误类型NoPilotControl导致飞行员的该错误类型Incident。
- error type和error behavior要单独找一个aadl存放,方便调用
- 这个实验是我学习EMV2的开端,也教会了我很多关于硬件建模的方法,非常适合初学者。
- 初学很苦,很难,而且资料还很少,每一篇好的样例都值得分享。
部分代码解释
acemlib
--Copyright 2019 Carnegie Mellon University.
--This material is based upon work funded and supported by the Department of Defense under Contract No. FA8702-15-D-0002 with Carnegie Mellon University for the operation of the Software Engineering Institute, a federally funded research and development center.
--The view, opinions, and/or findings contained in this material are those of the author(s) and should not be construed as an official Government position, policy, or decision, unless designated by other documentation.
--NO WARRANTY. THIS CARNEGIE MELLON UNIVERSITY AND SOFTWARE ENGINEERING INSTITUTE MATERIAL IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.
--[DISTRIBUTION STATEMENT A] This material has been approved for public release and unlimited distribution. Please see Copyright notice for non-US Government use and distribution.
--Internal use:* Permission to reproduce this material and to prepare derivative works from this material for internal use is granted, provided the copyright and 锟絅o Warranty锟� statements are included with all reproductions and derivative works.
--External use:* This material may be reproduced in its entirety, without modification, and freely distributed in written or electronic form without requesting formal permission. Permission is required for any other external and/or commercial use. Requests for permission should be directed to the Software Engineering Institute at permission@sei.cmu.edu.
--* These restrictions do not apply to U.S. government entities.
--Carnegie Mellon锟� is registered in the U.S. Patent and Trademark Office by Carnegie Mellon University.
--DM19-1050
package acemlib
public
annex EMV2 {**
error types
Incident: type;--事故
ACCFail: type;--ACC故障
PilotFlightControlMistake: type;-- 飞行员控制飞机发生故障
ACCFailUnawareFlightControlMistake: type;--acc故障意识不到飞行员飞行控制错误
AOADiscrepancyUnawarePilotMistake: type;--AoA差异检测器未发现飞行员错误
NoPilotControl: type;--飞行员没有控制
NoACCTurnOff: type;--没有开启ACC
NoACCKnowledgeNoTurnoff: type;--不具备ACC知识且没有开启ACC
AOADiscrepancyUnawareNoTurnoff: type;--AoA差异灯不工作时无法关闭ACC
AOADiscrepancyAwareNoTurnoff: type;--AoA差异灯工作时无法关闭ACC
BadACCControl: type;--ACC控制异常
ContinuousBadACCControl: type;--ACC保持错误控制
end types;
error behavior ACCStates
states
operational: initial state;
badcontrol: state;
continuousbadcontrol: state;
standby: state;
failed: state;
end behavior;
error behavior ClimbControlStates
states
ACCInCharge: initial state;--ACC掌握主动权
PilotInCharge: state;--飞行员掌握主动权
end behavior;
**};
end acemlib;
AircraftSafetyExample_AOADiscrepancy
--Copyright 2019 Carnegie Mellon University.
--This material is based upon work funded and supported by the Department of Defense under Contract No. FA8702-15-D-0002 with Carnegie Mellon University for the operation of the Software Engineering Institute, a federally funded research and development center.
--The view, opinions, and/or findings contained in this material are those of the author(s) and should not be construed as an official Government position, policy, or decision, unless designated by other documentation.
--NO WARRANTY. THIS CARNEGIE MELLON UNIVERSITY AND SOFTWARE ENGINEERING INSTITUTE MATERIAL IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.
--[DISTRIBUTION STATEMENT A] This material has been approved for public release and unlimited distribution. Please see Copyright notice for non-US Government use and distribution.
--Internal use:* Permission to reproduce this material and to prepare derivative works from this material for internal use is granted, provided the copyright and 锟絅o Warranty锟� statements are included with all reproductions and derivative works.
--External use:* This material may be reproduced in its entirety, without modification, and freely distributed in written or electronic form without requesting formal permission. Permission is required for any other external and/or commercial use. Requests for permission should be directed to the Software Engineering Institute at permission@sei.cmu.edu.
--* These restrictions do not apply to U.S. government entities.
--Carnegie Mellon锟� is registered in the U.S. Patent and Trademark Office by Carnegie Mellon University.
--DM19-1050
package AircraftSafetyExample::AOADiscrepancy
public
--
-- AoA传感器
--
device aoasensor
features
-- 输出AoA检测的错误结果
aoareading: out data port;
-- 附录内定义了AoA传感器发生错误的两种可能,并指定了他们的概率
annex emv2 {**
use types ErrorLibrary, acemlib;
error propagations
-- aoareading有两种状态:值BadValue,ServiceOmission
-- ServiceOmission表示传感器无法产生任何输出。
-- BadValue表示传感器产生不正确的值。
aoareading: out propagation {BadValue, ServiceOmission};
flows
-- 流都是aoareading
reading: error source aoareading {BadValue, ServiceOmission};
end propagations;
-- 定义流reading的两种错误类型BadValue和ServiceOmission发生的概率,分别为1.0E-5和1.1E-5
properties
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.0E-5;] applies to reading.BadValue;
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.1E-5;] applies to reading.ServiceOmission;
**};
end aoasensor;
--
-- 辅助爬升控制
-- 简称ACC
--
abstract AuxClimbControl
features
-- 有两个来自传感器的输入
-- 内部特征ACCOnOff,表示ACC功能是否开启
-- 外部特征controlsurfacecmd,表示控制飞行面命令
-- 外部特征ACCStandbyIndicator,表示ACC备用指示器
aoa1: in data port;
aoa2: in data port;
ACCOnOff: in feature;
controlsurfacecmd: out feature;
ACCStandbyIndicator: out feature;
annex emv2 {**
use types ErrorLibrary, acemlib;
-- 传播类型aoa1,有BadValue和ServiceOmission两种类型
-- 传播类型ACCOnOff,只有NoACCTurnOff一种类型
-- 这两个传播类型不用于本抽象构建,而是用在了本构建的实现上
error propagations
aoa1: in propagation {BadValue, ServiceOmission};
ACCOnOff: in propagation {NoACCTurnOff};
end propagations;
-- 定义一个事件fail,类型为ACCFail
component error behavior
events
fail: error event {ACCFail};
end component;
-- 定义fail.ACCFail发生的概率为1.3E-6
properties
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.3E-6;] applies to fail.ACCFail;
**};
end AuxClimbControl;
--
-- 辅助爬升控制实现传感器1的功能
--
abstract implementation AuxClimbControl.sensor1
annex emv2 {**
-- 调用两个包内的类型
use types ErrorLibrary, acemlib;
-- 调用acemlib内的错误表现ACCStates内的状态
use behavior acemlib::ACCStates;
-- 创建传播controlsurfacecmd,表示控制面命令的错误有两种ContinuousBadACCControl, ServiceOmission
error propagations
controlsurfacecmd: out propagation {ContinuousBadACCControl, ServiceOmission};
end propagations;
component error behavior
transitions
-- continuousbadcontrol的状态由operational过渡到aoa1
operational -[aoa1 {BadValue, ServiceOmission}]-> continuousbadcontrol;
propagations
-- Continuousbadcontrol状态下,发生ACCOnOff {NoACCTurnOff}时,会导致controlsurfacecmd {ContinuousBadACCControl}
Continuousbadcontrol -[ACCOnOff {NoACCTurnOff}]-> controlsurfacecmd {ContinuousBadACCControl};
-- 任意状态下,发生fail {ACCFail}时,会导致controlsurfacecmd {ServiceOmission}
all -[fail {ACCFail}]-> controlsurfacecmd {ServiceOmission};
end component;
**};
end AuxClimbControl.sensor1;
--
-- 飞行员
--
abstract pilot
features
-- 内部特征discrepancylight:差异灯
-- 内部特征ACCStandbyIndicator:ACC备用指示器
-- 外部特征controlsurfacecmd:控制飞行面指令
-- 外部特征ACCOnOff:ACC开关
discrepancylight: in feature;
ACCStandbyIndicator: in feature;
controlsurfacecmd: out feature;
ACCOnOff: out feature;
end pilot;
--
-- 飞行员控制飞机的一般操作
--
abstract implementation pilot.nominal
-- 飞行员在没有差异检测器指示的情况下操作
annex emv2 {**
use types ErrorLibrary, acemlib;
error propagations
-- 内部传播discrepancylight:差异灯,定义为ServiceOmission类型
-- 外部传播controlsurfacecmd:控制飞行面命令,定义为无飞行员控制
-- 外部传播ACCOnOff:ACC开关命令,定义为没有关闭ACC按钮
discrepancylight: in propagation {ServiceOmission};
controlsurfacecmd: out propagation {NoPilotControl};
ACCOnOff: out propagation {NoACCTurnOff};
end propagations;
component error behavior
events
-- 定义一个事件mistakes,有四种可能的错误事件值
mistakes: error event {NoACCKnowledgeNoTurnoff, AOADiscrepancyUnawareNoTurnoff, AOADiscrepancyAwareNoTurnoff,
PilotFlightControlMistake};
propagations
-- 定义一个传播PilotTurnOff,表示飞行员关闭ACC
-- PilotTurnOff取值为AoA差异指示灯不工作或差异指示灯产生不正确的值,且ACC没有注意到差异指示灯有问题
-- 此时,PilotTurnOff的类型就是NoACCTurnOff,不开启ACC,由飞信管控制飞机
PilotTurnOff: all -[mistakes {AOADiscrepancyAwareNoTurnoff} or discrepancylight {ServiceOmission} and
mistakes {AOADiscrepancyUnawareNoTurnoff}]-> ACCOnOff {NoACCTurnOff};
-- 飞行员控制飞机时出错,PilotControl的类型就是NoPilotControl,控制会被ACC收回,飞行员不再控制飞机
PilotControl: all -[mistakes {PilotFlightControlMistake}]-> controlsurfacecmd {NoPilotControl};
end component;
properties
-- 飞行员控制飞机发生故障的概率指定为1.0E-6
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.0E-6;] applies to mistakes.PilotFlightControlMistake;
-- 差异灯不工作时无法关闭ACC的概率为1.0E-3
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.0E-3;] applies to mistakes.AOADiscrepancyUnawareNoTurnoff;
-- 差异灯工作时无法关闭ACC的概率1.0E-6
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.0E-6;] applies to mistakes.AOADiscrepancyAwareNoTurnoff;
**};
end pilot.nominal;
--
-- 飞行员控制飞机的一般操作,但此时飞行员不懂ACC,不会操作ACC
--
abstract implementation pilot.NoACCKnowledge extends pilot.nominal
-- 操作过程中,差异灯不工作
annex emv2 {**
component error behavior
propagations
-- 不具备ACC知识且没有开启ACC 和 服务遗漏 二者满足一个及以上,同时AoA差异灯不工作时无法关闭ACC
-- 此时,PilotTurnOff赋值为ACC关闭
PilotTurnOff: all -[1 ormore (mistakes {NoACCKnowledgeNoTurnoff}, discrepancylight {ServiceOmission} ,
mistakes {AOADiscrepancyUnawareNoTurnoff})]-> ACCOnOff {NoACCTurnoff};
end component;
properties
-- 指定不具备ACC知识且没有开启ACC发生事故的概率为1(按照专家知识应该是0.99999...)
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.0;] -- rare expert knowledge change to .99 instead of 1.0
applies to mistakes.NoACCKnowledgeNoTurnoff;
**};
end pilot.NoACCKnowledge;
-- 飞行面设备
device flightsurface
features
-- 输入特征:自动命令
-- 输入特征:飞行员命令
-- 输出特征:海平面影响
autocmd: in feature;
pilotcmd: in feature;
flightsurfaceeffect: out feature;
annex emv2 {**
-- 调用ErrorLibrary, acemlib两个包中的type
use types ErrorLibrary, acemlib;
-- 调用acemlib包中的行为ClimbControlStates(这个行为只声明了两个状态ACCInCharge和PilotInCharge)
use behavior acemlib::ClimbControlStates;
error propagations
-- 自动命令的类型可能是ServiceOmission或ContinuousBadACCControl
-- 飞行员命令的类型可能是NoPilotControl
-- 海平面影响的类型Incident
autocmd: in propagation {ServiceOmission, ContinuousBadACCControl};
pilotcmd: in propagation {NoPilotControl};
flightsurfaceeffect: out propagation {Incident};
end propagations;
-- 错误行为创建
component error behavior
events
-- 定义一个事件,飞行面故障
FlightSurfaceFailure: error event;
transitions
-- 当前状态处于ACC掌握主动权(ACCInCharge)时,如果传感器无法产生任何输出(ServiceOmission)
-- 那么当前状态将改为飞行员掌握主动权(PilotInCharge)
ACCFails: ACCInCharge -[autocmd {ServiceOmission}]-> PilotInCharge;
propagations
-- 在飞行员控制飞机时,发生飞行员操作错误情况,会导致飞行面出现故障引发事故
PilotInChargeMistake: PilotInCharge -[pilotcmd {NoPilotControl}]-> flightsurfaceeffect {Incident};
-- 在ACC控制飞机,发生ACC持续操作错误,会导致飞行面出现故障引发事故
ACCContControl: ACCInCharge -[autocmd {ContinuousBadACCControl}]-> flightsurfaceeffect {Incident};
-- 在任何情况下,如果飞行面出现错误,会导致飞行面出现故障引发事故
FSFail: all -[FlightSurfaceFailure]-> flightsurfaceeffect {Incident};
end component;
properties
-- 指定飞行面故障FlightSurfaceFailure的概率为2.0e-9
EMV2::OccurrenceDistribution => [
ProbabilityValue => 2.0e-9;] applies to FlightSurfaceFailure;
**};
end flightsurface;
--
-- aoa差异检测器
--
device aoadiscrepancydetector
features
aoa1: in data port;
aoa2: in data port;
discrepancylight: out feature;
annex emv2 {**
use types ErrorLibrary, acemlib;
error propagations
aoa1: in propagation {BadValue, ServiceOmission};
aoa2: in propagation {BadValue, ServiceOmission};
discrepancylight: out propagation {ServiceOmission};
end propagations;
component error behavior
events
-- 定义事件:差异检测器故障
DiscrepancyDetectorFailure: error event;
propagations
-- 定义传播,任何情况都都有可能出现DiscrepancyDetectorFailure事件,导致差异检测器无法产生任何输出
all -[DiscrepancyDetectorFailure]-> discrepancylight {ServiceOmission};
end component;
-- 这种情况的概率是1.0e-6
properties
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.0e-6;] applies to DiscrepancyDetectorFailure;
**};
end aoadiscrepancydetector;
--
-- 实现aoa差异检测器永久失效情况
--
device implementation aoadiscrepancydetector.permanentFail
annex emv2 {**
-- 当aoa差异检测器永久失效时,100%会导致差异检测器DiscrepancyDetectorFailure失灵
properties
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.0;] applies to DiscrepancyDetectorFailure;
**};
end aoadiscrepancydetector.permanentFail;
--
-- 飞机引擎
--
device Engine
-- 推力
features
thrust: out feature;
annex emv2 {**
use types ErrorLibrary, acemlib;
error propagations
-- 推力故障
thrust: out propagation {Incident};
flows
-- 推力故障流
engineFailure: error source thrust {Incident};
end propagations;
properties
-- 有1.5E-6的概率发生推力故障流
EMV2::OccurrenceDistribution => [
ProbabilityValue => 1.5E-6;] applies to engineFailure;
**};
end Engine;
--
-- ac:aircraft,飞机
--
system ac
-- 飞机动力
features
aceffect: out feature;
annex emv2 {**
use types acemlib;
error propagations
aceffect: out propagation {Incident};
end propagations;
**};
end ac;
--
-- 飞机正常飞行
--
system implementation ac.common
subcomponents
aoa1: device aoasensor;--aoa传感器
flightsurface: device flightsurface;--飞行面
ACC: abstract AuxClimbControl.sensor1;--ACC传感器
pilot: abstract pilot.nominal;--正常操纵飞机的飞行员
engine1: device engine;--飞机引擎1
engine2: device engine;--飞机引擎2
connections
-- 对ac每一个组件都有一个数据获取的链接,对ac的特征aceffect也有一个数据获取的链接
a1: port aoa1.aoareading -> ACC.aoa1;--ACC的aoa1传感器获取aoa1设备的aoareading端口的值
autoctrl: feature ACC.controlsurfacecmd -> flightsurface.autocmd;--飞行面自动命令来源于ACC控制飞行面指令
pilotctrl: feature pilot.controlsurfacecmd -> flightsurface.pilotcmd;--飞行面飞行员命令来源于飞行员控制飞行面指令
pilotTurnOff: feature pilot.ACCOnOff -> ACC.ACCOnOff;--ACC是否开启取决于飞行员
controleffect: feature flightsurface.flightsurfaceeffect -> aceffect;--飞机动力来源于飞行面动力
engine1conn: feature engine1.thrust -> aceffect;--引擎推力来源于飞机动力
engine2conn: feature engine2.thrust -> aceffect;
annex emv2 {**
use types ErrorLibrary, acemlib;
component error behavior
propagations
acincident: all -[1 ormore (flightsurface.flightsurfaceeffect {Incident}, engine1.thrust {Incident} and
engine2.thrust {Incident})]-> aceffect {Incident};
end component;
**};
end ac.common;
system implementation ac.OneSensorSpec extends ac.common
subcomponents
aoa2: device aoasensor;
aoaDiscrepancyIndicator: device aoadiscrepancydetector;
connections
amon1: port aoa1.aoareading -> aoaDiscrepancyIndicator.aoa1;
amon2: port aoa2.aoareading -> aoaDiscrepancyIndicator.aoa2;
monlight: feature aoaDiscrepancyIndicator.discrepancylight -> pilot.discrepancylight;
end ac.OneSensorSpec;
system implementation ac.OSSPermanentDiscrepancyFail extends ac.OneSensorSpec
subcomponents
aoaDiscrepancyIndicator: refined to device aoadiscrepancydetector.permanentFail;
end ac.OSSPermanentDiscrepancyFail;
system implementation ac.OSSNoACCKnowledge extends ac.OSSPermanentDiscrepancyFail
subcomponents
pilot: refined to abstract pilot.NoACCKnowledge;
end ac.OSSNoACCKNowledge;
end AircraftSafetyExample::AOADiscrepancy;