Autosar WdgM

内容分享1周前发布
1 0 0

1.OverView

Autosar看门狗由三部分组成,WdgM, WdgIf, Wdg Driver, 假设系统正常,WdgM周期性调用WdgIf模块中的WdgIf_SetTiggerCondition接口进行喂狗(这个时候并非真正操控硬件去喂狗,只是重置全局变量(假设为Condition Value)的值).实际在中断中进行喂狗,因此在Wdg Driver中会有一个周期性中断,在中断中判断Condition Value的值是否大于0:

Condition Value的值等于0系统异常,停止喂狗

Condition Value的值大于0,Condition Value– 并且操控硬件喂狗

2.WdgM

WdgM(Watchdog Manager,看门狗管理器)是汽车电子系统中用于监控软件运行状态的关键模块,属于AUTOSAR架构中的系统服务层。它的核心任务是确保关键任务按时执行、系统运行可靠,防止程序卡死或跑飞。

监控类型

作用

举例说明

Alive Supervision(存活监控)

检查任务是否周期性运行

比如每100ms必须调用一次某个函数,若未调用,WdgM报故障

Deadline Supervision(时限监控)

检查任务是否在规定时间内完成

比如某个计算任务必须在50ms内完成,超时即报错

Logical Supervision(逻辑监控)

检查任务是否按正确顺序执行

比如状态机必须按 A → B → C 的顺序执行,跳过B就报错

名称

含义

Supervised Entity(SE)

被监控的软件模块或任务,比如SE1、SE2

Checkpoint(CP)

SE中的“检查点”,WdgM通过它来跟踪执行状态

Mode

WdgM支持多种工作模式,如Fast Mode、Slow Mode、OffMode,不同模式下监控策略不同

WdgM工作流程如下:

1.每个SE在代码中设置Checkpoint;

2.系统运行时,SE定期“报到”;

3.WdgM根据配置判断:

         是否按时报到(Alive);

        是否在时限内完成(Deadline);

        是否按顺序执行(Logical);

4.若异常,WdgM可触发故障处理,如重启ECU或记录DTC故障码。

2.1 Alive Supervision

AUTOSAR WdgM 的 Alive Supervision(存活监控)用于确保各受监控实体(Supervised Entity,简称 SE)在预定的时间窗口内“按时报到”,从而判断周期性任务是否正常运行。其工作流程可分为“初始化 → 运行期计数 → 周期结算 → 状态切换 → 全局汇总”五大阶段

2.1.1 初始化阶段

ECU 启动后,EcuM 先初始化看门狗驱动(Wdg Driver)。
OS 启动完毕,BswM 调用 WdgM_Init,把每个 SE 的 Local Status 设为 WDGM_LOCAL_STATUS_OK(或被引用模式设为 WDGM_LOCAL_STATUS_DEACTIVATED);
  - 内部 Alive Counter 清零;
  - 根据配置得到以下 4 个关键参数:
   WdgMSupervisionReferenceCycle(结算周期,以 WdgM_MainFunction 周期为单位)
   WdgMExpectedAliveIndications(期望报到次数)
   WdgMMinMargin / WdgMMaxMargin(允许下浮/上浮裕量)
   WdgMFailedAliveSupervisionRefCycleTol(连续结算周期内可容忍的错误次数门限)

2.1.2 运行期 —— SE “心跳”上报

每个被监控的任务/Runnable 按自身周期调用
  WdgM_CheckpointReached(SE_ID) 或 WdgM_AliveIndication(SE_ID)
  → 对应 SE 的内部 Alive Counter +1,相当于“打卡”一次 。

2.1.3 周期结算 —— WdgM_MainFunction 巡检

WdgM 以固定周期(通常为 10 ms 或 1 ms,由 WdgMSupervisionCycle 决定)循环执行WdgM_MainFunction;
每经过“WdgMSupervisionReferenceCycle”个 MainFunction 周期,就对对应 SE 进行一次 Alive 结算:
  实际值 = Alive Counter 当前值
  期望范围 = [Expected – MinMargin, Expected + MaxMargin]
  - 若实际值落在范围内 → 本次结算“正确”,错误计数器 FailedCycleCnt = max(0, FailedCycleCnt-1)
  - 若低于下限或高于上限 → 本次结算“错误”,FailedCycleCnt++
  结算后立即清零 Alive Counter,开始下一参考周期 。

2.1.4 本地状态机切换

根据 FailedCycleCnt 与门限 WdgMFailedAliveSupervisionRefCycleTol 的比较,SE 的 Local Status 在 WdgM_MainFunction 中按下列规则迁移:
  OK →(出现错误但 FailedCycleCnt ≤ 门限)→ FAILED
  FAILED →(错误次数继续 ≤ 门限且本次正确)→ 保持 FAILED,FailedCycleCnt 递减
  FAILED →(FailedCycleCnt 累加到 > 门限 或 本次又错)→ EXPIRED
  任何状态都可通过 WdgM_SetMode 被用户切为 DEACTIVATED;从 DEACTIVATED 切回激活时先回到 OK 。

