您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



文章 咨询 工具 课程  
会员   
   
基于模型的数据治理与中台
11月11-12日 北京+线上
软件架构设计方法、案例与实践
11月13-14日 北京+线上
UML与面向对象分析设计
11月25-26日 北京+线上
     
   
 订阅
当“功能被关掉”也是最安全的选择:FiM(功能抑制)如何联动 DEM/DCM/NvM 与整车 SYS 实现可审计的容错
 
作者: 汽车开发说
  70   次浏览      5 次
 2025-10-11
 
编辑推荐:
本文立足 AUTOSAR 官方规范与工程实践,深入剖析 FiM 的数据模型与实现要点、FiM 与诊断子系统(DEM/DCM/NvM/DET)的接口契约,以及 FiM 在整车级 SYS 编排中的角色与验证要点,并通过代码与伪码示例给出切实可落地的实现建议,希望对您的学习有所帮助。
本文来自于汽车软件大本营,由火龙果软件Alice编辑、推荐。

前  言

FiM(Function Inhibition Manager,功能抑制管理器)在 AUTOSAR 生态中正是承担这一职责的专门模块:它把诊断事件(DEM)、通信/服务请求(DCM/BSW)与系统策略(SYS 层)之间的“抑制”契约化,提供可配置、可追溯、可持久化的抑制决策与执行路径。本文立足 AUTOSAR 官方规范与工程实践,深入剖析 FiM 的数据模型与实现要点、FiM 与诊断子系统(DEM/DCM/NvM/DET)的接口契约,以及 FiM 在整车级 SYS 编排中的角色与验证要点,并通过代码与伪码示例给出切实可落地的实现建议。

01 FiM 的定位、数据模型与实现骨架(“抑制就是决策”)

1. 为什么需要 FiM(功能抑制)

在 AUTOSAR 里,诊断(DEM)负责检测并记录事件,但检测不等于动作——当检测到某个传感器或子模块异常时,究竟要怎样处置应用功能(继续、临时降级、永久抑制或触发重启)。

这需要一个集中化且可配置的决策引擎。

FiM 的价值在于把“事件 → 策略 → 抑制/释放”这一条链路工程化 :

FiM 将功能分解为可抑制的 FunctionID(或 FunctionGroup),基于来源(诊断事件、BswM 模式、远程命令等)和配置(优先级、持久化、超时)来判定最终输出,向 RTE/ASW 或 BSW 下发抑制信号或建议。AUTOSAR 规范明确了 FiM 的职责与接口,强调与 DEM、DCM、NvM 的交互契约。

2. FiM 的核心数据模型:抑制矩阵与抑制元数据

工程实践中常把 FiM 的内部状态抽象成抑制矩阵(Function × Reason):

行:FunctionID 或 FunctionGroup(一个功能可能对应若干 Runnable 或逻辑子功能);

列:抑制来源/理由(DEM EventID、BswM 模式、Calibration Flag、DCM 远程命令等);

单元格:保存该来源对该功能的当前抑制状态(active/inactive)、计数器(reference count)、持久标志(是否要写入 NVM)、超时信息与时间戳。

该矩阵的最终决策逻辑通常为:

按策略合并列状态(OR/AND/优先级覆盖)→ 生成最终抑制输出 → 若为持久抑制则触发 NvM 写入 。

在设计时必须明确“优先级”和“覆盖关系”,例如某些安全相关的抑制(由 ASIL-D 级别的检测触发)应当覆盖由低优先级来源发起的恢复请求。AUTOSAR 文档对 FiM 的抑制语义、配置数据以及“可追溯数据基(artefact)”做了规范说明,工程上应把这些配置以 ARXML 或工具导出数据集成到 CI 流程。

3. FiM API 设计(工程建议)

为保证可测试与轻耦合,FiM 的对外接口应包含三类基本调用:

上报/激活:FiM_Inhibit(FunctionID, SourceID, Options) —— 表示某来源请求抑制某功能;

释放:FiM_Release(FunctionID, SourceID) —— 撤销源引发的抑制;

查询/订阅:

FiM_QueryStatus(FunctionID) / FiM_RegisterCallback(FunctionID, cb) —— 上层或监控服务可查询或订阅抑制变化;

此外,为支持 审计与故障溯源,FiM 应暴露元数据 API:FiM_GetInhibitLog() 返回带时间戳、来源与上下文 的结构化日志,且能以环形缓冲方式保存在 RAM,并按需要写入 NvM 以实现跨次点火持久化(注意写寿命管理)。 MathWorks / Embedded Coder 的工具链示例表明,FiM 常与模型化工具集成,为调试和 SIL/SIL→ PIL 验证提供便捷接口。

