当前位置: 首页 > news >正文

AUTOSAR进阶图解==>AUTOSAR_SRS_FunctionInhibitionManager

AUTOSAR 功能抑制管理器(FIM)详解

基于AUTOSAR标准的功能抑制与控制机制

目录

  1. 概述
  2. FIM架构
  3. FIM配置与数据结构
  4. FIM权限状态
  5. FIM交互流程
  6. 总结

1. 概述

AUTOSAR功能抑制管理器(Function Inhibition Manager, FIM)是AUTOSAR标准中定义的一个系统服务模块,用于控制ECU中功能的启用和禁用。FIM提供了一种标准化的机制,使应用软件可以在特定条件下禁止某些功能的执行,尤其是在诊断事件发生或某些服务不可用的情况下。

FIM的主要目标是:

  • 定义FIM功能的需求
  • 明确FIM与其他控制机制(如RTE)的区别
  • 指定FIM的配置要素和预设条件

FIM主要应用于非安全关键系统,对于安全关键系统可能需要额外的需求。


2. FIM架构

功能抑制管理器在AUTOSAR架构中作为系统服务模块,与其他模块如诊断事件管理器(DEM)和诊断通信管理器(DCM)协同工作。

在这里插入图片描述

2.1 架构组件说明

  1. 功能抑制管理器(FIM)

    • 功能:FIM是一个系统服务模块,负责管理功能的禁用/启用状态,并提供权限状态查询接口。
    • 职责
      • 管理ECU中功能的启用和禁用状态
      • 提供统一的查询接口给应用层
      • 支持不同的抑制选项配置
      • 支持OBD功能抑制
  2. 应用软件组件(SWC)

    • 功能:应用层软件组件在执行特定功能前,需要查询FIM获取权限状态。
    • 交互方式:通过RTE提供的接口调用FIM API查询权限状态。
  3. OBD功能

    • 功能:车载诊断相关功能,需要特殊的权限管理。
    • 特殊性:OBD功能可能需要特殊的权限计算方法。
  4. 诊断事件管理器(DEM)

    • 功能:管理ECU中的诊断事件和故障码。
    • 与FIM关系:FIM根据DEM提供的诊断事件状态决定是否抑制功能。
  5. 诊断通信管理器(DCM)

    • 功能:处理诊断请求和响应。
    • 与FIM关系:通过DCM可以获取和设置FIM的状态。

2.2 接口说明

  1. FIM查询API

    • 功能:提供权限状态查询接口
    • 调用方:应用软件组件
    • 实现:根据配置的抑制条件和当前状态返回权限状态
  2. 诊断事件状态

    • 功能:获取诊断事件状态
    • 提供方:诊断事件管理器(DEM)
    • 使用场景:当抑制条件包含诊断事件时,FIM通过此接口获取事件状态
  3. 诊断请求处理

    • 功能:处理外部诊断工具请求
    • 提供方:诊断通信管理器(DCM)
    • 使用场景:外部诊断工具通过DCM访问FIM状态
  4. ECU状态通知

    • 功能:提供ECU状态信息
    • 提供方:ECU状态管理器
    • 使用场景:FIM可能根据ECU状态调整权限计算

2.3 代码示例

/* FIM模块初始化 */
void Fim_Init(const Fim_ConfigType* ConfigPtr)
{uint16 i;/* 参数检查 */if (ConfigPtr == NULL){/* 报告错误 */return;}/* 保存配置指针 */Fim_ConfigPtr = ConfigPtr;/* 初始化各功能的权限状态 */for (i = 0; i < Fim_MAX_FUNCTIONS; i++){if (ConfigPtr->FunctionRef[i].FunctionId != FIM_INVALID_FUNCTION_ID){/* 根据配置的初始权限设置功能状态 */if (ConfigPtr->InitPermission[i] == TRUE){Fim_PermissionStatus[i] = FIM_PERMISSION_ALLOWED;}else{Fim_PermissionStatus[i] = FIM_PERMISSION_DENIED;}}}/* 标记模块已初始化 */Fim_InitStatus = FIM_INITIALIZED;
}

3. FIM配置与数据结构

功能抑制管理器通过静态配置定义监控的功能及其抑制条件。以下是FIM的核心配置结构:

在这里插入图片描述

