You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Simulink Stateflow状态机启停机制设计及自动复位开关技术问询

Stateflow状态机建模修改方案

1. 调整顶层状态结构

  • 删除原有的Off/On顶层状态,创建IdleRunning两个互斥顶层状态(用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

火山引擎 最新活动