【OSATE学习笔记】Error Model Annex介绍(内含样例)

Annex介绍

  • AADL定义了一种通过它用户可引入附件库的标准语法结构
  • Annex模板:annex <annex name>{** <library content> **};

Error Model Annex介绍

  • Error Model Annex提供了在体系结构中指定错误传播和错误行为的能力。
  • 本Annex于2015年9月在最新修改的AS5506/1中提出,取代了AS5506/1第一修订版中现有的Error Model Annex,因此本Annex简称为EMV2。
    在这里插入图片描述

使用注意事项

  • Error Model语言的目标是支持对系统可靠性、可用性、安全性、生存性、健壮性和弹性的定性和定量评估,以及确保系统设计和实现符合嵌入式软件、计算机平台和物理系统的注释架构模型中指定的故障缓解策略。
  • 2015年修订的AS5506/1定义了Error Model语言的架构,称为Error Model V2(EMV2)。在EMV2中表达的声明可以通过error annex子条款与在核心AADL中表示的嵌入式系统体系结构的组件相关联。EMV2中定义的语言特性可以规范故障类型、单个组件的故障行为、影响相关组件的故障传播、故障行为的聚合和组件层次结构的传播、实际系统体系结构中预期的容错策略。
  • AADL的目的是基于嵌入式系统模型计算机,由嵌入式软件的运行时架构、分散的计算机平台、嵌入式系统交互的物理系统组成,在这种情况下,Error Model语言定义了一些列语法规则,可以用来声明error annex中Error Model与架构规范中的组件。
  • 根据[ISO/IEC/IEEE 24765:2010]的定义中介绍的错误(error), 故障(fault), 失败(failure), 危险(hazard)等术语。为了描述Error Model子语言的语言构造,同时作为语言中的关键字,该标准选择了error这个词。
  • EV2引入了error type的概念来描述错误事件、状态和传播。error type集被组成错误类型库,用于注释错误事件、错误状态和错误传播。Error Model语言包括一组预定义的error type,作为系统识别不同类型的错误传播的起点——提供了一个错误传播本体。用户可以将此本体进行适应并扩展到特定的领域。
  • EV2支持错误传播声明,即与组件的交互点(如端口和部署绑定等特性)相关联的传播错误类型的规范,以表示与相关组件的传入和传出的错误传播。用户还可以指定假定不会传播的错误类型(错误控制)。对于每个组件,我们还可以指定一个错误路径,无论一个组件是传播的错误源还是错误汇聚,还是作为相同或不同错误类型(eror path)的输出路径传递给传入传播。
  • EMV2支持组件错误行为的规范,即错误行为状态机具有在指定条件下发生的一组状态和转换,以及组件本地的规范错误、恢复和修复事件。它们与组件相关联,以指定组件的错误状态如何由于错误事件和错误传播以及修复事件而引起的更改。错误事件和状态可以通过引用错误类型来指示它们所表示的错误类型。错误行为规范还根据组件错误行为状态和传入错误传播声明了传出错误传播的条件。例如,组件的错误状态可能会由于组件本身的错误事件和/或由于从某些其他组件传播到该组件的错误而发生变化。这使我们能够根据单个组件自身的错误事件和来自其他组件的传入错误传播的影响来描述其错误行为,以及可能影响其他组件的传出错误传播发生的条件。
  • EMV2支持将组件的复合错误行为指定为以其子组件的错误状态的情况来决定组件的错误状态。例如,具有内部冗余的组件只有在其两个或多个子组件处于错误状态时才可能处于错误状态。组件产生的复合错误行为必须与错误行为状态机表示的抽象错误行为规范相一致。这允许我们在不同的架构抽象和保真度的不同级别上建模错误行为,并保持这些规范的一致性。
  • EMV2支持说明由对通信信息执行连接指定的传输所涉及的组件传播的错误的影响。
  • 最后,EMV2支持详细说明组件如何通过冗余和投票来检测和减轻其子组件或它们所依赖的组件中的错误。在附件中,提供了将指定的错误行为与系统体系结构的健康监控和管理元素联系起来,以及在核心AADL和SAEAS5506-2中发布的AADL行为附件中表示的行为。
  • 本annex文件中定义的语言特性可用于指定嵌入式计算机系统架构中使用的风险缓解方法,以提高可靠性、可用性、安全性、安全性、生存性、鲁壮性和弹性。一个完整系统的错误行为产生于单个组件错误行为模型之间的相互作用。本annex定义了整体支持视系统错误行为为其组件错误模型的组成,其中组成取决于架构规范的结构和属性。更正式地说,组件错误模型是一个随机自动机,组成组件随机自动机错误模型形成系统错误模型的规则取决于架构规范中声明的潜在错误传播和错误管理行为。
  • 错误模型语言可用于注释嵌入式系统的AADL模型支持的安全评估和分析引用SAE ARP4761,“指南和方法进行安全评估过程民用载系统和设备”和MIL-STD-882E系统安全。这些评估包括功能危害评估(FHA)、失效模式和影响分析(FMEA)、故障树分析(FTA)和共同原因分析(CCA)。FMEA是一种归纳推理(正向逻辑)技术,在一个系统的传播图上从单一原因识别所有的影响,而故障树反映了演绎推理(向后逻辑),考虑了所有对事件/事故的可能因素。
  • 在后一种情况下,不仅要考虑错误事件,还要考虑恢复和修复事件。这些分析可以应用于功能体系结构、概念系统体系结构,以及将功能体系结构映射到概念系统体系结构的结果。
  • 在软件的情况下,错误是在需求规范和设计中,我们不能假设为零缺陷。换句话说,我们必须假设出现的概率为1,并使用诸如分析冗余而不是复制等技术来解决这些错误。EMV2允许建模人员将错误源和事件描述为固有的设计错误,而不是具有实际发生概率的物理组件错误。
  • 安全涉及信息的机密性、完整性和可用性以及能力。而安全的重点是防止无害行为的意外行为造成的损失——主要是生命和财产。安全措施的重点是防止由于恶意行为者的故意行为而造成的损失——主要是信息和由此造成的财产损害。最主要的区别在于其意图和由此造成的损害的类型。安全术语包括漏洞(安全危害)、威胁(错误源和事件)、入侵(导致错误状态转换的错误事件的实例)和事件(入侵对另一个组件或系统的错误状态的影响)。违反安全规定的行为可能会影响安全,反之亦然。EMV2的体系结构错误建模能够允许在同一个框架内分析和减轻安全问题。
  • AADL和EMV2的体系结构错误建模能力支持系统的增量开发和组合验证。EMV2注释被附加到适用于这些组件的所有实例的组件分类器声明中。系统组件既可以具有抽象的错误行为规范,也可以具有复合错误行为规范,它将子组件的抽象错误行为及其交互映射到抽象规范中。这种基于契约的组合方法允许对可靠性、可用性、安全性、生存性、健壮性、安全性和弹性问题,利用体系结构抽象,进行可扩展的增量分析和验证。
  • 本annex中定义的规则确保了体系结构规范中的EMV2注释是一致和完整的。分析的表示,例如故障树、马尔可夫链或Petri网络模型,都是由这个架构错误模型自动生成的。对架构规范的修改通过自动再生它们传播到这些分析模型中。

