全文约8,800字,建议收藏阅读
1.1 AA与PHM的交互说明
为了与PHM接口交互,配置过程中必须明确指出应用软件所能提供的监督和状态信息。PHM接口利用PortPrototypes(端口原型)和PortInterfaces(端口接口)来供自适应应用进行访问。
在交互过程中,监督与PHM的关系主要通过两个端口接口来定义:PhmSupervisedEntityInterface和PhmCheckpoints。其中,<RPortPrototype>用于从应用软件的角度来表示与PHM的交互。而<SupervisedEntity>实例则是通过表示相应<RPortPrototype>的InstanceSpecifier对象来构建的。
<Checkpoint-name>:代表检查点的唯一短名称(字符串),这是必须填写的字段。
<Checkpoint-id>:用于标识向PHM报告特定检查点的唯一检查点ID(数值),这也是必须填写的字段。
package RootSwComponentPrototype_se0 {
component SwComponentType_se0 {
require Prototype0 for se0
}
}
其中,<RPortPrototypes>的名称应设置为Prototype<N>(N的取值范围为0到255),并且这些原型应按照N的升序进行配置。
与PHM的接口遵循AUTOSAR的<PortPrototype>模式,这些<PortPrototype>通过特定的<PortInterface>进行类型化。这与自适应应用程序与自适应平台之间的许多其他交互所使用的模式相同,唯一的区别在于<PortPrototype>所引用的<PortInterface>类型不同。
对于受监督实体接口的配置,PHM生成器会施加以下约束:
应用程序必须是一个自适应应用(AA)。自适应应用程序在自适应软件组件(SWC)的配置中进行建模。因此,应用程序的<Executable>元素的<SwComponentPrototype>必须配置并引用一个<AdaptiveApplicationSwComponentType>元素。
SWC必须包含通过特定<PortInterface>类型化的<PortPrototype>。
为了与PHM模块进行接口交互,我们需要明确应用软件所能提供的监督和状态信息,并遵循AUTOSAR的<PortPrototype>模式来定义相应的接口和检查点。
1.2 监督实体Supervised Entity
是PHM模块监督的基本单元,通常映射到一个进程或一组相关的进程。
每个监督实体都有一个本地监督状态,这些状态反映了应用程序的健康状况。
每个监督实体需要在配置文件中定义,包括其唯一标识符和初始状态。
ara::phm::SupervisedEntity 是一个模板类,用于表示一个被监督的实体。它的模板参数InstanceSpecifier是在配置被监督实体时创建的,它用于唯一标识该实体的一个实例。
定义模型配置路径:首先,使用 ara::core::StringView 定义了一个表示模型配置路径的字符串视图 isPath。这个路径指向被监督实体的原型配置。 创建 InstanceSpecifier 对象:然后,使用 ara::core::InstanceSpecifier::Create 方法和之前定义的路径 isPath 来创建一个 InstanceSpecifier 对象 isObj。这个对象代表了被监督实体的一个具体实例。 构造 SupervisedEntity 对象:最后,使用 isObj 和特定的检查点类型(在这个例子中是 se0::Checkpoints)来构造一个 SupervisedEntity 对象 se0_prototype0。
检查点(Checkpoint)
注意事项
在调用 ReportCheckpoint 方法之前,请确保将检查点标识符(checkpointId)显式转换为 ara::phm::Checkpoint 类型(或相应的枚举类型 T,如果它已经被定义为与 ara::phm::Checkpoint 兼容的话)。在提供的示例中直接使用了 se0::Checkpoints 枚举中的值。这是因为 se0::Checkpoints 已经与期望的检查点类型兼容。
如果检查点枚举 T 没有与 ara::phm::Checkpoint 直接兼容,你可能需要在调用 ReportCheckpoint 之前进行类型转换或确保它们以某种方式兼容。
示例代码中的调用方式 se0_proto0.ReportCheckpoint((se0::Checkpoints::SE0_CP_Initial)) 展示了如何使用这个方法。注意,这里的类型转换可能是不必要的(取决于 se0::Checkpoints::SE0_CP_Initial 的类型),但如果存在类型不匹配的情况,这样的转换可能是必要的。
// 假设 se0_proto0 是一个已经创建的 SupervisedEntity<se0::Checkpoints> 类型的对象
se0_proto0.ReportCheckpoint(se0::Checkpoints::SE0_CP_Initial);
平台健康管理贡献(PlatformHealthManagementContribution)允许描述配置的各个方面,以确定平台健康管理在运行时的行为。
我们使用平台健康管理贡献对平台健康管理(PHM)相关的配置要素(数据、信息或功能)进行建模。具体而言:
它定义了自适应应用程序与平台健康管理之间的交互机制。
它包含了由<PhmSupervisedEntityInterface>接口类型化的RPortPrototypes的表示形式。
它创建这些RPortPrototypes并将其与自适应应用软件自身的RPortPrototypes建立关联。
1.3 全局监督 Global Supervision
随后需要在执行管理编辑器中,将SWC_Example的软件组件映射到对应的可执行文件上。PHM Contribution存在并且已经被映射到<Machine>上,就可以添加检查点了。添加所需的<可执行文件>,该文件将使用检查点。
监督检查点的“检查点ID”属性需要设置,因为现在是时候填写AUTOSAR声明为必填的字段了。这个属性可以设置为与在应用程序设计(.hadl)中定义检查点时输入的检查点ID相同的值。
在这个检查点引用中,需要定义以下字段:
'ContextRootSwComponentPrototype' - 包含检查点的软件组件。
'ContextRPortPrototype' - 包含检查点的端口。
'TargetPhmCheckpoint' - 检查点本身。
重复上述步骤以创建另一个检查点。我们可以将检查点的名称分别为“SupervisionCheckpoint_Initial”和“SupervisionCheckpoint_Final”。
创建检查点转换Creating Checkpoint Transitions
1.4 截止时间监督Deadline Supervision
'Deadline Supervision' - 截止时间监督的名称。
'Short Name' - 检查点转换的名称。
源检查点Source(Deadline Start Checkpoint): 这个检查点标志着某个特定转换过程的起始阶段。例如,CP1就是这样的一个起始检查点,它负责监督从该点开始到下一个对应结束检查点的转换过程是否满足既定的时间约束。
目标检查点Target(Deadline End Checkpoint): 这个检查点表示的是某个特定转换过程的终止阶段。例如,CP2就是这样的一个结束检查点,它负责验证从上一个对应起始检查点到该点的转换过程是否在规定的时间内完成。值得注意的是,如果系统中的截止时间监督是串联设置的,那么某个检查点可能会同时承担起始和结束两种角色,即它既是某个转换的起始检查点,也是另一个转换的结束检查点。
Min Deadline:从源检查点到目标检查点所需的最小时间(以毫秒为单位)。
Max Deadline:从源检查点到目标检查点所需的最大时间(以毫秒为单位)。
在配置截止Deadline Supervision策略时,在创建检查点后,必须使用 <CheckpointTransition> 元素定义检查点之间的可能转换。<CheckpointTransition> 的定义是在 <GlobalSupervision> 元素的范围内完成的,并且可以被 <GlobalSupervision> 和 <DeadlineSupervision> 策略共同使用。
1.5 存活监督Alive Supervision
Check Point(检查点):
检查点指的是在受监督的应用程序或进程中预设的关键位置,这些位置往往是函数调用点或循环迭代的关键节点。存活监督机制会密切监督这些检查点,以确保应用程序能够按照预定的逻辑和时序顺利执行。
Min Margin(最小容差):
允许的负偏差。在一个AliveReferenceCycle(存活引用周期)内,所允许的检查点报告数量低于预期存活指示的最大数量
Max Margin(最大容差):
允许的正偏差。在一个AliveReferenceCycle(存活引用周期)内,除了预期的存活指示(ExpectedAliveIndications)外,所允许的最大检查点报告数量
Alive Reference Cycle(存活参考周期):一个周期应该花费的时间(以毫秒为单位)。
Expected Alive Indications(预期活动指示次数):在一个AliveReferenceCycle内,检查点应该被报告的预期次数。
Failed Reference Cycles Tolerance(失败参考周期容忍度):存活监督周期允许失败的次数。
这两个Margin用于描述在某个时间周期内,系统或应用程序所允许的存活指示(或检查点报告)数量的波动范围。通过设定最大容差和最小容差,可以确保系统或应用程序在正常运行时,其存活指示的数量能够保持在一个合理的、可接受的范围内。
Max Margin可以设置为无穷大,在这种情况下,不会对检查点报告的最大数量进行检查。
除了配置上述参数外,还必须将<Checkpoint>引用添加到<AliveSupervision>元素中。
1.6 逻辑监督Logical Supervision
初始检查点(initial Checkpoint):执行路径的起点。
最终检查点(final Checkpoint):执行路径的终点。
检查点过渡(Checkpoint Transitions):检查点之间的允许过渡。
在<GlobalSupervision>元素下的“新建子项”中的来创建一个新的< LogicalSupervision >元素。
每个逻辑转换都通过初始检查点和最终检查点以及允许的转换来描述。生成PHM配置文件的工具会验证逻辑监督的以下约束:
'初始检查点集合不为空。
'最终检查点集合不为空。
'转换('transitions)集合不为空。
'每个初始检查点至少是一个转换的源检查点。
'每个最终检查点至少是一个转换的目标检查点。
'每个转换都位于从初始检查点到最终检查点的路径上。
'每个转换的源检查点不是最终检查点。一个转换的源检查点可以与其目标检查点相同。
这些约束确保了逻辑监督配置的有效性和一致性,从而能够准确地监督自适应应用程序的执行路径。
1.7 PHM守护进程配置
配置启动顺序:确保rb-phmd在特定应用启动之前被加载和运行。这通常需要在系统的启动脚本或进程管理配置中进行设置。 设置依赖关系:在配置文件中指定rb-phmd作为其他使用PHM服务的应用程序的依赖项。这样,当这些应用程序尝试启动时,系统会首先检查并启动rb-phmd。 监督和日志记录:为rb-phmd配置适当的监督和日志记录机制,以便在出现问题时能够快速定位和解决问题。 测试和验证:在配置完成后,通过模拟故障或监督触发事件来测试PHM守护进程和相关应用程序的响应。确保它们能够按照预期的方式协同工作。
1.8 Global Supervision Status触发PHM和SM进行恢复操作的?
1. 监控机制
Alive Supervision(存活监控)
Deadline Supervision(时限监控)
Logical Supervision(逻辑监控)
2. 配置触发消息
当状态为FAILED时,触发重启操作。
发送警报通知状态管理模块。
3. 监控状态评估
4. PHM响应
PHM模块接收到这些警报或错误报告后,会开始评估系统的健康状况。
执行Alive、Deadline和Logical Supervision等监控功能,判断是否需要恢复操作。
5. 触发SM进行恢复操作
SM模块负责处理ECU(电子控制单元)中各业务模块的状态事件。
当Global Supervision Status发生变化时,特别是当检测到状态异常时,SM会接收到这些状态事件。
SM根据接收到的状态事件和预定义的状态管理逻辑来评估系统的状态。
它可能使用Trigger服务(用于状态触发和通知)和FunctionGroupState服务(用于功能组的请求与释放)等接口来与其他组件进行交互。
6. PHM的恢复操作
Offer:启用可能的RecoveryHandler()回调调用。
RecoveryHandler:在监督失败时由平台健康管理调用的回调函数。使用Offer()之前需要启用该处理程序调用。
StopOffer:禁用可能的RecoveryHandler()回调调用。
重启监控实体:尝试重新启动出现异常的监控实体。
通知状态管理模块:将异常状态报告给状态管理模块(State Management, SM),以便采取进一步措施。
触发硬件看门狗:在严重异常情况下,触发硬件看门狗以重启整个系统。
7. 配置恢复措施
示例配置
8. 日志记录和分析
2.1 监督实体(Supervised Entity)与检查点(Checkpoint)的关系
监督实体:这是PHM模块进行监督的基本单元,通常与一个进程或一组相关的进程相对应。它代表了需要被定期检查和监督健康状况的组件或系统部分。
检查点:这是受监督实体执行过程中的关键监督点,用于评估其实时的执行状态。检查点可以是存活信号的发送点、任务完成的截止时间点,或是逻辑条件的满足点。
一个监督实体内部可能包含一个或多个检查点。这些检查点分散在受监督实体的控制流中,作为其执行路径上的关键节点。
每个检查点都需要被明确配置一个唯一的标识符(ID),以便在报告和监督过程中进行准确识别和定位。
当受监督实体执行到某个检查点时,会触发相应的逻辑来报告当前的活动状态。这通常是通过调用SupervisedEntity::ReportCheckpoint方法来实现的。
该方法允许开发者为被监督实体报告一个特定的检查点状态,从而帮助PHM系统准确了解受监督实体的运行状态和健康状况。
在配置文件中,每个监督实体都需要被明确定义,包括其唯一标识符、初始状态以及所包含的检查点等信息。
监督实体可以被多次实例化,而每个实例都会受到独立的监督。这意味着每个实例都会有自己的执行路径和检查点集合,确保各自的运行状态得到准确跟踪。
在实现过程中,检查点的数据类型(即枚举类型)需要在创建被监督实体模板类时指定。这个枚举类型应该包含所有可能的检查点标识符。
当调用ReportCheckpoint方法时,需要确保传递的检查点标识符与期望的检查点类型兼容。如果类型不匹配,可能需要进行类型转换或确保它们以某种方式兼容。
2.2 本地监督状态与全局监督状态之间关系
全局监督状态位于顶部,它依赖于下面一组受监督实体(SE1, SE2, ..., SEN)的本地监督状态。
每个受监督实体都有一个对应的本地监督状态,可以是OK、FAILED或EXPIRED。
全局监督状态根据以下规则确定:
如果所有受监督实体的本地监督状态都是OK,则全局监督状态为OK。
如果有任何一个受监督实体的本地监督状态为FAILED但无EXPIRED,则全局监督状态为FAILED。
如果有一个或多个受监督实体的本地监督状态为EXPIRED,则全局监督状态为EXPIRED。
在全局监督状态为EXPIRED后,如果经过的时间等于或大于配置的expiredSupervisionTolerance,则全局监督状态将变为STOPPED。
多个元素之间的关系简图
AUTOSAR_AP_RS_PlatformHealthManagement.pdf AUTOSAR_AP_SWS_PlatformHealthManagement.pdf AUTOSAR_AP_EXP_PlatformDesign.pdf AUTOSAR_AP_TPS_ManifestSpecification.pdf
-end-
本专栏是由汽车电子与软件打造的中立性技术科普专栏,将系统地阐述软件定义汽车下的关键挑战和工程实践。欢迎订阅本专栏!