4. 安全状态管理与系统响应

在AURIX Safety OS与故障监控体系中,故障被检测出来只是第一步。真正决定系统是否安全的是:检测到故障之后,系统能否在确定的时间内进入一个可预期的安全状态,并让所有受影响的执行器、通信端口和外部设备都处于受控状态。安全状态管理就是围绕这一目标建立的一套状态定义、切换条件、关断路径与协调机制。

安全状态的定义与分层

安全状态(Safe State)不是单一状态,而是一组按严重程度和可用性划分的状态集合。在AURIX工程实践中,通常将其划分为以下层级:

  • 正常运行态(Normal):所有监控项在阈值内,系统全功能运行。
  • 降级运行态(Degraded):检测到非致命故障,系统关闭部分非关键功能,保留核心控制能力。例如关闭冗余通道中的一路,或降低PWM输出上限。
  • 安全关断态(Safe Stop):检测到影响功能安全的故障,系统在确定时间内将执行器驱动、功率输出和通信端口切换到安全电平或高阻态。
  • 紧急关断态(Emergency Off):检测到可能造成人身伤害或不可逆损坏的故障,立即切断功率级供电,进入不可自动恢复的锁定状态。

每个状态必须明确定义:进入条件、退出条件、允许的操作、禁止的操作、以及在该状态下各端口和执行器的目标电平。这些定义通常以状态表的形式固化在安全概念文档中,并由Safety OS的状态管理器统一执行。

安全状态切换条件

切换条件来自故障监控层的判定结果。AURIX的SMU(Safety Management Unit)将各监控源(如锁步核比较错误、ECC错误、时钟监控、电压监控、看门狗超时等)的报警信号汇聚,并按严重等级映射到不同的安全状态请求。切换条件的设计需要遵循以下原则:

  • 确定性:从故障确认到进入安全状态的时间必须是可计算、可验证的,通常以FTTI(Fault Tolerant Time Interval)为约束。
  • 不可屏蔽性:安全关断路径不能被普通软件任务屏蔽或延迟,必须由硬件或最高优先级的安全任务直接触发。
  • 可区分性:不同严重等级的故障应触发不同的安全状态,避免“一刀切”导致可用性损失。
  • 可恢复性约束:降级态允许在故障消失后恢复;安全关断态通常需要复位或重新初始化;紧急关断态一般需要外部干预。
在AURIX中,SMU的报警映射到安全状态请求通常通过ALARM配置完成。每个报警可配置为触发中断、复位、或直接驱动端口关断。工程上建议将最严重的报警直接映射到硬件关断路径,而不是依赖软件轮询。

端口与执行器安全关断

安全状态的最终体现是物理端口和执行器的状态。AURIX的端口模块(Port)支持在安全关断时自动切换到预设的安全电平,这一过程不依赖CPU干预。关键配置包括:

  • 安全电平定义:每个输出引脚在安全关断时的目标电平(高、低或高阻)必须根据被驱动对象的安全需求确定。例如,驱动电机H桥的PWM引脚在安全关断时应输出低电平,使电机自由停车或制动。
  • 关断路径:从SMU报警到端口电平切换的路径应尽可能短。AURIX支持通过SMU直接触发端口紧急停止(Emergency Stop)功能,绕过软件层。
  • 执行器关断顺序:对于多执行器系统,关断顺序可能影响机械安全。例如,先关闭功率输出,再关闭使能信号,最后切断供电。
  • 状态反馈:关断后应通过端口回读或外部诊断确认实际电平与预期一致,否则需要触发二次故障处理。

以下SVG展示了从故障检测到端口安全关断的完整信号链与状态切换关系:

AURIX 故障检测 → 安全状态切换 → 端口关断 信号链 监控源层 锁步核比较 ECC 错误 时钟监控 电压监控 看门狗超时 其它 SMU 报警汇聚与等级映射 报警源 → 严重等级判定 ALARM 配置映射 安全状态请求生成 安全状态决策 降级运行态 非致命故障 / 可恢复 安全关断态 功能安全故障 / 需复位 紧急关断态 人身/设备危险 / 锁定 正常运行态 无故障 / 全功能 端口与执行器关断路径 SMU → Port 紧急停止 PWM 输出 → 安全电平 使能信号 → 无效 功率供电 → 切断 执行器与外部设备 电机驱动 H 桥 电磁阀 / 继电器 通信收发器 电源分配单元 FTTI 约束时间窗口

系统级安全状态协调