概念和术语

  • 介绍了本annex文件中使用的概念和术语。
  • 本节的定义是基于系统和软件工程术语的定义:ISO/IEC/IEEE24765:2010

Error:错误

  • Error被定义为四种情况:
    • 人为产生的错误结果,例如软件内部的缺陷
    • 定义了一个不正确的步骤,过程,或数据
    • 不正确的结果
    • 计算、观察或测量的值或条件,与真实、指定或理论上正确的值或条件、故障、缺陷,之间的差异
  • Error涵盖mistake:在人们错误地设计或开发,是软件运行存在缺陷,从而可能导致有问题的设计或操作系统,有问题的系统产生的行为的影响和描述不正确的行为作为失败的指示,叫做error。换句话说,Error是处理架构错误建模中最普遍和全面的术语。
  • 在EMV2中,我们始终使用error这个术语作为所有EMV2结构的关键字。我们这样做是为了避免与AADL核心语言或其他annex中的类似结构、事件与错误事件或状态与错误状态的混淆。

Fault:缺陷

  • Fault被定义为三种情况:
    • 在软件中出现的错误
    • 在计算机程序中不正确的步骤,过程,或数据
    • 硬件色被或组件的缺陷
  • Fault是可能导致在Failure中发生Error的根本原因,即组件内结构或数据中的不希望的异常变化。Fault可能导致该组件最终不能按照其标称规格执行,并导致功能发生故障或无效,从而导致Failure。
  • 在EMV2中,我们将不同类型的Fault表示为error type,在错误传播抽象中,组件中错误的存在被表示为错误源,并以适当的error type作为错误源。在组件错误行为抽象中,故障被表示为具有error type的错误事件。错误事件的实例表示Fault的激活,即Failure。