02 FiM ↔ DEM/DCM/NvM 的契约与工程边界

1. DEM(Diagnostic Event Manager)是 FiM 的“感知端”

DEM 的职责是接收来自 SWC 或 BSW 的监视器(monitor)上报,处理并维护事件状态机(例如未检测→检测→确认→老化→清除),并将监控状态变化通知 FiM。简言之:DEM 检测并提供可信的事件事实,而 FiM 基于该事实做抑制决策。AUTOSAR SWS 明确要求 DEM 与 FiM 的交互:当监视器状态发生变化时,DEM 应通知 FiM,以便 FiM 根据配置做出抑制或释放动作。

工程要点:

DEM 提供的事件上下文(EventID、检测时间、相关信号快照、重复计数)必须随抑制请求一并传递给 FiM,便于 FiM 做基于背景的策略判断(例如仅在连续多次失败后采取持久抑制)。

DEM 与 FiM 之间应有明确 的同步语义:DEM 的 “monitor status” 回调与 FiM 的内部决策应避免竞态,通常由 BSW 调度器(或 RTE)在受控 时间点完成调用。

2. DCM(Diagnostic Communication Manager)既是控制端也是工具端口

DCM 负责处理外部诊断工具(UDS)请求,其中包括可能由维修工具或远程服务发起的“抑制/恢复”命令(例如某些服务可能需要在维修时临时抑制功能以完成刷写)。因此 FiM 必须对来自 DCM 的请求执行权限校验(会话等级、认证签名)并记录来源;同时,DCM 在执行远程例程(Routine)时可能需要查询 FiM 状态(避免在危险情形下执行高风险 Routine)。AUTOSAR SWS/实践建议把 DCM→FiM 的远程抑制路径纳入权限与审计设计。

工程要点:

远程抑制应当必须经过 DCM 的会话认证与安全检查(如 UDS Session、SecurityAccess)。对云端下发的退级命令,必须由车端的 DCM/FiM 复核策略后才生效,切忌盲目执行云端命令。

所有来自 DCM 的抑制/释放命令需写入抑制审计日志,标注操作者(工具/远端账号)、会话 ID 与时间戳,以满足法规与售后可追溯性要求。

3. NvM(Non-volatile Memory Manager)与持久化策略

某些抑制状态需要跨次点火保持(例如硬件故障导致的长期降级),这就需要 FiM 与 NvM 协作把抑制条目持久化。关键工程难点是 NVM 的擦写寿命与写频率:频繁将短期抑制写入 Flash 会迅速耗尽寿命。常见工程实践包括:

  • 分级持久化:把“临时抑制”保留在 RAM,仅在满足某些条件(重复计数、超时)后再写入 NvM;
  • 写合并策略:对抑制日志采用环形缓冲并按批次写入 NvM;
  • 回滚与完整性保护:持久化时带入 CRC /版本号与回滚机制,保证 NVM 崩溃或写入半途断电时抑制状态一致。

工程要点:FiM 的持久化策略需与系统的整体 NVM 策略对齐,明确哪些抑制是“必须持久”的(如安全相关)与哪些是“仅记录”的(如临时诊断)。在设计需求阶段,应与功能安全工程师共同定义持久化边界与回滚要求,以便在 V&V 阶段给出证据链。

03 FiM 在整车 SYS 编排中的角色:策略融合、冗余切换与可审计恢复

1. FiM 的输出不是终局,而是“建议+执行”模型

工程上应把 FiM 视为“局部决策引擎”:它负责把诊断事实翻译为“抑制建议或命令”,但在整车级别,最终如何对外广播、是否由其他 ECU 接管或是否触发整车级行为,应由 SYS 策略层(由 EcuM/BswM/ComM/WdgM、网关策略及 OEM 定制逻辑组成)来裁定。这样有两方面好处:

  • 避免局部过激降级:某 ECU 单方面抑制某功能,可能会引发整车级连锁影响;由 SYS 做融合决策能在整车上下文下做权衡(例如安全 vs 舒适性)。
  • 实现冗余接管:SYS 能根据全车视图触发冗余 ECU 或算法切换(如把控制从本地传感器切换到估算或邻域冗余控制器)。

设计上,FiM 与 SYS 的交互通过标准化的信号(PDU/Signal 或 RTE Service)上报抑制建议,并在网关/域控制器处由策略引擎(可能是 BswM 或 OEM 自定义服务)做融合判断。

2. 策略融合举例:优先级表与 MRC(最低风险条件)原则

整车级策略往往采用两层融合:优先级规则 + MRC 校验。例如:

FiM1(动力域)建议“限制扭矩”,优先级 = 80;FiM2(底盘)建议“限制转向扭矩”,优先级 = 90 → SYS 根据优先级选择更严格的降级或合并两者(限制总输出);

