目录
前言:
前一篇中已经讲了一些simulink的建模规范,这篇继续讲Stateflow。这里就不再赘述命名之类的规范,基本与simulink中相同。相比simulink,stateflow使用上有更多细节需注意,这不像是规范,可能更像是建模指导,基础但借鉴意义强。
Matlab模型开发之——从建模规范开启旅程1 Simulink_gaoxuexidan0307的博客-CSDN博客_mab建模规范
1、外观
1.1状态机语句格式
1.1.1 状态机标准格式
- 状态机中语句缩进应保持一致,且运算符前后一致的空格。
- en/du/ex应与执行语句分行。
- 动作语句括号之前和之后都开始一新的行,且多个动作不应描述在1行中。
正确:
错误:
1.1.2 状态内的文本描述不应超出该状态的边界。
1.1.3 状态标签中每一个动作的结尾必须是一个分号“;”,否则将影响仿真速度。动作类型(entry(en), during(du) and exit(ex))不受这一规则限制。
1.1.4 相同的动作类型(entry (en), during (du), exit (ex), en, du: , du, ex: , en, ex: , en, du, ex:) 不应描述2次或多次。
错误:
1.1.5 如果有多个条件语句时,可以分行描述。若其中包含多个运算符,应使用括号来描述 它们的优先顺序。且运算符位置统一在每一行后面。
Correct正确
Incorrect错误
没有采用括号显示优先顺序。
Incorrect:错误:
4个条件在一行中描述。
1.2状态流迁移
1.2.1 状态图中的迁移线应绘制成水平线和垂直线。
1.2.2 尽量不要互相交叉。
1.2.3 禁止迁移重叠,不禁止状态从外部向中心迁移或是从中心向外部迁移。
错误:
1.2.4 禁止从外部状态向子状态直接迁移,然而,可以从子状态向一个外部父状态迁移。
这是为了避免系统复杂化,导致状态间的切换不易理解。
1.2.5 复杂的条件不得采用交汇连接点来分离,预防状态迁移中的回溯。
1.2.6 所有交汇连接点有分支,且条件以水平线绘制,动作以垂直线绘制。
正确:
错误:
注释:在C1==ON 和C2==OFF的情况下,在[(C1==ON)]之后,在交汇连接点迁移似乎终止了。然而,在C2==OFF情况下,回溯发生,并评估[Condition3]。在这种情况下,即使C1==ON为真,如果[Condition3]为真,则发生向a3的迁移。
1.2.7 状态内的状态动作(以entry,during开始)和流程图语句不应组合使用。
错误:
1.2.8 除了执行顺序中的最后一个以外,其它的迁移必须要设置条件。
错误:
1.3层级
单个状态机内子状态机最多三层。
第4层可以被封装在一个子图中。
1.4缺省状态迁移
1.4.1 在同一层级中不能包含多个缺省状态迁移。
错误:同一层级中包含多个默认缺省迁移,即默认状态跳转。
1.4.2 缺省状态迁移的迁移目的地状态或迁移目的地交汇连接点应位于同一层级的左上。
错误:
缺省状态迁移位于侧面。
1.4.3 缺省状态迁移不得超过状态边界。
错误:
缺省状态迁移超过边界
1.4.4 为了防止回溯,所有流程图和图形函数都要提供不满足所有条件的无条件迁移。
错误:没有“无条件迁移”的迁移线。
2 常用基本规则
2.1增量/减量的使用指导规则
增量/减量操作符应作为一个动作使用。
2.2 局部变量
stateflow模块的所有局部变量必须定义在Chart层面中
在具有父子关系的图/状态中,不应包含具有相同名称的局部数据。
Correct:正确
在Chart下定义局部变量
Incorrect:错误
局部变量定义在信号可以在几个图之间共享的机器层面。
2.3状态流中逻辑信号的运算
- 返回布尔值的表达式应该用于条件表达式。
2)布尔类信号不得与数字(0,1)或逻辑值(真,假)进行比较。
当反转逻辑类信号时,使用布尔运算(NOT),采用~或 ! 。
正确:
错误:
2.4状态流中的MATLAB命令
在Stateflow图中不允许使用MATLAB函数语句。
如果不可避免的需要使用MATLAB函数,应仅通过MATLAB function模块来使用。
其中,代码生成仅支持有限的一小部分MATLAB函数,完整的支持函数清单可在help中搜索Functions Supported for Code Generation。
Correct:正确:
Incorrect:错误:
2.5缺省状态迁移路径的执行时间
在所有Stateflow Charts中,必须取消“在初始化时执行指定的图”,
默认情况下,图在首次唤醒时,它会执行默认转移路径。勾选“在初始化时执行指定的图”后,图的状态配置将在时间 0 处初始化,而不是在首次发生输入事件时。
默认即取消状态,不需要改变。