在分布式系统中,单个ECU进入安全状态并不等于系统安全。例如,一辆车的制动ECU进入安全关断态,但整车控制器仍在发送加速请求,就可能产生新的危险。因此,系统级安全状态协调需要解决以下问题:

  • 状态广播与同步:各ECU通过CAN、FlexRay或以太网广播自身安全状态,使系统内所有节点对当前安全等级有一致认知。
  • 主从协调:指定一个安全主节点(Safety Master)负责汇总各节点状态并决策系统级安全状态,从节点执行主节点的关断指令。
  • 关断顺序协调:系统级关断需要按依赖关系排序。例如,先让执行器进入安全位置,再切断通信,最后关闭电源。
  • 故障隔离:当某个节点故障时,应将其隔离,避免故障扩散到整个系统。AURIX的SMU支持将故障限制在本地,同时通过安全状态广播通知其他节点。
系统级安全状态协调必须考虑通信延迟和节点失效。如果安全主节点本身失效,系统应能通过预设的默认策略(如所有节点在超时后自动进入安全关断态)保证安全。这一机制通常称为“看门狗级联”或“心跳超时关断”。

工程实现要点与示例参数

以下以一个电机控制ECU为例,说明安全状态管理的典型配置参数。假设该ECU使用AURIX TC3xx,驱动三相电机,FTTI要求为10ms。

参数项示例值说明
SMU报警响应时间≤ 2ms从故障确认到SMU输出报警
端口关断时间≤ 1msSMU触发到端口电平切换
PWM安全电平低电平三相下桥臂关断,电机自由停车
使能信号安全电平低电平驱动芯片使能无效
通信安全状态发送安全状态帧CAN ID 0x7FF,周期10ms
降级态恢复条件故障消失持续100ms需连续确认,避免抖动
紧急关断锁定需外部复位不可自动恢复

在代码层面,安全状态管理通常由一个高优先级安全任务实现,该任务周期性地读取SMU状态寄存器、端口回读寄存器和通信状态,并根据预设的状态表执行切换。以下是一个简化的状态判断逻辑示例:

/* 安全状态管理任务,周期 1ms,最高优先级 */
void SafetyStateTask(void)
{
    uint32 smuStatus = SMU_GetAlarmStatus();
    uint32 portStatus = PORT_GetSafetyFeedback();

    if (smuStatus & SMU_ALARM_CRITICAL) {
        /* 紧急关断:直接触发端口紧急停止,不等待软件 */
        PORT_EmergencyStop();
        SafetyState = STATE_EMERGENCY_OFF;
        SafetyState_Lock();
    }
    else if (smuStatus & SMU_ALARM_SAFETY) {
        /* 安全关断:关闭PWM,拉低使能,发送安全状态帧 */
        PWM_SetSafeLevel();
        DRV_SetEnable(false);
        CAN_SendSafetyFrame(STATE_SAFE_STOP);
        SafetyState = STATE_SAFE_STOP;
    }
    else if (smuStatus & SMU_ALARM_DEGRADED) {
        /* 降级运行:限制输出,记录故障 */
        PWM_SetLimit(50);
        SafetyState = STATE_DEGRADED;
    }
    else {
        SafetyState = STATE_NORMAL;
    }

    /* 端口回读校验 */
    if (SafetyState >= STATE_SAFE_STOP) {
        if (portStatus != PORT_EXPECTED_SAFE) {
            /* 关断失败,触发二次故障处理 */
            SafetyState_SecondaryFault();
        }
    }
}

这段代码的关键在于:紧急关断路径不依赖软件判断,而是由SMU硬件直接触发端口紧急停止;软件任务负责状态记录、通信广播和回读校验。这种“硬件快速关断 + 软件协调管理”的分工是AURIX安全状态管理的典型模式。

状态切换的验证与确认

安全状态管理设计完成后,必须通过故障注入测试验证其有效性。常用的验证方法包括:

  • SMU报警注入:通过软件触发SMU报警,观察端口电平是否在FTTI内切换到安全电平。
  • 端口回读测试:强制端口输出错误电平,验证回读校验能否检测到并触发二次故障处理。
  • 通信超时测试:模拟安全主节点失效,验证从节点是否在超时后自动进入安全关断态。
  • 关断顺序测试:用示波器同时捕获PWM、使能和供电信号,确认关断顺序符合设计。

验证结果应记录实际关断时间、端口电平、通信帧内容和状态切换日志,并与安全概念文档中的FTTI和状态表进行比对。任何超出约束的偏差都必须分析原因并修正设计。

安全状态管理的核心不是“检测到故障后做什么”,而是“在故障发生前就已经定义好所有可能的状态、切换条件和关断路径,并确保这些定义在硬件和软件层面都能被确定性地执行”。