3.1 配置类说明

  1. Fim_ConfigType

    • 功能:FIM模块的主配置结构,包含所有与FIM相关的配置参数
    • 关键属性
      • FunctionRef
        • 描述:功能ID引用数组
        • 类型:Fim_FunctionIdType数组
        • 取值范围:0到Fim_MAX_FUNCTIONS-1
        • 约束:每个功能ID必须唯一
      • InitPermission
        • 描述:初始化时的权限状态
        • 类型:boolean数组
        • 取值范围:TRUE/FALSE
        • 默认值:由配置工具设置
      • DefaultPermission
        • 描述:默认权限状态
        • 类型:boolean数组
        • 取值范围:TRUE/FALSE
        • 默认值:由配置工具设置
      • InhibitOptions
        • 描述:功能抑制选项
        • 类型:uint8数组
        • 取值范围:见Fim_InhibitOptionsType
        • 约束:根据抑制需求配置
      • SummarizedEventState
        • 描述:汇总诊断事件状态
        • 类型:boolean数组
        • 取值范围:TRUE/FALSE
        • 默认值:由配置工具设置
      • OBDSupport
        • 描述:是否支持OBD功能
        • 类型:boolean数组
        • 取值范围:TRUE/FALSE
        • 默认值:FALSE
      • BooleanConfigOption
        • 描述:每个功能的布尔配置选项
        • 类型:boolean数组
        • 取值范围:TRUE/FALSE
        • 默认值:FALSE
  2. Fim_FunctionIdType

    • 功能:定义功能ID及其状态
    • 关键属性
      • FunctionId
        • 描述:功能的唯一标识符
        • 类型:uint16
        • 取值范围:0-65535
        • 约束:必须唯一
      • FunctionStatus
        • 描述:功能的当前状态
        • 类型:uint8
        • 取值范围:见Fim_FunctionStatusType
        • 默认值:取决于初始化配置
  3. Fim_InhibitOptionsType

    • 功能:定义功能抑制的条件
      • FIM_INHIBIT_NONE (0x00):无抑制条件
      • FIM_INHIBIT_DIAGNOSTIC (0x01):基于诊断事件抑制
      • FIM_INHIBIT_EVENTUNAVAILABLE (0x02):基于事件可用性抑制
      • FIM_INHIBIT_ALL (0x03):所有条件都会导致抑制
  4. Fim_FunctionStatusType

    • 功能:定义功能状态
      • FIM_FUNCTION_DISABLED (0x00):功能禁用
      • FIM_FUNCTION_ENABLED (0x01):功能启用
      • FIM_FUNCTION_INHIBITED (0x02):功能被抑制
  5. Fim_PermissionStatusType

    • 功能:定义权限状态
      • FIM_PERMISSION_DENIED (0x00):拒绝执行
      • FIM_PERMISSION_ALLOWED (0x01):允许执行

3.2 代码示例

/* FIM配置数据类型定义 */
typedef uint16 Fim_FunctionIdType;
typedef uint8 Fim_FunctionStatusType;
typedef uint8 Fim_InhibitOptionsType;
typedef uint8 Fim_PermissionStatusType;/* 功能ID结构定义 */
typedef struct {Fim_FunctionIdType FunctionId;Fim_FunctionStatusType FunctionStatus;
} Fim_FunctionIdRefType;/* FIM模块配置结构 */
typedef struct {Fim_FunctionIdRefType FunctionRef[FIM_MAX_FUNCTIONS];boolean InitPermission[FIM_MAX_FUNCTIONS];boolean DefaultPermission[FIM_MAX_FUNCTIONS];Fim_InhibitOptionsType InhibitOptions[FIM_MAX_FUNCTIONS];boolean SummarizedEventState[FIM_MAX_FUNCTIONS];boolean OBDSupport[FIM_MAX_FUNCTIONS];boolean BooleanConfigOption[FIM_MAX_FUNCTIONS];
} Fim_ConfigType;/* FIM配置实例示例 */
const Fim_ConfigType Fim_Config = {/* FunctionRef */{{0x0001, FIM_FUNCTION_ENABLED},{0x0002, FIM_FUNCTION_ENABLED},{0x0003, FIM_FUNCTION_ENABLED},/* 更多功能ID... */},/* InitPermission */{TRUE,  /* 功能ID 0x0001 */TRUE,  /* 功能ID 0x0002 */FALSE, /* 功能ID 0x0003 *//* 更多初始权限... */},/* DefaultPermission */{TRUE,  /* 功能ID 0x0001 */TRUE,  /* 功能ID 0x0002 */FALSE, /* 功能ID 0x0003 *//* 更多默认权限... */},/* InhibitOptions */{FIM_INHIBIT_DIAGNOSTIC,        /* 功能ID 0x0001 */FIM_INHIBIT_EVENTUNAVAILABLE,  /* 功能ID 0x0002 */FIM_INHIBIT_ALL,               /* 功能ID 0x0003 *//* 更多抑制选项... */},/* SummarizedEventState */{FALSE, /* 功能ID 0x0001 */TRUE,  /* 功能ID 0x0002 */TRUE,  /* 功能ID 0x0003 *//* 更多汇总事件状态... */},/* OBDSupport */{FALSE, /* 功能ID 0x0001 */FALSE, /* 功能ID 0x0002 */TRUE,  /* 功能ID 0x0003 - OBD功能 *//* 更多OBD支持配置... */},/* BooleanConfigOption */{FALSE, /* 功能ID 0x0001 */TRUE,  /* 功能ID 0x0002 */FALSE, /* 功能ID 0x0003 *//* 更多布尔配置选项... */}
};

