5.1 Stateflow有限状态机


5.1 Stateflow有限状态机

本节摘要:Stateflow 用状态与迁移表达事件驱动的逻辑系统,是框图信号流之外的第三种时间观。本节从第 4 章遗留的保护逻辑需求出发,把一段文字规格翻译成状态机:状态、迁移、条件、动作、内部计时逐个落地,再讲清状态机与连续模型混合仿真时的执行语义。读完本节,逻辑密集型需求将不再逼你用比较器堆出不可维护的迷宫。

一段规格书引发的翻译需求

需求文档这样写:"系统上电后处于运行态;电流连续 10 毫秒超过阈值进入告警态并点亮告警灯;告警态下电流回落到阈值以下立即返回运行态;若告警持续满 50 毫秒,进入切断态并封锁输出;切断态保持直到收到人工复位指令。"读两遍就会发现,这段话的骨架不是"输入到输出的映射",而是"系统处在什么状态、什么事件让它迁移到什么状态"——这正是状态机的母语。

用比较器与触发器堆这段逻辑会得到什么?三路比较、两级计时器、若干 RS 触发器、加上跨信号的使能连锁,二十来个模块,逻辑正确性靠脑内推演,改一个阈值要在三处同步。状态机画出来是三个圆角框加四条迁移线,规格与图形一一对应,评审时需求方自己就能看图核对。

四要素落地:状态、迁移、条件、动作

状态是系统的驻留情形,三个框:运行、告警、切断。迁移是状态间的有向边,带条件守护:运行到告警的边上写"电流超阈值且持续计时满 10 毫秒"。条件里的"持续计时"用状态内部计时实现——Stateflow 为每个激活状态维护 dwell 时间,条件里直接引用,省去手搭计时器。动作分三类落位:迁移动作写在边上(发生时执行一次,如清计时器)、入口动作写在状态内部 entry 区(进入时执行一次,如点亮告警灯)、during 动作在驻留期间每拍执行(如刷新告警码)。

% 状态机迁移表(图形的文本对照,评审用) 状态: 运行 / 告警 / 切断 [运行] --电流大于阈值 且 dwell 大于等于 10毫秒--> [告警] [告警] --电流小于阈值--> [运行] % 迁移动作: 清除告警计时 [告警] --dwell 大于等于 50毫秒--> [切断] % 入口动作: 封锁输出 置故障码 [切断] --收到人工复位 且 电流低于阈值--> [运行] % 入口动作: 解除封锁 默认入口: [运行] % entry: 初始化计时器与输出

这张迁移表是工程交接的隐藏福利:图形给评审,表格给测试组直接生成用例——每条迁移至少一个用例覆盖,再补"条件不满足时的驻留"负例,状态机测试的骨架就有了。第 7 章的覆盖率分析会把这个思路变成机器指标。

图:保护逻辑状态机与混合仿真时钟

图:保护逻辑状态机与混合仿真时钟

混合仿真语义:状态机什么时候醒

状态机放进框图后,它的时间观必须显式选择。离散采样驱动下,状态机按设定的采样周期拍醒,每次醒来判断一次迁移条件——这正是最终代码在定时器中断里的行为方式,模型与实物一致性最好,本节的保护逻辑选它。连续驱动下,迁移条件若包含连续信号,Stateflow 会为条件注册过零事件,跳变时刻被精确定位——适合逻辑与模拟量强耦合、跳变时刻本身是研究对象的场合,代价是 3.3 节讨论过的事件开销。

第三种语义容易被忽略:迁移的执行次序。同一时刻多条迁移条件同时满足时,执行次序由迁移的优先级决定(图上的排列顺序),评审时必须核对优先级——本例里"告警到切断"必须优先于"告警到运行"评估,否则恰好在 50 毫秒边界回落时可能漏掉切断。这类边界行为是保护逻辑测试用例的必设项。

设计守则五条

一,状态数控制:单一状态机超过十个状态就考虑分层(父状态与子状态),层级让迁移条件按作用域分组。二,条件不跨域:状态机只读离散采样后的信号,连续信号先经采样保持,时钟语义保持单一。三,动作落位有讲究:一次性动作用入口或迁移动作,持续动作用 during,别用 during 累计一次性事件。四,不许有孤立状态:每个状态都要有到达与离开的路径,复位迁移覆盖切断态这类"困死"情形。五,规格与图形同版本管理:需求文本变更必须反映到迁移表,迁移表与图形一起进版本库。

⚠️ 常见坑:把状态机内部计时(dwell)与外部定时器模块混用。同一份"持续时间"逻辑出现在两处,采样节拍一改就不同步。时长逻辑统一放状态机内部,外部定时器只做与逻辑无关的节拍源。

延伸:图形函数与真值表——状态机的两件外挂

迁移条件复杂到一定规模,图上会挤满长条件表达式,可读性急转直下。两件外挂专治这个。图形函数:把一段可复用的判断逻辑(比如"是否满足切断条件")写成一个可在图上被多处调用的函数节点——条件表达式只写一遍,测试也只测一遍,五个状态共用一个判断时收益明显。真值表:纯组合的决策逻辑(故障码组合到处置动作的映射)用真值表表达,比画一堆并行状态加迁移清爽得多,评审时逐行核对也更容易。两者的共同精神是把"判断逻辑"从"状态结构"里剥离出来——状态图管拓扑,函数与真值表管判断,各画各的清晰。

用它们时守住一条边界:外挂适合"无记忆的组合判断",凡是需要跨节拍记忆的(计时、计数、防抖),留在状态与迁移里表达——记忆散落在外挂函数里,状态图的拓扑就不再完整描述系统行为,可读性反受其害。

常见问题

问:状态机应该用默认迁移显式处理"上电即处于异常工况"吗?

应该,而且这是新手状态机最常见的缺口。默认迁移画到运行态,隐含假设是"上电时一切正常";真机上电时转速不为零、电流传感器有漂移,状态机却从运行态起步,保护逻辑在最需要它的时间里恰好在错误的状态。规范做法:默认迁移先经过一个自检态(检查传感器合理性、确认无残留故障),通过后才进运行态——多一个状态的代价换来上电路径的可控,这笔账在保护逻辑上永远划算。

本节要点回顾

  • 状态机适配逻辑密集需求:带条件、计时、迁移的规格,用状态与迁移表达而非比较器堆叠;
  • 四要素落位:状态驻留、迁移带守护、dwell 计时内建、动作按入口迁移驻留三类归位;
  • 迁移表是隐藏资产:评审给需求方看图,测试组按迁移生成用例骨架;
  • 时钟策略选离散采样:保护逻辑最终跑在定时器中断里,模型即代码;
  • 迁移优先级是行为的一部分:同刻多条件满足时按优先级评估,边界用例必测;
  • 五条守则:控制状态数、条件不跨域、动作落位、消灭孤立态、规格同版本。

逻辑能力装好了,下一站给电机换一副"物理骨架":让模型带上真正的电气与机械端口。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U