Failure:失败,失效

  • Failure被定义为两种情况:
    • 产品执行所需功能的能力终止或无法在先前规定的范围内执行;
    • 系统或系统组件在规定范围内不执行所需功能的情况。
  • Failure是指行为偏离标准规范,导致故障和功能丧失,即组件不再发挥预期的功能。这可能是由于组件内激活的故障,由于来自另一个组件的错误传播,或由于与其他组件交互时的异常条件。偏差可以分为失败的类型、持久性和严重程度。故障影响标称行为的程度被称为故障的严重程度。
  • EMV2中,我们将Failure表示为Error源的发生实例和错误事件的实例。错误事件实例会导致转换到Error状态,该状态表示组件Failure模式。错误源标识包括错误类型在内的输出错误传播,这反映了组件的Failure模式(Error状态)可能会影响与之交互的组件。传播路径由AADL核心模型决定。

Hazard:危害

  • Hazard被定义为三种情况:
    • 一种内在属性或条件有可能造成伤害或损坏.
    • 潜在不安全的条件导致Error、Failure、失灵、外部事件、或这些情况的组合
    • 潜在的伤害或潜在的人身伤害,损害健康、财产、或环境、或这些情况的组合
  • Hazard的定义特别是指不安全的条件。我们将使用“Hazard”一词来指代可能导致伤害的相互作用的系统组件或操作环境元素上的任何异常系统状态或异常条件。我们使用术语意外安全危险( safety hazards )和人为安全危险(security hazard)来进行区分应该会有所帮助。一个或多个危险可能是导致灾难性事件或事故的原因。一个危险可能有一个或多个因素导致,即它受到系统或环境中的一个或多个组件的影响。
  • 在EMV2中,我们用一个多值属性来表示危险,该属性可以与错误源、错误状态和错误传播相关联,即与系统的错误传播图中的任何元素相关联。

failure condition:不利条件

failure condition是指考虑到相关的不利操作或环境条件、由一个或多个failure 、 malfunction、外部事件、error或他们的组合造成或造成的直接或间接影响的条件。

failure condition effect:不利条件的影响

failure condition effect是指考虑相关的不利操作或环境条件,对一个或多个failure 、 malfunction、外部事件、error或他们的组合造成的直接和后果的影响。

failure effect:失效影响

failure effect是由于故障导致的系统或项目无法运行的影响,即出现故障时对系统或项目的运行、功能或状态的后果。

mishap:事故

mishap是指导致意外死亡、伤害、职业病、设备或财产损坏或损失或环境损害的事件或一系列事件。就本标准而言,“事故”一词包括计划事件对环境的负面影响。

likelihood:非定量可能性

likelihood是一个给定事件发生的可能性的一个非特定的相对表示。(例如,高可能性、低可能性、降低可能性等)。

probability:定量可能性

probability是对一个给定的事件将发生的可能性的一种定性的或定量的表示。probability是一个介于0到1之间的特定数值。

probability与likelihood区别:likelihood:不可能,几乎不可能;probability: 1.0 ∗ 1 0 − 7 1.0*10^{-7} 1.0107,这件事发生的可能性为 1.0 ∗ 1 0 − 7 1.0*10^{-7} 1.0107

risk:风险

risk是指风险发生的概率(可能性)和严重程度。

target risk

目标风险是已确定为可接受的定义风险(危害严重程度和概率的组合)。

development assurance:开发保证

development assurance一词指的是用来以充分的信心水平证实需求错误的所有有计划和系统的行动。设计和实施已经被确定和纠正。

development assurance level(DAL):

development assurance level(DAL)指的是执行开发保证任务的严格程度,以证明,有足够的信心水平,开发错误已被识别和纠正,以使系统满足适用的认证基础。

security:安全

security被定义为保护系统项目免受意外或恶意访问、使用、修改、销毁或披露。安全的定义包括来自系统外部的意外恶意指示异常行为,或通过未经授权的跨越系统内部边界,通常指利用 fault。

threat:威胁

threat被定义为

  • 一种系统或系统环境的状态,可能在一个或多个给定风险维度中导致不利影响。
  • 对项目不利的条件或情况,消极的情况,消极的事件,如果发生它将对项目目标产生负面影响的风险,或负面变化的可能性。

vulnerability:漏洞

vulnerability被定义为在信息系统、系统安全程序、内部控制或实现中可能被威胁源利用或触发的弱点。

Error Model Libraries(错误模型库)

  • 描述了可重用的错误模型库。包含可重用的声明,如包含错误和修复事件的一组错误类型和错误行为状态机规范。错误模型库已在软件包中声明。这些可重用声明可以在annex子组件中引用。
  • 语法
    annex调用
