状态流程图和Simulink有什么区别?

8
据我所知,Stateflow和Simulink经常同时使用,它们都是由MathWorks开发的环境,MathWorks也是Matlab的制造商。请问它们之间有什么区别?

你尝试过阅读MathWorks网页吗?你还看了哪些东西?你目前的理解是什么,能解释一下吗?你认为有哪些相似之处和共同点?你还有什么疑惑?回答这些问题将帮助其他人给你提供所需的帮助。 - AndrewC
是的,我已经阅读了这些网页。在我看来,它们都是状态机。有状态、转换。唯一的区别是在Simulink中有连续变量。 - user1487718
我的观点是,你的问题有点开放式,没有展示出你目前的理解,并且听起来像是你想让我们为你阅读产品描述。我使用过MatLab,但是没有用过stateflow和simulink。我的理解是,stateflow是simulink内部的一个特定领域环境,专门用于离散逻辑,而simulink则是一个更通用的软件包,具有各种各样的工具。虽然我不是专家,但也许有其他人可以帮到你。我添加了其他标签,以便将您的问题引向更广泛的受众。 - AndrewC
我简直不敢相信这个问题没有更多的赞。太棒了!MathWorks在这里也有一些描述,但下面的答案更好:MathWorks: Stateflow - Gabriel Staples
7个回答

14

Simulink在很大程度上是一个控制导向的解决方案。它以图形方式展示数学运算,如乘积、求和、积分等。然而,它的条件逻辑功能不足。在我看来,任何类型的if结构都会迅速变得简洁而难以管理。我见过许多模型,在这里有一个明显的界限,Simulink应该结束,Stateflow应该开始。

Stateflow处理逻辑和状态机非常出色。现在,借助Stateflow中的Simulink函数块,我们拥有了一个强大的组合,可以让状态机直接控制程序的其余部分。

就功能而言,它们都是功能完整的,这意味着您可以编写C中编写的任何内容,您也可以使用Simulink或Stateflow编码。但是,我不建议在Stateflow中编写PID环路,尽管这是可能的。您也可以很容易地在Simulink中创建状态机,但我建议不要这样做。

就代码生成而言,在融合的开头,Stateflow和Simulink具有单独的代码生成器,这些代码生成器在代码生成时与更多的Simulink生成的C代码一起缝合。然后出现了CGIR(代码生成中间表示),它统一了Stateflow和Simulink之间的代码生成器。它于2007年出现,并继续提供实质性的性能增长。生成的代码在目标性能方面已经提高到一个可以让公司将其用于嵌入式系统并获得性能优势而不是获得轻微损失的程度。此外,生成代码所需的时间也大幅减少。CGIR是目标语言编译器的替代品,但请放心,TLC API仍将可用,对于那些开发了大量专有代码生成库的人来说,它可能会一直存在。

希望这有所帮助,如果有什么疑问或需要澄清,请告诉我。


2

引用Stateflow Webinar的话:

Simulink 用于响应连续变化的动态变化。 Stateflow 用于响应瞬时变化的动态变化。 现实世界的系统必须同时响应连续和瞬时变化。 使用 Simulink 和 Stateflow,这样你就可以使用正确的工具来完成正确的工作。例如:汽车的悬挂动力学采用 Simulink 建模,而齿轮传动则采用 Stateflow 建模。


0
Stateflow 的另一个主要优点是集成和使用外部 C 代码。这可以通过在图表设置中选择 Action Language C 来完成。 众所周知,用户可以在“仿真目标”选项中包含外部代码。而普通的 Simulink 模型需要一些小的变通才能访问外部 C 代码(如 ceval()、Simulink.Parameter 用于全局等),Stateflow 可以直接访问函数、定义等。 像数组总线/结构体之类的问题也可以通过在外部代码中编写这些数组来避免。 对于很多用例,我喜欢在 Stateflow 中直接与 C 代码交互的灵活性。

这个回答更适合作为对另一个回答的支持性评论,而不是单独的回答 :-) - George

0

我目前也在使用Simulink和Stateflow。到目前为止,我一直在Simulink中完成所有工作,但是一旦你需要实现逻辑(if,case),你的模型在编码后变得难以分析。但是我认为理论上你也可以只用Simulink完成所有工作(如果我错了,请纠正我)。

Macduff的答案非常好地解释了区别。

敬礼, GR


0
我在Simulink和Stateflow环境下都有工作经验,两者都是Matlab的工具。当您想设计反应式系统或事件驱动系统时,我们应该优先选择Stateflow而不是Simulink。因为相比于Simulink,我们可以更好地控制Stateflow中的事件。虽然在Simulink中调试很容易,但在Stateflow中可读性和代码生成更容易。

0

0

复杂状态机: Stateflow
复杂数学过程: Simulink 块
其他: Stateflow 和 Simulink 均可


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接