Simulink Stateflow状态机启停机制设计及自动复位开关技术问询
Stateflow状态机建模修改方案
1. 调整顶层状态结构
- 删除原有的Off/On顶层状态,创建Idle和Running两个互斥顶层状态(用Stateflow默认的Exclusive OR分解),将Idle设为初始状态
- 在Idle状态的
entry动作中添加:FSM = 0; - 将aState1、bState2、cState3三个子状态嵌套到Running状态下,按顺序串联
2. 配置状态转移逻辑
- Idle → Running:转移条件设置为
start == 1,转移动作添加:FSM = 1; - aState1 → bState2:根据子状态的实际动作完成条件配置转移触发(如果是瞬时执行的动作,可直接设条件为
true;如果有持续执行需求,用after(t, sec)指定时长,t为状态执行时间) - bState2 → cState3:同上述转移逻辑,确保按顺序执行
- cState3 → Idle:当cState3动作完成后,设置转移条件(如
true或时长触发),转移动作添加:FSM = 0;
3. Simulink侧开关联动配置(实现自动关闭start触发)
- 添加Switch模块,将原始start信号设为输入1,常量0设为输入2
- 将Stateflow输出的FSM信号连接到Switch的控制端口
- 配置Switch规则:当控制信号为1时,选择输入2(输出0);当控制信号为0时,选择输入1(输出原始start信号)
- 将Switch的输出端连接到Stateflow的start输入端口
4. 关键变量配置
- 在Stateflow的Data字典中,将
start设为Input类型,FSM设为Output类型,Scope均设为Exported,确保信号能在Simulink和Stateflow间正常传递
逻辑验证
- 当外部start=1时,Switch输出1,Stateflow从Idle进入Running,FSM=1,此时Switch自动切换到输入2(输出0),避免Stateflow重复收到start=1的触发信号
- 状态机依次执行完三个子状态后,自动回到Idle状态,FSM=0,Switch恢复为传递原始start信号,等待下一次启动
- 当外部start=0时,Stateflow保持在Idle状态,FSM=0,状态机处于禁用状态
内容的提问来源于stack exchange,提问作者Jack