Autosar WdgM

2.1.5 全局状态汇总与故障反应

WdgM 把所有 SE 的 Local Status 汇总成 Global Status:
  - 只要有一个 SE 为 EXPIRED → Global = EXPIRED
  - 没有 EXPIRED 但有 SE 为 FAILED → Global = FAILED
  - 全部 OK 且没有 FAILED/EXPIRED → Global = OK
当 Global 状态变为 FAILED/EXPIRED 时,WdgM 停止“喂”硬件看门狗(不再调用 WdgIf_SetTriggerCondition),于是硬件狗在计数减到 0 后触发 ECU 复位;也可配置成立即强制复位或进入安全状态 。

Autosar WdgM

2.1.6 时序示意(以 10 ms MainFunction、参考周期 100 ms 为例)

WdgM_MainFunction 每 10 ms 进入一次;
第 10 次进入时(100 ms 到点)对某 SE 结算:
  期望 Expected = 5,MinMargin = 1,MaxMargin = 1 → 合法范围 [4,6]
  若 Alive Counter = 5 → 正确,保持 OK;
  若 Alive Counter = 3 → 错误,Local Status → FAILED;
  若连续 3 个参考周期都错误且门限为 2 → 第 3 次结算后 Local Status → EXPIRED,同时 Global → EXPIRED,停止喂狗,ECU 将在下一个硬件狗超时(例如 50 ms 后)复位 。

2.2 Deadline Supervision

WdgM 的 Deadline Supervision(时限监控) 用于确保某个关键代码段必须在规定的“最短时间” 与 “最长时间” 之间完成;若提前完成或超时完成,都被视为违反时限,触发故障处理。

下面把整套机制拆开,从配置→运行→判定→故障处理四个层面,按时间轴顺序逐步说明。

2.2.1 配置阶段(静态,ECU 启动前决定)

配置项

作用

举例

WdgMDeadlineSupervision

打开/关闭该 SE 的时限监控

ON

WdgMCheckpoint

在代码中插入“起点”和“终点”两个检查点

CP_Start, CP_Finish

WdgMDeadlineStartRef

指明哪一个是“起点”检查点

CP_Start

WdgMDeadlineMin

允许的最短执行时间(ms 或 counter)

10 ms

WdgMDeadlineMax

允许的最长执行时间

50 ms

WdgMDeadlineFailedRef

超时时要累加的“故障计数器”

2(即 2 次违规就认定失败)

说明:起点与终点可以跨任务、跨中断,只要属于同一个 Supervised Entity(SE)即可。

2.2.2 运行阶段(动态,ECU 实时行为)

0 ms   调用 WdgM_CheckpointReached(SE1, CP_Start)   → 记录 Tstart

15 ms  调用 WdgM_CheckpointReached(SE1, CP_Finish)  → 记录 Tend

内部动作:

当 CP_Start 到达时

把当前 绝对时基(通常是 WdgMGlobalTime 或 OsCounter)写入 DeadlineStartTime[SE1]

置位 DeadlineActive[SE1] = TRUE(表示该 SE 的时限监控已“打开”)

当 CP_Finish 到达时

读取当前时基 → DeadlineEndTime

计算实际耗时 Δt = DeadlineEndTime – DeadlineStartTime

立即与 Min/Max 比较,给出判定结果

清零 DeadlineActive[SE1] = FALSE(一条时限监控生命周期结束)

2.2.3 判定阶段(WdgM 主函数周期执行)

虽然耗时计算在 CheckpointReached() 里已经完成,但故障是否“升级”由 WdgM_MainFunction() 周期处理:

判定结果

内部动作

Δt < Min

过早完成 → DeadlineFailedCnt++

Min ≤ Δt ≤ Max

合法 → DeadlineFailedCnt = 0(可配置为立即清零或递减)

Δt > Max

超时完成 → DeadlineFailedCnt++

当 DeadlineFailedCnt ≥ WdgMDeadlineFailedRef 时,WdgM 认定该 SE Deadline 故障,进入 SE Failed 状态。

2.2.4 故障处理阶段

局部反应

将该 SE 状态置为 WDGM_SE_FAILED

全局反应

若处于 Fast Mode / Slow Mode,WdgM 把 Global Monitoring Status 设为 WDGM_GLOBAL_STATUS_FAILED

根据 Mode Arbitration,触发 Reset 或 降级模式(limp-home)

若处于 OffMode,则仅记录故障,不触发复位

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...