4. FIM权限状态

功能抑制管理器维护每个功能的权限状态,并根据配置的抑制条件动态更新这些状态。

在这里插入图片描述

4.1 权限状态说明

  1. 未初始化状态

    • 描述:模块尚未初始化,功能权限状态不可用
    • 转换条件
      • 系统启动时,FIM处于未初始化状态
      • 调用Fim_Init()初始化模块后,根据InitPermission配置转换到允许或拒绝状态
  2. 允许状态(FIM_PERMISSION_ALLOWED)

    • 描述:功能被允许执行
    • 特性
      • API返回FIM_PERMISSION_ALLOWED
      • 应用可以正常运行相关功能
      • 状态可能因抑制条件变化而改变
    • 转换条件
      • 初始化时,如果InitPermission为TRUE
      • 抑制条件清除且功能已启用
      • 权限状态被外部工具更新
  3. 拒绝状态(FIM_PERMISSION_DENIED)

    • 描述:功能被禁止执行
    • 特性
      • API返回FIM_PERMISSION_DENIED
      • 应用必须禁用相关功能
      • 状态持续直到抑制条件清除
    • 转换条件
      • 初始化时,如果InitPermission为FALSE
      • 诊断事件激活且配置了诊断抑制
      • 事件不可用且配置了事件可用性抑制
      • 权限状态被外部工具更新

4.2 抑制条件处理

  1. 诊断事件抑制

    • 触发条件:诊断事件激活且InhibitOptions包含FIM_INHIBIT_DIAGNOSTIC
    • 处理逻辑
      • FIM通过DEM获取诊断事件状态
      • 如果事件状态为激活,则将权限状态设为DENIED
      • 如果事件状态变为非激活,且没有其他抑制条件,则恢复为ALLOWED
  2. 事件可用性抑制

    • 触发条件:事件不可用且InhibitOptions包含FIM_INHIBIT_EVENTUNAVAILABLE
    • 处理逻辑
      • FIM检查事件可用性状态
      • 如果事件不可用,则将权限状态设为DENIED
      • 如果事件变为可用,且没有其他抑制条件,则恢复为ALLOWED

4.3 代码示例

/* 获取功能权限状态 */
Std_ReturnType Fim_GetFunctionPermission(Fim_FunctionIdType FunctionId, Fim_PermissionStatusType* PermissionStatus)
{uint16 functionIndex = FIM_INVALID_INDEX;boolean inhibitFunction = FALSE;/* 检查模块初始化状态 */if (Fim_InitStatus != FIM_INITIALIZED){return FIM_E_UNINIT;}/* 检查参数有效性 */if (PermissionStatus == NULL){return E_NOT_OK;}/* 查找功能ID对应的索引 */for (uint16 i = 0; i < FIM_MAX_FUNCTIONS; i++){if (Fim_ConfigPtr->FunctionRef[i].FunctionId == FunctionId){functionIndex = i;break;}}/* 检查功能ID是否有效 */if (functionIndex == FIM_INVALID_INDEX){return FIM_E_INVALID_FUNCID;}/* 检查功能是否启用 */if (Fim_ConfigPtr->FunctionRef[functionIndex].FunctionStatus != FIM_FUNCTION_ENABLED){*PermissionStatus = FIM_PERMISSION_DENIED;return E_OK;}/* 检查诊断事件抑制 */if ((Fim_ConfigPtr->InhibitOptions[functionIndex] & FIM_INHIBIT_DIAGNOSTIC) != 0){Dem_EventStatusExtendedType eventStatus;Dem_EventIdType eventId = Fim_GetAssociatedDemEventId(FunctionId);if (Dem_GetEventStatus(eventId, &eventStatus) == E_OK){/* 如果诊断事件为激活状态,抑制功能 */if (eventStatus == DEM_EVENT_STATUS_FAILED){inhibitFunction = TRUE;}}}/* 检查事件可用性抑制 */if (!inhibitFunction && (Fim_ConfigPtr->InhibitOptions[functionIndex] & FIM_INHIBIT_EVENTUNAVAILABLE) != 0){/* 检查事件可用性状态 */if (Fim_IsEventAvailable(FunctionId) == FALSE){inhibitFunction = TRUE;}}/* 特殊处理OBD功能 */if (!inhibitFunction && Fim_ConfigPtr->OBDSupport[functionIndex]){/* OBD功能特殊处理 */inhibitFunction = Fim_ProcessOBDFunction(functionIndex);}/* 设置返回的权限状态 */if (inhibitFunction){*PermissionStatus = FIM_PERMISSION_DENIED;}else{*PermissionStatus = FIM_PERMISSION_ALLOWED;}return E_OK;
}

