Simulink模型架构指导
LICENCE: 本文根据《JMAAB V4.01》部分章节进行翻译和整理,文中只是针对MBD开发方式描述了模型架构的纲要和观念。由于Simulink提供了多种可以满足需求的模块及建模方法,所以很难进行详尽的描述说明,翻译和整理由Tomato一人完成,欢迎探讨,转载时需要保留本段文字
1. Simulink 和 Stateflow的角色
所有的系统都可以使用Simulink或Stateflow进行建模。
如果使用Stateflow进行建模,Simulink仅仅作为信号的输入输出和仿真,在Stateflow中可以使用多种公式和方法来替代simulink进行处理。如果只用Simulink,可以通过使用Switch-Case块的方法来替代Stateflow实现复杂的状态变量。
因此,使用Simulink或Stateflow对于特定部分的建模,是主观依据开发人员对于哪种表达方法更为理解。应该根据整体的团队水平来实现如上选择和建模。
在大多数情况下,Stateflow的RAM效率要比Simulink差。因此,Simulink在使用简单公式的计算中具有优势。除此之外,Simulink在使用简单的触发和切换系统中,对于状态变量的使用也更具有优势。当使用Stateflow所建的模型可以用Simulink进行替代建模时,需要考虑如下因素进而做出决定:
- 确保静态RAM足够大,以保证Stateflow 的输入输出以及内部变量的正确运行。
- 当使用内部通用计算公式时,要设计防溢出的保护。
- 当外部计算完成时,需要对整体进行分块,以降低这个模块的理解难度。
在一些情况下,Stateflow能够比Simulink进行更接近于C语言的表达方法,但是这样的模型没有很好的外观状态,并不是很容易理解。在这些情况下,使用S-Function会更有利。
Stateflow 可以计算特定的状态安排,或进行for-loop的计算,在这些层面上要比Simulink更有效率,但是近些年来,使用Matlab语言进行如上计算,也变得更有效率一些。
当使用Simulink进行建模时,如果处理如下所述的状态,则可通过使用Stateflow来改善可读性。
- 同一个输入有不同的输出值
- 多个状态存在 (例如3个及更多)
- 对于定义的一个状态的意义,不是无限的值而是一个离散的数值。
- 在状态内部,要求初始化(首次执行)和后面的 执行状态期间有所不同。
- 除了状态变量,输入和输出变量是可以被可视化的信号.
举个例子,在触发器电路中,不同的输出对应于同一个输入。而且ÿ