Stateflow 是一种强大的建模工具,常用于设计和模拟复杂的控制系统和软件系统,尤其是具有并发性和时序逻辑的系统。它结合了图形化的状态机和矩阵逻辑,使得工程师能够直观地构建、分析和验证系统行为。
在 Stateflow 中,创建完框图后,可以将图表锁定,以防止意外修改。这可以通过选择 "Edit" 菜单下的 "Chart Properties" 选项,然后在 "Editor" 域中勾选 "Locked" 来实现。
利用 `sfnew` 命令可以在 MATLAB 窗口中打开带有 Chart 的 Simulink 工作界面。在 Stateflow 中,`Inf` 表示无穷大,这在定义变量或条件时可能会用到。
状态的并行组合通常通过右键点击空白区域,选择 "Decomposition-parallel (AND)" 来实现。这种并行状态的边界变为虚线,内部可以定义状态行为,例如:
- `name`: 状态名称
- `entry:` 入口动作,当进入状态时执行
- `during:` 持续动作,在状态持续期间执行
- `exit:` 退出动作,离开状态时执行
- `on event_name:` 事件触发动作,当特定事件发生时执行
StateFlow 中,同层次的状态执行遵循从上到下,从左到右的优先级规则。`during` 和 `on` 事件的执行顺序取决于它们在状态图中的位置。
历史节点(History Junction)保存了状态的先前信息,当再次进入该状态时,会从之前的状态继续执行。默认转换(default transition)则指示系统启动后首先进入哪个状态。
节点(Junction)用于简化状态间的转换,将复杂的网络转化为更易于理解的结构。转换线(transition)用于连接状态,可以附加条件表达式,如 `switch` 或 `[output>maxtime]`。
交汇连接点(Join)处理迁移信号的合并与分离,可以实现类似 `if-else` 的逻辑。图形函数工具则允许创建自定义的行为,但它们不能包含状态,仅能作为动作或迁移的一部分。
历史交汇工具允许在进入上层状态时恢复先前的子状态,以保持执行的连续性。
嵌入式 MATLAB 函数(Embedded MATLAB Function)允许在状态动作或迁移中调用自定义的 MATLAB 代码,提供更高的计算灵活性。
真值表(Truth Table)是 Stateflow 的一个重要特性,它可以用来实现复杂的逻辑决策和动作。真值表包含条件、决策和动作,支持初始和终止动作,这些动作在函数开始和结束时执行。需要注意的是,决策列的“与”操作隐含在真值表中,而最后一个决策通常被视为默认策略,能够很好地实现 `if-else` 结构。
Box 工具(Box Tool)是 Stateflow 中用于创建自定义组件的工具,它可以封装复杂逻辑,提高代码的复用性和可读性。
Stateflow 提供了一个强大且灵活的框架,用于建模和仿真有状态的系统,其丰富的图形化元素和嵌入式编程能力使得复杂系统的建模变得直观且高效。