error_model_library ::=
	annex EMV2 (
		({** error_model_library_constructs **})
		| none
	);

错误模型库结构

error_model_library_constructs ::=
	[ error_type_library ]
	{ error_behavior_state_machine }*
	{ error_type_mappings }*
	{ error_type_transformations }*

引用错误模型库

error_model_library_reference ::=
	package_or_package_alias_identifier
  • 命名规则
    • 错误模型库为可重用项提供了一个特定于错误模型的名称空间,例如错误类型、类型集、错误行为状态机、类型映射集和类型转换集。定义可重用项的标识符在此错误模型特定的名称空间中必须是唯一的。
    • 包含在另一个包中的错误模型库会被包含错误模型库的包名称所引用(如error_model_library_reference)。它的包名不必在with子句中列出。
  • 语义
    • 以错误模型库和错误模型子子句的形式对核心AADL模型进行的错误模型注释指定了系统及其组件中的故障行为。系统及其组件的名义运行行为以及系统对错误事件、错误传播的响应,以通过故障管理的检测和恢复/修复的形式,由核心单元中的模式和行为附件注释表示。
    • 错误模型库提供了错误类型集和通过错误行为状态机表示的错误行为规范的可重用规范。这些可重用声明可以通过annex子组件来引用,通过使用包名称来限定它们。

Error Model Subclauses(错误模型子条款)

  • 错误模型子条款允许使用错误模型规范注释组件类型和组件实现。这些特定于组件的错误模型规范定义了特性的传入和传出错误传播,以及从传入到传出特性的错误流。它们还根据错误行为状态机来指定组件错误行为,并增强了基于传入传播错误的转换条件、输出传播的条件以及在系统体系结构中检测错误的事件信号。它们根据子组件的错误行为指定组件的复合错误行为。最后,错误模型子句的属性部分将属性值与错误模型语言的元素关联起来,例如错误行为事件、错误传播、错误流和错误状态。

错误类型、类型产品、类型集和类型层次结构

  • 介绍了定义错误类型、错误类型集和错误类型的层次结构的构造结构。

error type:错误类型

error type用于表示正在正在激活的fault的类型、正在传播的error类型,或由系统或组件的error行为状态所表示的error type。

error type product:错误类型产品

error type product表示可能同时发生的两种或多种错误类型的组合。例如,超出范围和延迟交付的组合表示为超出范围的错误类型产品。该类型产品的元素可以按任何顺序排列。

error type set:错误类型集

error type set被定义为一组唯一的元素,例如错误类型和错误类型产品。举个例子,错误类型集可以定义为包含“超出预定范围”和“延迟交付”的元素,其表示为(“超出预定范围”、“延迟交付”)。

union of the two type sets:类型集的并集

当一个错误类型集被列为另一个类型集的元素时,其元素将包含在另一个类型集中。如果两个类型集被列为另一个类型集的元素,则生成的类型集表示这两个类型集的并集。

no error type may be its own subtype:错误类型不能是它自己的子类型

通过将错误类型声明为另一种错误类型的子类型,可以将错误类型组织成一个子类型的类型层次结构。错误类型不能是它自己的子类型。假定属于相同类型层次结构的错误类型不会同时发生,那么,它们不能是相同错误类型产品的不同元素。例如,一个服务项目不能同时提前和延迟。因此,提前交付和延迟交付被定义为时间错误的子类型。

subtypes:子类型

如果具有子类型的错误类型被列为错误类型集的元素,那么它的所有子类型都包含在该类型集中。换句话说,一个具有子类型的错误类型就像一个类型集,其元素是子类型。

element of a type product:类型产品的元素

当具有子类型的错误类型被列为类型产品的元素时,每个子类型都与类型产品的其余元素组合。如果类型产品的几个元素是具有子类型的类型,则会考虑每个类型层次结构中的所有子类型的组合。

error type library:错误类型库

error type library可以定义为现有错误类型库的扩展,将新的错误类型添加到错误类型层次结构中,定义新的错误类型集以及错误类型和错误类型集的别名。

predeclared sets:预先声明的集合

使用此错误模型语言标准定义了预先声明的错误类型集。它们可以使用用户定义的错误类型进行扩展,也可以使用别名进行重命名。

ErrorLibrary:标准错误类型库

  • 这些预先声明的错误类型可用于描述错误传播、错误事件和错误状态。错误事件的发生实例通常映射到少量的错误传播类型,这些类型在不同领域都很常见,因此在这个库中进行了声明,例如ServiceOmission、BadValue等

