2. 安全状态机基础

安全状态机是功能安全与高可靠系统设计中的核心建模工具。它把系统在任意时刻所处的“安全姿态”抽象为有限个状态,把引发姿态变化的外部或内部刺激抽象为事件,把状态之间的合法跳转抽象为转移,并在转移上挂载动作与守卫条件。理解这五个要素及其数学表达,是后续进行故障降级设计、可达性分析与安全验证的前提。

一、五个核心要素

一个确定性的安全状态机通常可表示为五元组:

M = (S, E, T, s0, A)

S  : 有限状态集合,如 {Init, Normal, Degraded, SafeStop, Fault}
E  : 事件集合,如 {start, faultDetected, recover, timeout, reset}
T  : 转移关系,T ⊆ S × E × S
s0 : 初始状态,s0 ∈ S
A  : 动作集合,绑定在转移或状态上
  • 状态(State):系统在某一时刻的稳定运行模式,必须互斥且可枚举。安全状态机中通常至少包含“正常”“降级”“安全停止”“故障锁定”等状态。
  • 事件(Event):触发状态评估的信号,可以是传感器越限、看门狗超时、通信丢失、人工复位等。事件是瞬时的,状态是持续的。
  • 转移(Transition):形如 (s, e, s'),表示在状态 s 下收到事件 e 且守卫成立时,迁移到 s'。
  • 动作(Action):转移发生时执行的操作,如切断输出、拉低使能、记录故障码、启动定时器。
  • 守卫条件(Guard):布尔表达式,只有为真时转移才被允许,例如 temp < 80 && commOK。

二、数学表达与语义

带守卫和动作的转移可写成:

s --[e [g] / a]--> s'

含义:当前状态 s,当事件 e 发生且守卫 g 为真时,
      执行动作 a,并进入状态 s'。

若守卫为假,则该事件被忽略或进入“未处理”分支,这本身就是一种安全设计:不允许在条件不满足时贸然降级或恢复。状态机的运行语义可描述为:在状态 s 下等待事件,事件到达后对所有以 s 为源的转移逐一求值守卫,选择第一条守卫为真的转移执行。因此转移的优先级顺序在安全设计中必须显式定义,避免歧义。

安全状态机的关键性质:确定性(同一状态同一事件至多一条转移生效)、完备性(每个状态对关键事件都有响应)、可达性(安全状态必须从任意状态可达)。

三、状态转移关系图解

下图给出一个典型的电机驱动安全状态机:正常运行时持续监测,一旦检测到故障则进入降级,若降级无法维持则进入安全停止,严重故障直接锁定并等待人工复位。

Init 初始化自检 Normal 正常输出 Degraded 限功率运行 SafeStop 安全停止 Fault 故障锁定 start [selfTestOK] faultDetected [minor] faultDetected [critical] timeout / cutOutput recover [stable] faultPersist reset [manualConfirm] / clearFault 转移标注格式:事件 [守卫条件] / 动作 绿色=恢复路径 橙色=降级路径 红色=故障路径

四、典型场景:电池管理系统(BMS)降级

以电池管理系统为例,其安全状态机可定义如下状态与转移:

当前状态 事件 守卫条件 动作 目标状态
NormalcellOverTemptemp < 60℃降额充电Degraded
NormalcellOverTemptemp ≥ 60℃断开主继电器SafeStop
DegradedtempRecovertemp < 45℃ 持续 30s恢复额定功率Normal
Degradedtimeout降级超时 10min切断输出SafeStop
SafeStopfaultPersist故障仍存在记录故障码Fault
Faultreset人工确认且自检通过清除故障Init

可以看到,守卫条件决定了同一事件在不同工况下走向不同状态,这正是安全状态机区别于普通流程控制的关键。动作则承担“让系统进入更安全姿态”的职责,例如降额、切断、锁定。

五、常见误区与复盘

误区一:把事件当状态。“过温”是事件,“降级”才是状态。若把瞬时信号直接当作状态,会导致状态爆炸且无法收敛。
误区二:守卫条件缺失或过宽。没有守卫的转移会在任意条件下触发,可能造成正常工况被误判为故障,引发不必要的停机。
误区三:动作与状态耦合过紧。动作应尽量绑定在转移上,保持状态“纯姿态”,便于形式化验证与测试用例生成。
误区四:忽略转移优先级。当多条转移的守卫同时为真时,必须按显式优先级求值,否则行为不确定。
复盘建议:对每个安全状态机,至少检查三件事——(1) 从任意状态是否都能到达 SafeStop 或 Fault;(2) 每个状态对“最危险事件”是否都有定义;(3) 守卫条件是否只依赖可观测、可诊断的信号。做到这三点,状态机才具备工程可用性。