控制策略模型建模规范(STATEFLOW)


6.1. 基本行为和状态

1. Stateflow模块中至少有两个状态,且要有默认状态,每个状态不能只有一个子状态。
2. Stateflow状态图嵌套不能多于3层。
3. 单一状态视图内的子状态个数控制在6个以内,最高不超过9个。
4. Stateflow中的逻辑,不使用MATLAB函数、指令、运算符。
5. 逻辑类型的信号禁止执行比较操作。(使用if(logical type signal))
6. 逻辑运算不能用于两个布尔值。([true && false])
7. 布尔类型的信号不能与数字0、1或逻辑值true、false进行比较操作。
8. 不同类型的数据禁止执行比较操作,如果需要必须首先执行显示类型转换的操作。
9. 禁止对两个浮点类型的数值执行严格的==或!=判断操作。
10. 禁止对无符号数执行取负操作[-]。
11. 如果需要翻转逻辑类型的信号,应使用布尔操作NOT。
12. 取反符号:~用于位操作按位取反,!用于逻辑取反操作。

6.2. 事件、变量设置

1. 同一个变量在单个Stateflow范围内不应该有多重定义。
2. 未使用的事件和变量不允许出现在Stateflow图块中。
3. 并行的图块或状态机中不允许出现同名的局部数据。
4. Stateflow中除0用于初始化变量,1用于自增自减操作外外,不允许常量和变量直接使用数值。
5. 事件必须定义在chart或者更低的级别,不允许chart之间进行事件交互。
6. 除触发调用函数调用子系统外,事件不应该用作状态转移的驱动条件。
7. 为了便于可读性,事件en:、du:、ex:每个应单独起一行;每个事件具体内容也应单独起一行。

6.3. 标签

Stateflow的输入输出端口名称应与相应信号名称一致。

6.4. 条件与条件动作

1. 条件表达式只能使用返回值为布尔类型的表达式,不允许使用整形数值。
2. 动作类型(entry(en),during(du),exit(ex),en,du: ,du,ex: ,en,ex: ,en,du,ex:)不能多次重复描述,且合并动作(en,du: ,du,ex: ,en,ex: ,en,du,ex:)的描述只能在动作序列的最顶层或最底层放置。
3. 如果动作序列能在条件动作(condition action)或转移动作(transition action)以及转移目标状态的Entry动作中实现, 就不要使用状态的Exit动作去实现。
4. 最好不要使用转移动作,优先使用条件动作。
5. 用于状态转移判断条件的变量的更新操作不允许放置于during动作中。

6.5. 内部转移和状态转移

1. Stateflow中的转移连接,不允许相互交叉、重叠,禁止穿过任何状态、节点或文本框,可转移到一个内部状态,转移标签连接于相应的转移上。
2. Stateflow的转移应遵循:条件在水平方向上标出,动作在竖直方向上标出。
3. Stateflow默认转移链接应置于状态顶部,默认转移的终止状态在同级状态中应处于最高位置。
4. Stateflow默认转移符号的绘制不应该超出所处状态的边界。
5. Stateflow状态图:不允许在单一状态内使用多个内部转移分支。
6. Stateflow内部转移标签必须从状态内部的左侧边界起始。

6.6. 流程图

SF状态图或流程图应合理避免“回溯”现象。
为便于数据流及代码生成,流程图的返回值只能放置在图表中的某一个位置,不能多次出现。


6.7. 函数块及其它

SF状态图应选用C语言方式构建,及使能C-bit operation
禁止将含有SF状态图的Simulink模型作为更高层级的SF状态机的子系统。

猜你喜欢

转载自blog.csdn.net/lm393485/article/details/88894310