错误类型层次

  • 服务相关
    在这里插入图片描述
  • 数值相关
    在这里插入图片描述
  • 时间相关
    在这里插入图片描述
  • 复制相关
    在这里插入图片描述
  • 货币相关
    在这里插入图片描述

样例

  • 前面及部分的专业词汇就先介绍这些了,以后有就会再补充吧,如果看不懂这些介绍的话,不如跑一跑下面的样例,顺带补充一句,EMV2的根本目的,就是让你用FTA进行分析各种事情的概率,而我们分析这些概率的过程中,不会考虑事件的具体实现方法,只考虑它出错的概率。

error types和error behavior

  • 代码描述:定义一个annex,包含两种错误类型Collide和EngineFail,包含一个错误行为CarStates,有三个状态run、badcontrol、failed,初始状态为run
  • 样例含义:我们只考虑车辆的两种错误类型,一个是碰撞,另一个是引擎出现故障,假设车辆错误行为有三个状态,初始状态为驾驶员正常操作,车辆正常行驶,如果状态变为驾驶员误操作了,那有一定几率发生碰撞,如果状态变为车辆故障了,有一定几率是发生碰撞,有一定几率是引擎故障(不同状态触发不同错误类型这一部分代码没体现,只是帮助理解)。
package test1
public
	annex EMV2 {**
		
		error types
			Collide: type;--碰撞
			EngineFail: type;--引擎故障
		end types;
		
		error behavior CarStates
			states
				run: initial state;--驾驶员正常操作,车辆正常行驶
				badcontrol: state;--驾驶员误操作
				failed: state;--车辆故障
		end behavior;
	
	**};
	
end test1;

error propagations

  • 样例描述:定义一个设备car,具有两个特征,carStart和carEffect,还有一个annex,annex内获取了test1内的全部error type,然后创建了两个error propagations,一个是carStart特征可能导致Collide类型的出现,另一个是Collide或EngineFail类型的出现可能导致carEffect特征。
  • 样例含义:我们创建了一个设备,叫做Car,表示汽车。他有两个特征,输入特征汽车发动,由驾驶员决定要不要输入,输出特征汽车事故,根据汽车发动后的运行情况决定是否发生汽车事故。在错误传播中表明,汽车发动可能会导致汽车碰撞,碰撞和引擎故障都有可能导致发生汽车事故。
  • 代码:

衔接上一个样例的test1

package test2
public
	device car
		features
			carStart: in feature;--汽车发动
			carEffect: out feature;--汽车事故
		annex emv2 {**
			use types ErrorLibrary,test1;--获取ErrorLibrary和test1包中全部错误类型
			
			error propagations
				--汽车发动可能会导致汽车碰撞
				carStart: in propagation {Collide};
				
				--碰撞和引擎故障都有可能导致汽车事故
				carEffect: out propagation {Collide,EngineFail};
			end propagations;
		**};
			
	end car;
end test2;

component error behavior

propagations

  • 功能描述:表示某状态在遇到什么样的输入传播或行为时,会进行一个什么样的输出传播
  • component error behavior内可以包含propagations,例如下面的propagations,叫做carIncident,用于在任何状态下(all),如果Brake.pedal{Incident}和engine.thrust {Incident})有一个或多个的输出特征发生(1 ormore),那么,carEffect {Incident}输出特征则会发生
component error behavior
	propagations
		carIncident: all -[1 ormore (Brake.pedal{Incident}, engine.thrust {Incident})]-> carEffect {Incident};
	end component;
  • propagations的写法有很多