5. FIM交互流程

应用软件组件在执行功能前,需要通过FIM查询功能的权限状态。以下序列图展示了FIM的查询交互流程:

在这里插入图片描述

5.1 序列流程说明

  1. 模块初始化

    • 参与者:应用、FIM
    • 描述:系统启动时,应用调用Fim_Init()初始化FIM模块,设置初始权限状态
    • 函数
      • Fim_Init(ConfigPtr)
        • 描述:初始化FIM模块
        • 参数:
          • ConfigPtr [输入]: FIM配置数据结构指针,类型为Fim_ConfigType*
        • 返回值:无
  2. 功能权限查询

    • 参与者:应用、RTE、FIM、DEM
    • 描述:应用通过RTE接口查询功能权限状态,FIM根据抑制条件返回权限结果
    • 函数
      • RTE__IsEnabled()
        • 描述:RTE提供的应用接口,用于查询功能是否允许执行
        • 参数:无
        • 返回值:boolean,TRUE表示允许执行,FALSE表示禁止执行
      • Fim_GetFunctionPermission(FID, &status)
        • 描述:查询功能的权限状态
        • 参数:
          • FID [输入]: 功能ID,类型为Fim_FunctionIdType
          • status [输出]: 权限状态,类型为Fim_PermissionStatusType*
        • 返回值:
          • E_OK: 操作成功
          • FIM_E_UNINIT: 模块未初始化
          • FIM_E_INVALID_FUNCID: 功能ID无效
  3. 诊断事件处理

    • 参与者:FIM、DEM
    • 描述:当配置了诊断事件抑制时,FIM通过DEM获取事件状态并计算权限
    • 函数
      • Dem_GetEventStatus(EventId, &eventStatus)
        • 描述:获取诊断事件状态
        • 参数:
          • EventId [输入]: 诊断事件ID
          • eventStatus [输出]: 事件状态
        • 返回值:
          • E_OK: 操作成功
          • E_NOT_OK: 操作失败
  4. 事件可用性检查

    • 参与者:FIM
    • 描述:当配置了事件可用性抑制时,FIM检查事件可用性状态
    • 函数
      • Fim_IsEventAvailable(FID)
        • 描述:检查功能关联的事件是否可用
        • 参数:
          • FID [输入]: 功能ID
        • 返回值:
          • TRUE: 事件可用
          • FALSE: 事件不可用
  5. OBD功能处理

    • 参与者:FIM
    • 描述:对于OBD功能,FIM可能需要特殊的权限计算方法
    • 函数
      • Fim_ProcessOBDFunction(functionIndex)
        • 描述:处理OBD功能的特殊权限计算
        • 参数:
          • functionIndex [输入]: 功能索引
        • 返回值:
          • TRUE: 需要抑制功能
          • FALSE: 不需要抑制功能

5.2 代码示例

