跳到正文
电子系统基础

状态机:把行为规则写清楚

14 分钟

当系统包含正常、预警、告警、静音和故障状态时,堆叠许多 if 容易产生矛盾。有限状态机把当前状态、事件、转移条件和动作明确列出,使需求能直接对应程序与测试。

状态与变量不同

温度值是连续变量,“告警中”是行为模式。只有当不同模式对同一事件响应不同,才值得拆成状态。状态过少会隐藏行为,过多则产生组合爆炸。

事件和守卫条件

事件可以是采样到达、按键按下、定时器到期;守卫条件如“连续超限10秒且传感器有效”。转移表写清从哪个状态、在什么条件下、进入哪里。

进入、退出和持续动作

进入告警时启动蜂鸣器并记录时间;留在告警时闪灯;退出时关闭声音但保留历史。把动作归属写明,可避免每轮循环重复初始化或忘记清理。

优先级

传感器故障应优先于普通阈值判断,紧急停止应覆盖用户静音。不要依赖 if 的偶然排列表达安全优先级,应用状态图和测试明确。

时间不用阻塞等待

用时间戳或定时事件实现持续超限和延迟解除,避免程序 delay 十秒期间无法响应按键和故障。

实现前先手工走查事件序列,确认每一步状态唯一。

练习:画五状态图,再为每条转移写至少一个正常测试和一个边界测试。

小纸条

复杂控制逻辑为什么适合用状态机而不是不断叠加 if?