package test2
public
	
	device device_1
		features
			in_feature_1: in feature;
			out_feature_1: out feature;
		annex emv2 {**
			use types  test1;
			use behavior test1::behavior_1;
			
			error propagations
				in_feature_1: in propagation {error_type_1};
				out_feature_1: out propagation {error_type_1};
			end propagations;
			
			component error behavior
				events
					events_1: error event;
					events_2: error event;
				propagations
					-- 任意状态下,发生events_1时,导致输出特征为out_feature_1 {error_type_1}
					all -[events_1]-> out_feature_1 {error_type_1};
					-- propagations可以有名字,比如下面这个,叫做propagations_1
					propagations_1:all -[events_1]-> out_feature_1 {error_type_1};
					-- 初始状态除了可以是任意状态all以外,还可以是error behavior里的具体状态,如state_1
					--(前提时该行为创建好且包含该状态,同时annex内调用了相应的behavior)
					propagations_2:state_1 -[events_1]-> out_feature_1 {error_type_1};
					-- events_1和events_2同时发生导致输出特征为out_feature_1 {error_type_1}
					propagations_3:all -[events_1 and events_2]-> out_feature_1 {error_type_1};
					-- 除了events,还可以时输入特征,但这个输入特征要在error propagations内声明可能的类型,如in_feature_1
					propagations_4:all -[in_feature_1{error_type_1}]-> out_feature_1 {error_type_1};
					-- events和输入特征可以同时进行and或or组合
					propagations_5:all -[in_feature_1{error_type_1} or events_2 and events_1]-> out_feature_1 {error_type_1};
					-- 也可以用数字+ormore使条件达到一个或多个时满足,ormore内的and和逗号(,)效果一样
					propagations_6:all -[1 ormore(in_feature_1{error_type_1} and events_1 and events_2)]-> out_feature_1 {error_type_1};
		end component;
			
			properties
				EMV2::OccurrenceDistribution => [
					ProbabilityValue => 0.5;] applies to events_1;
				EMV2::OccurrenceDistribution => [
					ProbabilityValue => 0.2;] applies to events_2;
		**};
	end device_1;
	
end test2;
  • 这个例子内调用的test1代码:
package test1
public
   	annex EMV2 {**
   	error types
   		error_type_1: type;
   	end types;
   	
   	error behavior behavior_1
   		states
   			state_1: initial state;
   	end behavior;
   **};
   
end test1;

events

  • 我们创建的error propagations,可以作为component error behavior内propagations的输出特征,如下面的out_feature_1
  • 我们在component error behavior内也可以创建events,events可以在propagations用于组合,将组合结果赋值给输出特征
	error propagations
		out_feature_1: out propagation {error_type_1};
	end propagations;
	component error behavior
		events
			events_1: error event;
			events_2: error event;
		propagations
			all -[events_1 and events_2]-> out_feature_1 {error_type_1};
	end component;

注意,propagations和error propagations不同,不要混淆

transitions

  • 功能描述:从一个状态转移到另一个状态。
  • 我们在component error behavior内可以创建transitions,transitions是根据当前状态和输入特征,计算出接下来的状态。比如如下示例,当前状态为operational,当aoa1 {BadValue, ServiceOmission}和aoa2 {BadValue,ServiceOmission}有一个或以上的输入特征发生时,状态变为standby
	component error behavior
		events
			approxvalue: error event {SymmetricApproximateValue};
			standbyindicatorfail: error event;
		transitions
				op2stdby: operational -[1 ormore (aoa1 {BadValue, ServiceOmission}, aoa2 {BadValue,ServiceOmission})]-> standby;
		propagations
				standbynocontrol: all -[1 ormore (aoa1 {BadValue, ServiceOmission}, aoa2 {BadValue,
						ServiceOmission})]-> controlsurfacecmd {ServiceOmission}; 
				nostandbyindication: all -[standbyindicatorfail]-> ACCStandbyIndicator {ServiceOmission};
	end component;

错误树分析

样例描述

  • 设备device_1发生事件events_1的概率为0.5,发生events_2的概率为0.2,它的输出特征out_feature_1 {error_type_1}是events_1和events_2同时发生的情况
  • 系统system_1具有一个输出特征system_1_out_feature_1传播错误类型,通过system_1.implementation_1进行实现,实现方法是,在任何状态下,将设备device_1的输出特征作为system_1.implementation_1的实现进行输出特征

结果预测

  • 因为设备device_1发生事件events_1的概率为0.5,发生events_2的概率为0.2,所以他们同时发生事件的概率为0.5*0.2=0.1

代码

  • 项目结构
    在这里插入图片描述
  • test1.aadl
package test1
public
		annex EMV2 {**
		error types
			error_type_1: type;
		end types;
	**};
	
end test1;
  • test4.aadl
package test4
public
	
	device device_1
		features
			out_feature_1: out feature;
		annex emv2 {**
			use types  test1;
			
			error propagations
				out_feature_1: out propagation {error_type_1};
			end propagations;
			
			component error behavior
				events
					events_1: error event;
					events_2: error event;
				propagations
					all -[events_1 and events_2]-> out_feature_1 {error_type_1};
			end component;
			
			properties
				EMV2::OccurrenceDistribution => [
					ProbabilityValue => 0.5;] applies to events_1;
				EMV2::OccurrenceDistribution => [
					ProbabilityValue => 0.2;] applies to events_2;
		**};
	end device_1;
	
	system system_1
		features
			system_1_out_feature_1: out feature;
		annex emv2 {**
			use types test1;
			
			error propagations
				system_1_out_feature_1: out propagation {error_type_1};
			end propagations;
			
		**};
			
	end system_1;
	
	system implementation system_1.implementation_1
		subcomponents
			subcomponents_1: device device_1;
		annex emv2 {**
			use types test1;
			
			component error behavior
				propagations
					propagations_1: all -[subcomponents_1.out_feature_1]-> system_1_out_feature_1 {error_type_1};
			end component;
			
		**};
	end system_1.implementation_1;