/* RTE提供的应用接口示例 */
boolean RTE_AirConditioner_IsEnabled(void)
{Fim_PermissionStatusType permissionStatus;Std_ReturnType result;/* 调用FIM查询权限状态 */result = Fim_GetFunctionPermission(FIM_FUNC_AIR_CONDITIONER, &permissionStatus);/* 检查查询结果 */if (result != E_OK){/* 查询失败,默认禁用功能 */return FALSE;}/* 返回权限状态 */return (permissionStatus == FIM_PERMISSION_ALLOWED) ? TRUE : FALSE;
}/* 应用使用示例 */
void Application_ControlAirConditioner(void)
{/* 查询功能是否允许执行 */if (RTE_AirConditioner_IsEnabled()){/* 功能允许执行,正常控制空调 */AirConditioner_SetTemperature(DESIRED_TEMPERATURE);AirConditioner_SetFanSpeed(DESIRED_FAN_SPEED);}else{/* 功能不允许执行,禁用空调控制 */AirConditioner_Disable();/* 可能需要通知用户 */HMI_DisplayMessage(MSG_AIR_CONDITIONER_DISABLED);}
}/* 诊断事件回调函数示例 */
void Dem_EventStatusChanged_Callback(Dem_EventIdType EventId, Dem_EventStatusExtendedType EventStatus)
{/* 当诊断事件状态变化时,更新相关功能的权限状态 */Fim_UpdatePermissionStateForEvent(EventId, EventStatus);
}

6. 总结

AUTOSAR功能抑制管理器(FIM)提供了一种标准化的机制,用于控制ECU中功能的启用和禁用。通过FIM,可以在特定条件下(如诊断事件激活或事件不可用)自动抑制相关功能,提高系统的健壮性和安全性。

6.1 FIM的主要特点

  • 标准化接口:提供统一的API接口,便于应用软件查询功能权限状态
  • 灵活配置:支持不同的抑制选项,可根据需求配置抑制条件
  • 诊断集成:与诊断系统紧密集成,可基于诊断事件状态抑制功能
  • 事件可用性:支持基于事件可用性的功能抑制
  • OBD支持:为OBD功能提供特殊的权限计算方法
  • 汇总诊断事件:支持汇总诊断事件状态,简化诊断逻辑

6.2 应用场景

FIM可广泛应用于以下场景:

  1. 故障安全策略:当检测到故障时,自动禁用受影响的功能
  2. 诊断服务控制:在诊断会话期间,控制特定功能的可用性
  3. OBD监控:管理OBD相关功能的执行权限
  4. 功能降级:在系统降级模式下,有选择地禁用非关键功能
  5. 资源管理:在资源受限的情况下,控制高资源消耗功能的执行

6.3 最佳实践

在使用FIM时,应遵循以下最佳实践:

  1. 合理配置抑制条件:根据系统需求和安全策略,合理配置每个功能的抑制条件
  2. 执行前查询:应用软件在执行功能前,必须查询FIM获取权限状态
  3. 遵循权限结果:严格遵循FIM返回的权限结果,不允许执行被禁止的功能
  4. 优化性能:避免频繁查询,可以缓存权限状态,仅在必要时更新
  5. 处理异常:妥善处理FIM查询失败的情况,实施合适的失败安全策略
http://www.dtcms.com/a/308378.html

相关文章:

  • axios封装对比
  • 记录自己使用gitee和jenkins
  • PHP反序列化学习+解析+复现
  • 提升Windows操作效率:三款实用辅助工具功能解析​
  • 代码随想录Day35:动态规划(背包问题 二维 一维、分割等和子集)
  • Spring Boot整合MyBatis-Plus全攻略
  • 如何监控项目的每个阶段,提高执行效率
  • SchemaCrawler:一款免费开源的数据库文档工具
  • 斐波那契数
  • AI学习笔记三十三:基于Opencv的单目标跟踪
  • OpenCSG月度更新2025.7
  • leecode18 四数之和
  • 个股期权合约期内遇到标的停牌,如何处置?
  • DoRA详解:从LoRA到权重分解的进化
  • Redis线程模型讨论
  • 修改VSCode远程SSH的PATH
  • JVM字节码文件结构剖析
  • JVM学习日记(十二)Day12
  • 解释 MySQL 中的 EXPLAIN 命令的作用和使用场景
  • 格雷希尔G25F系列电气端口快速封堵接头,解决电池包、电机控制器等壳体的气密性测试难题,提升效率与可靠性,助力新能源汽车生产。
  • ARM--中断
  • 三坐标测量仪攻克深孔检测!破解新能源汽车阀体阀孔测量难题
  • 雷霆战机游戏代码
  • ABS系统专用磁阻式汽车轮速传感器
  • 建设公司如何优化梳理部门职责,提高运作效率?
  • 中烟创新自研【烟草行政许可文书制作系统】纳入“北京市人工智能赋能行业发展典型案例集”
  • 电子电气架构 --- 车载48V系统
  • 如何导入json文件到数据库
  • 生信技能76 - 根据SNP列表提取SNP位点上下游的参考基因组fasta
  • RocksDB关键设计详解