本章只讨论基于MBD开发的模型架构的概念,因为建立一个JMAAB Guidline Ver1.0里所描述的标准模型架构且能包含现有各家公司的软件结构非常困难。Simulink也提供了各种功能以适用各公司的不同情况。
10.1 Simulink与 Stateflow
所有系统都可以使用Simulink或者是 Stateflow 来实现。当只使用Stateflow 的时候,Simulink 用在输入/输出端口的定义,在 Stateflow 内部也可以进行各种公式计算。当使用Simulink 的时候,对于一些复杂的状态量也可以使用Switch-Case 来实现。
因此,控制算法模型的某一部分使用 Simulink 还是Stateflow 来实现,就变得比较主观,看哪一种实现起来更容易理解。如何选择那就看公司里的培训情况怎么样了。
在大多数情况下,Stateflow 的 RAM 效率要比Simulink 差一些。因此,Simulink 在计算一些公式的时候更有优势一些,此外,还比如使用简单的 flip-flops模块以及 Relay 模块的时候。如果使用 Stateflow实现的场景用 Simulink 也能实现的话,选择Stateflow就要考虑以下几个方面:
[if !supportLists]· [endif]确保Static
RAM 足够显示Stateflow的inputs, outputs 以及 internal variables。
[if !supportLists]· [endif]如果在内部进行公式计算,那用户自己要考虑溢出保护。
[if !supportLists]· [endif]如果计算是外部实现,那么整个计算分块,可能会影响对整体算法的理解。
也有一些情况 Stateflow 比 Simulink 效率更高一些,一些接近于 C 的表达方式,但是这些风格的模型可读性不高,相比用 Stateflow来说用 S-function更合适。
Stateflow可以给计算添加注释,计算 for循环也比 Simulink 方便,不过现在MATLAB Function 已经可以很方面的实现这样的功能了。
使用Stateflow 的时候,如果 state遇到以下情况,使用状态转移可读性更好一些:
[if !supportLists]1. [endif]相同输入有不同的输出结果。
[if !supportLists]2. [endif]有多个状态 ( 3个以上)。
[if !supportLists]3. [endif]如果定义了一个状态,那么(状态变量)就不能是一个无穷大的数,而是一个离散值。
[if !supportLists]4. [endif]在状态内,需要定义它的初始化(首次进入状态 en)以及它运行(du)。
[if !supportLists]5. [endif]除了状态变量,输入输出信号都可以图示。【译者注:2015b开始,Stateflow的状态量也可以设置作为输出信号显示出来。】
比如,触发回路里,相同输入会得到不同的输出。已知状态变量只能为0或者1。然而输入/输出变量0、1,也就是状态变量的最小值最大值0、1都用上了,有可能分类为有限个数。同时,在某一个状态下,它的初始化en和执行过程du都一样。也就是说一个触发回路适用于上诉 4 种情况,所以说 Simulink 更合适一些。【译者注:这个例子没看懂,原文如下。】
For instance, in flip-flop circuits, different
output values are outputted for inputs. Moreover, state variables are limited to0, 1. However, in the sense that for the input/output variables 0, 1, bothminimum and maximum state variable values 0, 1 are used, there is thepossibility of classification in infinite numbers. Also, there is nodifferentiation between initialization and during execution inside a state. Inother words, only 1 flip-flop applies out of the 4 above, so Simulink can besaid to be more advantageous.
用 Simulink 还是 Stateflow 来实现某个算法需要经过多人的讨论决定,这取决于要实现的目的。而Stateflow内使用 state transition 还是 flow chart 也可以讨论决定。
需要作为 state处理的则使用 state
transition,而分支路线这种不属于 state的情况则使用 flow chart。Truth table也是条件分支的另一种实现方式。
另外,在涉及上述提到的Stateflow 里使用state transition的时候,要使用 Classic mode【译者注:理由???】,来实现嵌入式控制器软件。
Stateflow只是 HDL 代码生成,使用 HDL coder 要使用Mealy 和 Moore 模式。进一步,如果需要internal electric leaks 保护需要的话,Moore 模式更合适一些【译者注:理由???】。
这里不讨论使用HDL coder的情况,只考虑控制系统软件实现相关的 Simulink/Stateflow 规范。









网友评论