end test4;

错误树分析结果

  • 对test4.aadl进行Instantiate,然后对实例化的文件test4_system_1_implementation_1_Instance.aaxl2进行Run Fault Tree Analysis,得出如下显示结果
    在这里插入图片描述

Event/Gate Type中的And gate表示下面的组件的概率相乘,如上述中的0.5*0.2=0.1;如果是 Or gate的话表示相加

flows

功能介绍

我们在error propagations内可以创建flows,将flows结果赋值给输出特征,然后在properties内指定不同错误类型发生的概率

样例描述

  • 设备device_1具有一个流flows_1,他的错误类型有test1内的error_type_1和ErrorLibrary内的BadValue两种,我们将流的方向指向device_1的输出端口features_out_data_port,同时在device_1的properties内指定错误类型BadValue可能性是0.2,error_type_1可能性是0.5
  • 系统system_1具有一个输出特征system_1_out_feature_1传播错误类型,通过system_1.implementation_1进行实现,实现方法是,在任何状态下,将设备device_1的输出特征作为system_1.implementation_1的实现进行输出特征

结果预测

  • 因为设备device_1发生流flows_1的两个错误类型的概率分别为0.2和0.5,0.2与0.5进行xor运算结果约为0.67

代码

package test5
public
	device device_1
		features
			features_out_data_port: out data port;
		annex emv2 {**
			use types ErrorLibrary, test1;
			
			error propagations
				features_out_data_port: out propagation {error_type_1,BadValue};
				flows
					flows_1: error source features_out_data_port {error_type_1,BadValue};
			end propagations;
			
			properties
				EMV2::OccurrenceDistribution => [
					ProbabilityValue => 2.0E-2;] applies to flows_1.BadValue;
				EMV2::OccurrenceDistribution => [
					ProbabilityValue => 5.0E-2;] applies to flows_1.error_type_1;
		**};
	end device_1;
	
	
	system system_1
		features
			system_1_out_feature_1: out feature;
		annex emv2 {**
			use types test1;
			
			error propagations
				system_1_out_feature_1: out propagation {error_type_1};
			end propagations;
			
		**};
			
	end system_1;
	
	system implementation system_1.implementation_1
		subcomponents
			subcomponents_1: device device_1;
		annex emv2 {**
			use types test1;
			
			component error behavior
				propagations
					propagations_1: all -[subcomponents_1.features_out_data_port]-> system_1_out_feature_1 {error_type_1};
			end component;
			
		**};
	end system_1.implementation_1;
end test5;

错误树分析结果

在这里插入图片描述

Hazards属性和Run Functional Hazard Assessment分析的使用

目录结构

  • 想要复现可以参考我的目录结构进行复现
    在这里插入图片描述

test7.aadl

  • test7包内是一个简单的system_1,在这个system_1内的EMV2属性包含hazards的部分属性
package test7
public
	with EMV2;

	system system_1
		features
			in_data_port: in data port;
			out_data_port: out data port;
			in_feature: in feature;
		annex emv2 {**
			use types ErrorLibrary;
			
			error propagations
				out_data_port: out propagation {ServiceOmission, ItemOmission};
				in_data_port: in propagation {ServiceOmission, LateServiceStart};
				in_feature: in propagation {ServiceOmission};
				flows
					flows_1: error source out_data_port {ServiceOmission} if "SourcePeterCondition";
					flows_2: error path in_data_port {ServiceOmission} -> out_data_port {ServiceOmission};
					flows_3: error path in_data_port {LateServiceStart} -> out_data_port {ServiceOmission};
					flows_4: error path in_feature {ServiceOmission} -> out_data_port {ServiceOmission};
			end propagations;
			
			properties
				EMV2::hazards => ([crossreference => "1.1.2";
						failure => "Loss of flight control";
						phases => ("all");
						severity => ARP4761::Hazardous;
						likelihood => ARP4761::Remote;
						description => "Loss of flight control leads to non-operational flight surface";
						comment => "Becomes critical hazard.";
					]) applies to flows_1;
				-- Here we express the failure rate of the flight control unit itself through the eror source. 
				-- Same probability of being in FailStop state
				emv2::OccurrenceDistribution => [ProbabilityValue => 0.7e-9; Distribution => Poisson;] applies to flows_1, flows_2;
		**};
	end system_1;

