Simulink在很大程度上是一个控制导向的解决方案。它以图形方式展示数学运算,如乘积、求和、积分等。然而,它的条件逻辑功能不足。在我看来,任何类型的if
结构都会迅速变得简洁而难以管理。我见过许多模型,在这里有一个明显的界限,Simulink应该结束,Stateflow应该开始。
Stateflow处理逻辑和状态机非常出色。现在,借助Stateflow中的Simulink函数块,我们拥有了一个强大的组合,可以让状态机直接控制程序的其余部分。
就功能而言,它们都是功能完整的,这意味着您可以编写C中编写的任何内容,您也可以使用Simulink或Stateflow编码。但是,我不建议在Stateflow中编写PID环路,尽管这是可能的。您也可以很容易地在Simulink中创建状态机,但我建议不要这样做。
就代码生成而言,在融合的开头,Stateflow和Simulink具有单独的代码生成器,这些代码生成器在代码生成时与更多的Simulink生成的C代码一起缝合。然后出现了CGIR(代码生成中间表示),它统一了Stateflow和Simulink之间的代码生成器。它于2007年出现,并继续提供实质性的性能增长。生成的代码在目标性能方面已经提高到一个可以让公司将其用于嵌入式系统并获得性能优势而不是获得轻微损失的程度。此外,生成代码所需的时间也大幅减少。CGIR是目标语言编译器的替代品,但请放心,TLC API仍将可用,对于那些开发了大量专有代码生成库的人来说,它可能会一直存在。
希望这有所帮助,如果有什么疑问或需要澄清,请告诉我。
引用Stateflow Webinar的话:
Simulink 用于响应连续变化的动态变化。 Stateflow 用于响应瞬时变化的动态变化。 现实世界的系统必须同时响应连续和瞬时变化。 使用 Simulink 和 Stateflow,这样你就可以使用正确的工具来完成正确的工作。例如:汽车的悬挂动力学采用 Simulink 建模,而齿轮传动则采用 Stateflow 建模。
我目前也在使用Simulink和Stateflow。到目前为止,我一直在Simulink中完成所有工作,但是一旦你需要实现逻辑(if,case),你的模型在编码后变得难以分析。但是我认为理论上你也可以只用Simulink完成所有工作(如果我错了,请纠正我)。
Macduff的答案非常好地解释了区别。
敬礼, GR
了解有关Stateflow的更多信息,请访问以下网址: http://www.mathworks.com/products/stateflow/examples.html
在R2012b中,Stateflow已经更新,使得创建状态机和流程图变得非常容易。
主要更新包括一个新的图形编辑器、状态转换表、MATLAB作为动作语言以及集成调试器。请访问以下网址查找这些功能的短视频以及它们的使用方法:
http://www.mathworks.com/products/stateflow/whatsnew.html
最好的, Siddharth
复杂状态机: Stateflow
复杂数学过程: Simulink 块
其他: Stateflow 和 Simulink 均可