在做出限扭决定前,SYS 会校验 MRC(最低风险条件),例如当前车速、行驶环境(高速/低速)、是否能触发 ABS 或 EMS 的冗余策略;如果 MRC 不满足,则触发更保守的响应(例如要求靠边停车或强制降速)。

这种策略性融合能确保抑制既能保护系统,又不盲目损害可用性。

3. 冗余接管与“软切换”实现要点

整车级别的容错常依赖冗余(双 ECU、估算器、状态观测器)。实现平滑接管的关键点包括:

状态同步:冗余控制器必须保持足够接近的状态(通过周期性同步、事件驱动同步或共享 NVM 策略);

切换策略:定义软切换(平滑过渡)与硬切换(重置后接管)的边界,并在 FiM/SYS 中反映;

一致性验证:切换前后要有一致性检查(CRC、时间戳、状态机一致性),避免切换瞬间出现跳变。

实现这些功能需要  FiM、BswM、Com(或以太网/网关)与上层域控制器深度配合。

04 代码示例

1) FiM API 伪码(C 语言风格)

typedef uint32_t FunctionId_t;
typedef uint32_t SourceId_t;
void FiM_Inhibit(FunctionId_t fid, SourceId_t src, bool persist) {
    lock(fim_lock);
    fim_matrix[fid][src].count++;
    fim_matrix[fid][src].persist |= persist;
    fim_matrix[fid][src].last_ts = get_time();
    update_fim_decision(fid); // recompute final inhibit output and notify subscribers
    unlock(fim_lock);
}
void FiM_Release(FunctionId_t fid, SourceId_t src) {
    lock(fim_lock);
    if(fim_matrix[fid][src].count > 0) fim_matrix[fid][src].count--;
    update_fim_decision(fid);
    unlock(fim_lock);
}
bool FiM_QueryStatus(FunctionId_t fid) {
    lock(fim_lock);
    bool inhibited = fim_decision[fid];
    unlock(fim_lock);
    return inhibited;
}

2) DEM→FiM 事件流(伪码)

// inside DEM when monitor status changes
void Dem_MonitorStatusChanged(EventId_t evt, MonitorStatus_t status) {
    // build context
    Context_t ctx = { .vehicle_speed = get_speed(), .rpm = get_rpm(), ... };
    // notify FiM
    if(status == MONITOR_FAILED) {
        FiM_Inhibit(mapEventToFunction(evt), SRC_DEM | evt, true);
    } else if(status == MONITOR_PASSED) {
        FiM_Release(mapEventToFunction(evt), SRC_DEM | evt);
    }
    // persist DEM + FiM audit as needed
}

3) FiM 决策合并(伪码)

void update_fim_decision(FunctionId_t fid) {
    // example merge: if any source active -> inhibited, but priority overrides may be applied
    bool anyActive = false;
    for(src in allSources) {
        if(fim_matrix[fid][src].count > 0) {
            anyActive = true;
            break;
        }
    }
    fim_decision[fid] = anyActive;
    if(fim_decision[fid]) notifySubscribers(fid, INHIBIT);
    else notifySubscribers(fid, RELEASE);
    // if persist flags exist -> schedule NvM write (batched)
}

这些示例着重展示工程上经常用到的“计数器+优先级+持久化”三要素实现方式,实际项目中还需考虑并发安全、低延迟通知(RTE Service/COM 信号)与调试挂钩(trace)。

 

   
70   次浏览       5 次
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
基于模型的数据治理与中台 11-11[北京]
软件架构设计方法、案例实践 11-13[北京]
OCSMP 认证培训课程 11-18[北京]
UML与面向对象分析设计 11-25[北京]
SysML和EA系统设计与建模 11-19[北京]
车载系统功能开发方法与实践 10-25[北京]
 
 
最新文章
ASPICE中配置管理是个什么东西?
了解软件安全分析与组件鉴定
掌握Autosar ComStack的精髓!
基于整车功能的正向诊断需求开发
搞定Autosar SWC开发秘籍,码住!
汽车OTA更新的系统性威胁评估
最新课程
基于SOA的汽车电子架构设计与开发
Auto SAR原理与实践
AUTOSAR架构与实践(从CP到 AP )
AUTOSAR架构建模方法与工具(EA)
ASPICE4.0核心开发过程指南
MBSE(基于模型的系统工程)
更多...   
成功案例
某知名车企 AUTOSAR应用设计与开发
吉利汽车 MBSE工程体系汽车建模及评估
某整车企业 《功能需求分析与设计》
富奥汽车零部件 建模工具EA
零跑汽车 建模工具EA及服务
北汽福田 建模工具EA
小鹏汽车 建模工具EA
更多...