end test7;

test8.aadl

  • test8包内,创建了系统system_2并创建了他的一个实现,来实现system_1
package test8
public
	with test7,EMV2;
	system system_2
		features
			in_feature: in feature;
			in_data_port: in data port;
			out_feature: out feature;
		annex EMV2 {**
			use types ErrorLibrary;
			use behavior ErrorLibrary::FailStop;
			
			error propagations
				in_feature: in propagation {ServiceOmission, ItemOmission};
				in_data_port: in propagation {ServiceOmission, ItemOmission};
				out_feature: out propagation {ServiceOmission, ItemOmission};
				flows
					flows_1: error source out_feature {ServiceOmission} when {ServiceOmission};
					flows_2: error source out_feature {ServiceOmission};
					flows_3: error path in_data_port {ServiceOmission} -> out_feature {ServiceOmission};
					flows_4: error path in_data_port {ServiceOmission} -> out_feature {ServiceOmission};
					flows_5: error path in_feature {ServiceOmission} -> out_feature {ServiceOmission};
			end propagations;
			
			properties
				emv2::OccurrenceDistribution => [ProbabilityValue => 8.0e-7;
					Distribution => Poisson;] applies to out_feature.ServiceOmission, FailStop;
				emv2::OccurrenceDistribution => [ProbabilityValue => 2.0e-7;
					Distribution => Poisson;] applies to out_feature.ServiceOmission;
				emv2::OccurrenceDistribution => [ProbabilityValue => 2.0e-7;
					Distribution => Poisson;] applies to in_data_port.ServiceOmission;
				emv2::OccurrenceDistribution => [ProbabilityValue => 7.0e-7;
					Distribution => Poisson;] applies to in_data_port.ItemOmission;
				emv2::OccurrenceDistribution => [ProbabilityValue => 2.0e-7;
					Distribution => Poisson;] applies to in_feature.ItemOmission;
		**};
	end system_2;


	system implementation system_2.implementation_1
		subcomponents
			subcomponents_1: system test7::system_1;
		connections
			connections_1: feature subcomponents_1.out_data_port -> out_feature;
		annex EMV2 {**
			use types ErrorLibrary;
			
			component error behavior
				propagations
					propagations_1: all -[subcomponents_1.out_data_port {ServiceOmission}]-> out_feature;
			end component;
		**};
	end system_2.implementation_1;

end test8;

Run Functional Hazard Assessment结果

在这里插入图片描述

Hazards全部属性介绍

Hazards: list of record
  (
   CrossReference : aadlstring;   -- 对外部文档的交叉引用
   HazardTitle : aadlstring;      -- 危险的简短描述短语
   Description : aadlstring;      -- 危险描述(与hazardtitle类似)
   Failure : aadlstring;          -- 导致故障影响的系统偏差
   FailureEffect : aadlstring;    -- 故障影响的描述(模式)
   Phases : list of aadlstring;   -- 与危险相关的操作阶段
   Environment : aadlstring;      -- 操作环境描述
   Mishap : aadlstring;           -- 导致以下情况的事件(系列)描述
                                  -- 意外、死亡等。(MILSTD882)
   FailureCondition : aadlstring; -- 导致以下情况的事件(系列)描述
                                  -- 意外、死亡等。(ARP4761)
   Risk : aadlstring;             -- 风险描述。风险的特点是
                                  -- 严重性、可能性和发生概率
   Severity : EMV2::SeverityRange ;             -- 作为严重程度的实际风险
   Likelihood : EMV2::LikelihoodLabels;         -- 作为可能性/概率的实际风险
   Probability: EMV2::ProbabilityRange;         -- 发生危险的可能性
   TargetSeverity : EMV2::SeverityRange;        -- 严重程度可接受的风险
   TargetLikelihood : EMV2::LikelihoodLabels;   -- 作为可能性/问题的可接受风险
   DevelopmentAssuranceLevel : EMV2::DALLabels; -- 开发保证的严格程度 (ARP4761)
   VerificationMethod : aadlstring; -- 解决危险的验证方法
   SafetyReport : aadlstring;       -- 危险分析/评估
   Comment : aadlstring; 
   )
     applies to ({emv2}**error type, {emv2}**type set, {emv2}**error behavior state,
                 {emv2}**error propagation, {emv2}**error event, {emv2}**error flow);

Description : aadlstring applies to (all); `
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

print_Hyon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值