MAB建模规范-Stateflow状态机建模规范

规则ID:db、jm、hd、ar被用于Ver 1.0的规范。na和jc用于从版本2.0到现在创建的规范

NA-MAAB代表北美和欧洲。J-MAAB代表日本

目录

Stateflow

Stateflow blocks/data/events Statelfow的块/数据/事件

db_0122:statflow和Simulink接口的信号和参数

db_0123:Stateflow端口名称

db_0125: Stateflow 本地数据

db_0126:定义Stateflow事件

jc_0701: 索引开始数值

jc_0712: 默认路径执行时机设置

jc_0722:并行状态下的本地数据定义

Stateflow 外观

jc_0712:未连接的转移、状态机、节点 规则建议:

db_0137:状态机中的状态

jc_0721:平行状态的使用

db_0129: Stateflow 的外观

jc_0531: 默认转移

jc_0723:禁止从外部状态直接过渡到子状态

jc_0751:状态机中的转移点

jc_0760: 内部转移的开始点

jc_0763:使用多个内部转换

jc_0762: 避免同一状态机同时使用 state action 和 flow chart

db_0132:flow chart中的转换

jc_0773:flow chart的无条件转换

jc_0775: flow chart 中终结节点

jc_0738:Stateflow注释的使用

Conditional transition / Action 条件转移/动作

jc_0790: Chart 模块的执行语言

jc_0702:使用命名Stateflow参数/常量

jm_0011:Stateflow中的指针

jc_0491:状态流数据的重用

jm_0012: 事件和广播事件的使用限制

jc_0733:状态动作类型的顺序

jc_0734: 动作类型的数量

jc_0740:退出状态动作的使用限制

jc_0741:更新状态图转换条件中使用的数据的时间

jc_0772:转移线的执行顺序和转移条件

jc_0753:stateflow中的条件动作和转移动作

jc_0711:stateflow中的除法

db_0127:Stateflow块中对MATLAB命令的限制

jc_0481:在Stateflow中对浮点数使用硬相等比较

na_0001:Stateflow操作符的标准用法

jc_0655: 禁止在 stateflow 中对逻辑值进行比较

jc_0451: 一元负号在无符号数前的使用

jc_0802:禁止在Stateflow中使用隐式类型转换

Label description标签描述

jc_0732:状态名称、数据名称和事件名称之间的区别

jc_0730:stateflow中的唯一状态名

jc_0731:State name的格式

jc_0501:状态标签中的换行符

jc_0736: Stateflow 中的统一缩进

jc_0739: 状态中的描述文本

jc_0770:转移标签的位置

jc_0771:转换标签中的注释位置

jc_0752: 转移标签的条件动作

jc_0774:无条件转换的注释

Miscellaneous其他

jc_0511:从图形函数返回值

jc_0804:禁止使用带有图形函数的递归调用

na_0042:Simulink函数的使用

na_0039: stateflow中Simulink 函数的使用限制


Stateflow

Stateflow blocks/data/events Statelfow的块/数据/事件

db_0122:statflow和Simulink接口的信号和参数

规则建议:

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a:【char】参数{Use Strong Data Typing with Simulink I/O}应选择,使强数据类型之间允许使用statflow图表和Simulink。注意:只有当[Chart]属性{Action Language}设置为" C "时,{Use Strong Data Typing with Simulink I/O}才可用。

原因

a:当不选中{Use Strong Data Typing with Simulink I/O}时,可以输入输出到[Chart]的Simulink信号数据类型设置为“double”类型。因此,需要在输入之前和输出之后进行类型转换,这增加了块的数量,降低了可读性。

当不选中{Use Strong Data Typing with Simulink I/O}时,可以输入和输出到[Chart]的Simulink信号数据类型设置为“double”类型。然而,[Chart]中的任何类型的输入数据都可以直接与该信号连接。当这两个信号具有不同的数据类型时,将发生隐式数据类型转换。通过选择{Use Strong Data Typing with Simulink I/O},隐式数据类型转换不会发生,并产生数据类型不一致错误。这样可以防止由于数据类型的不同而产生误解,从而提高可读性。

db_0123:Stateflow端口名称

规则建议:

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a:statflow输入/输出的名称应该与相连的信号相同。

例外:可重用的statflow块可以有不同的端口名。

原因

a:提高了可读性。可能无法生成代码。

db_0125: Stateflow 本地数据

规则建议:

NA-MAAB:abcd

JMAAB: abcd

Matlab版本:all

规则

a: 不应在 machine 层级定义“Local”类型的状态机本地数据 ,也就是不在stateflow外定义

错误:

b: 不应在 machine 层级定义“constant”类型的状态机本地数据

错误:

c: 不应在 machine 层级定义“parameter”类型的状态机本地数据

错误:

d:具有父子关系的statflow块不应包含同名的本地数据

错误:一个具有父子关系的statflow块具有同名的本地数据。

原因

a:当在机器级别定义本地数据时,它被模型中的所有块共享。数据的行为不会像局部变量一样,并且会受到任何操作的影响

abc:遵循这些规则可以防止将statflow块复制到另一个模型时定义消失。

d:当具有父子关系的statflow块包含具有相同名称的本地数据时,由于不清楚本地数据的影响,可读性会降低。

db_0126:定义Stateflow事件

规则建议:

NA-MAAB:abcd

JMAAB: abcd

Matlab版本:all

规则

a: statflow事件应由正在使用的statflow块中最小的作用域级别定义

原因

a:限制使用地点可以提高可靠性。

jc_0701: 索引开始数值

规则建议:

NA-MAAB:a1/a2

JMAAB: a1/a2

Matlab版本:all

规则

a1:当[Chart]属性{Action Language}设置为“C”时,statflow数据属性{First index}应设置为“0”。

错误:

a2:当[Chart]属性{Action Language}设置为“C”时,statflow数据属性{First index}应设置为“1”。

个人不建议,不符合C语言

原因

a1:当{First index}是统一的,逻辑就更容易理解了。

a2:当{First index}是统一的,逻辑就更容易理解了。但是,C语言是基于0的,这降低了代码的可读性,因为索引计算过程是基于1的。这反映在生成的代码中。

jc_0712: 默认路径执行时机设置

规则建议:

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a: {Execute (enter) Chart At Initialization}不应勾选

原因

a:对每个[ Chart ]使用相同的设置可以防止模型被误解。

使用默认的转换线引用输入信号时要小心当属性{Execute (enter) Chart At Initialization}被选中。

jc_0722:并行状态下的本地数据定义

规则建议:

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a: 只在其中一个状态机使用的本地数据应当只在该状态机定义

错误:局部变量在正在使用的状态中没有定义

原因

a:通过显式地限制变量的有效范围,可以提高可读性和可维护性,从而避免意外的引用和更改

Stateflow 外观

jc_0712:未连接的转移、状态机、节点 规则建议:

NA-MAAB:ab

JMAAB: ab

Matlab版本:all

规则

a: 不得存在未连接的状态机

正确:没有未连接的状态机

b: 节点不得只有出口而无入口

原因

ab:未连接的转移可能导致不利影响,例如对模拟结果的错误解释或无法生成代码。

db_0137:状态机中的状态

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a: 当[char]或状态的{Decomposition}设置为“OR (Exclusive)”时,层次结构中至少有两种状态

原因

a:冗余的描述损害可读性。生成的代码包含了不必要的状态变量。

jc_0721:平行状态的使用

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a:子状态中不得使用并行状态

错误:子状态中还包含并行状态

原因

a:在父超状态中嵌套并行状态不会影响行为。并行状态的层次化降低了可读性。

db_0129: Stateflow 的外观

NA-MAAB:abcde

JMAAB: abcde

Matlab版本:all

规则

a: 状态转移线不得交叉

错误示例:

b: 状态转移线不得相互覆盖

c: 状态转移线不得覆盖状态机

正确:

d:状态转移线应当水平或竖直

【正确】

过渡线是垂直或水平绘制的。对角线用于流动图表

e: 避免使用无意义的节点

原因

a:当过渡线交叉时,很难理解状态之间的关系。

b 当过渡线重叠时,很难理解状态之间的关系。

c 当过渡线跨越状态时,很难理解状态之间的关系。

d 过渡线的一致应用提高了可读性。

e 当使用不必要的连接连接时,转换可能很难理解。

jc_0531: 默认转移

NA-MAAB:abcdefg

JMAAB: abcdefg

Matlab版本:all

规则

a: 非并行状态需要有默认进入状态

b:当{Decomposition}设置为“Parallel(AND)”时,默认的转换线不应连接。 并行状态不应有默认进入状态

c:一个级别不应有多个默认转换。

正确:一个层级只有一个入口

d:默认过渡应直接连接,并垂直定位到状态或连接点的上部。

正确:

e: 默认进入状态机应当位于左上方

f:默认转换不得超出状态边界。

g:配置参数{No unconditional default transitions}应设置为“Error”,以确保在默认转换的转换路径中,优先级最低的路径是无条件转换。需要保证一定有一个状态可以进入

【正确】默认转换的转换路径中优先级最低的路径是无条件转换。

【错误】默认转换的转换路径中优先级最低的路径不是无条件转换。

原因

a:A. 当状态图不包含默认转换线时,可能会发生模拟错误。 当流程图中包含默认转换时,不可能确定这是故意的还是由于未能插入它们。

B 当没有不必要的默认转换时,可读性会提高。

C 当同一级别中包含多个默认转换时,该状态可能无法按预期运行并产生警告。

D 当默认过渡的角度或位置出现曲线或变化时,可读性会降低。

E 当默认转换的转换目标状态或转换目标连接节点的位置发生变化时,可读性会降低。

F 当默认转换超出状态边界并与状态边界和表达式相交时,可读性会降低。

G 当默认转换的转换路径中没有无条件转换时,如果不满足转换路径的所有条件,转换目标将消失。这可能会导致意外行为。

jc_0723:禁止从外部状态直接过渡到子状态

NA-MAAB:不建议

JMAAB: a

Matlab版本:all

规则

a: 禁止从一种状态直接过渡到外部子状态

【正确】从父状态到父状态的转换。

从子状态转换到另一个父状态。

【不正确】从外部状态直接转换到另一状态下的子状态。

直接从一个状态机的子状态转换到不同状态机下的子状态。

原因

a:子状态之间的直接转换会使状态复杂化并降低可读性

jc_0751:状态机中的转移点

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a: 转移点不得用于分离复杂条件。

【正确】连接点不用于分离复杂条件。

【不正确】连接点用于分离复杂条件。

原因

a:偏离规则可能会导致回溯,从而导致意外行为。

jc_0760: 内部转移的开始点

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a: 内部转移条件应当从左侧开始

【正确】内部转移线从状态的左边缘开始。

【不正确】内部转换线不从状态的左边缘开始。

原因

a:遵守规则可以提高可读性。

jc_0763:使用多个内部转换

NA-MAAB:a1/a2

JMAAB: a1/a2

Matlab版本:all

规则

a1:不得在单一状态下使用多个内部转移。

错误:

a2:当在单一状态下使用多个内部转换时,应按照执行顺序从上到下列出。

原因

a1 当使用多个内部转换时,转换条件的数量尚不清楚。通过将内部转换的使用限制为单一用途,转换更加清晰,可读性也得到了提高。

a2 使用多个内部转换可以防止转换线交叉,并简化状态转换。 按执行顺序安排内部转换可以提高可读性。

jc_0762: 避免同一状态机同时使用 state action 和 flow chart

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a:一个状态中不应包括state action(entry, during, or exit)和flow chart

【正确】在状态中,只描述了state action或flow chart中的一个。

【不正确】状态既有state action,也有flow chart。

原因

a:执行顺序变得难以理解,这降低了可读性。

db_0132:flow chart中的转换

NA-MAAB:a,b

JMAAB: ab

Matlab版本:all

规则

a:flow chart中不能使用Transition actions

【正确】未使用Transition actions 。

b:flow chart中条件应该放置在水平线上,条件执行动作放置在垂直线上

例外:循环构造中的对角线除外。

【正确】条件位于水平转移线上,条件动作位于垂直转移线上。

【错误】条件位于垂直转移线上,条件动作位于水平转移线上。

原因

A. 流程图中的转换操作不会执行。

B 条件和条件动作的一致定位提高了可读性。

jc_0773:flow chart的无条件转换

NA-MAAB:a,b

JMAAB: ab

Matlab版本:all

规则

a: 对于有条件转移的节点需要设置无条件转移路径

b: 无条件转移路径需要设置为最后执行 {execution order} for unconditional transitions shall

be set to the last value.

错误:第一个执行的是空

原因

A. 防止回溯导致的意外行为。设置无条件转换明确定义了不满足条件时的行为。

B 将无条件转换设置为优先可以防止意外行为。

jc_0775: flow chart 中终结节点

NA-MAAB:a1a2

JMAAB: a1a2

Matlab版本:all

规则

a1: 只能有一个终结节点

a2 终结节点应当为一个唯一的无条件转移后的节点 -推荐

原因

a1a2 一个终端结可以提高对逻辑端点的理解。 使用一致的样式终止连接可以提高可读性。

jc_0738:Stateflow注释的使用

NA-MAAB:a

JMAAB: ab

Matlab版本:all

规则

a:当[chart]参数{Action Language}设置为“C”时,/*…*/不得使用注释嵌套。

b:当[chart]参数{Action Language}设置为“C”时,注释/***/的新行字符不得在单个注释的中间使用。

原因

a:编译器可能会将注释误解为程序。

b 注释中间的换行符很难确定正在编辑的零件是否在注释中。注释也可能是嵌套的。 当[Chart]属性{Action Language}设置为“MATLAB”时,注释必须使用%。

Conditional transition / Action 条件转移/动作

jc_0790: Chart 模块的执行语言

NA-MAAB:不建议

JMAAB: a

Matlab版本:all

规则

a: 应当使用“C”语言

原因

A. 使用一致的动作语言可以提高可读性,因为在语法上没有差异。

 与MATLAB相比,使用C作为动作语言时,更容易保持模型和生成代码之间的一致性。

 对于熟悉C编程语言的用户来说,该模型更容易理解。

jc_0702:使用命名Stateflow参数/常量

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a:[Stateflow]不得使用数字文字。例外情况: 初始值为0 递增,递减1 (这个没啥必要感觉)

原因

a:当使用数字文字来写常量时,只有建模者才能理解值的用途,这会降低可读性。 用于校准的常数在代码中使用数字文字生成。

jm_0011:Stateflow中的指针

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a:[Stateflow]不应使用指针变量。

错误:使用指针

原因

A. 当使用指针变量时,可读性会受损。 代码可能无法生成。

jc_0491:状态流数据的重用

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a:一个变量在一个[char]中不得有多个含义(用法)。

【不正确】变量k和kk在一张[图表]中有多种含义(用法)。

原因

A. 当变量名与分配给变量的数值含义不同时,变量可能会被误解。

jm_0012: 事件和广播事件的使用限制

NA-MAAB:不建议

JMAAB: a1、a2 a3

Matlab版本:all

规则

a1: 只能在状态机的输出端使用事件

a2: 使用 send 语法进行事件的广播 send(event_name, state_name)

c: 应使用带有限定事件名的发送语法 send (state_name.event_name)来广播 Stateflow 事件

【正确】正在广播的事件中使用了限定的事件名称。

【错误】发送语法中未描述接收广播的状态。

原因

a1 仅在[Stateflow]输出中使用Stateflow事件可以防止图表中的递归处理。

a2a3 提高了可读性,因为事件触发的转换可以清楚地识别

jc_0733:状态动作类型的顺序

NA-MAAB:ab

JMAAB: ab

Matlab版本:all

规则

a:基本状态动作类型应按以下顺序说明:进入(en)期间(du)退出(ex)

b:组合状态动作类型应按以下顺序说明:进入(en)期间(du)退出(ex)

【Correct】 【Incorrect】

Order is en, du, ex. Not in en, du, ex order.

原因

ab 一致的建模提高了可读性和可维护性。

jc_0734: 动作类型的数量

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a: 同一动作不应当描述超过两次

原因

a:根据描述顺序的不同,执行顺序也会有所不同。 当动作类型被多次描述时,执行顺序可能很难理解。

jc_0740:退出状态动作的使用限制

NA-MAAB:不建议

JMAAB: a

Matlab版本:all

规则

a:不能使用exit

错误:下面stateflow使用exit没有意义,因为在跳转到另一个状态时在entry时又进行了改变。

原因

a:当状态操作类型exit(ex)与条件操作、转换操作或状态操作类型entry(en)结合使用时,执行时间可能很难理解。这可能会导致对模型行为的误解。

jc_0741:更新状态图转换条件中使用的数据的时间

NA-MAAB:不建议

JMAAB: a

Matlab版本:all

规则

a:在状态转换条件下使用的变量不得使用“during”来执行更新。

错误:

原因

a:转移条件的执行顺序和“during”的实现可能很难理解,这增加了出错的风险。

jc_0772:转移线的执行顺序和转移条件

NA-MAAB:a

JMAAB: a

Matlab版本:all

规则

a:所有过渡路径均应可执行。(R2011b至R2016a)配置参数{Transition shadowing}应设置为“错误”。(R2016b及更高版本)配置参数{Unreachable execution path]应设置为“错误”。

【错误】执行顺序1是无条件转换,执行条件2中描述了条件表达式[C1]无法执行。

正确:

错误:条件2无法执行

原因

a:处于执行顺序中最后一个位置以外的任何位置的无条件转换都会导致后续转换成为死路径,从而导致意外的模拟行为。

jc_0753:stateflow中的条件动作和转移动作

NA-MAAB:a1/a2

JMAAB: a1/a2

Matlab版本:all

规则

a1:stateflow中不得使用转移动作。

a2:条件作用和转移作用不应组合在同一个[chart]中。

原因

a1 防止与条件操作混淆,从而提高可读性。

a2 在进入转换时执行条件操作。转换操作在确定是否可以转换到下一个状态后执行。遵守规则可以防止混淆条件操作和转换操作。

jc_0711:stateflow中的除法

NA-MAAB:不建议

JMAAB: a1/a2

Matlab版本:all

规则

a1:状态流块中的变量、常数或参数不得用于执行除法运算。

错误:

a2:当在stateflow中发生除法时,该过程应防止被零除法。

错误:

原因

a1a2 偏离规则可能会导致意外操作和代码生成结果。

db_0127:Stateflow块中对MATLAB命令的限制

NA-MAAB: a1/a2

JMAAB: a1/a2

Matlab版本:all

规则

a1:stateflow中不使用Matlab命令

a2:当在Stateflow块中使用MATLAB命令时,只能使用[MATLAB Function]访问该命令。

原因

a1 并非所有的MATLAB命令都支持代码生成。因此,可能无法为这些不受支持的MATLAB命令生成代码。

a2 并非所有的MATLAB命令都支持代码生成。因此,可能无法为这些不受支持的MATLAB命令生成代码。 当分别描述C和MATLAB动作语言时,可读性会提高。

jc_0481:在Stateflow中对浮点数使用硬相等比较

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a: 禁止使用“==”、“!=”、“~=”对浮点进行操作

原因

A. 浮点数据类型不能用==。

na_0001:Stateflow操作符的标准用法

NA-MAAB: 不建议

JMAAB: a,b1/b2/b3,c

Matlab版本:all

规则

a:当[Chart]属性{Action Language}设置为“C”时,运算符(“&”、“|”、“^”、“~”)只能用于位运算。

b1:当[Chart]属性{Action Language}设置为“C”时,运算符“~=”应用于不等式运算。

【正确】运算符“~=”用于不等式运算。

当[Chart]属性{Action Language}设置为“C”时。,运算符“!=”应用于不等式运算。

【正确】运算符“!=”用于不等式运算。

当[Chart]属性{Action Language}设置为“C”时,运算符“<>”应用于不等式运算。

【正确】运算符“<>”用于不等式运算。 (没见过)

c:当[Chart]属性{Action Language}设置为“C”时,操作符“!”应用于逻辑否定。

【正确】操作符“!”用于逻辑否定。

【不正确】除“!”之外的操作符用于逻辑否定。

原因

a当这些[图表]属性设置如下:•{Action Language}设置为“MATLAB”•{Action Language}设置为“C”,并且选择了{Enable C-bit operations},“&&&”和“&”、“| |”和“|”时,具有相同的计算功能。然而,当“&&”和“&”或“| |”和“|”组合在同一图表中时,很难确定它们是单独的计算函数还是相同的计算函数。

b1b2b3 一致使用相等运算符可以提高可读性。

C 逻辑否定运算符的一致使用提高了可读性。 当选择[Chart]属性{C-bit operations are enabled}时,“!”的功能操作符保持不变,不受更改设置导致的逻辑更改的影响。

jc_0655: 禁止在 stateflow 中对逻辑值进行比较

NA-MAAB: 不建议

JMAAB: a

Matlab版本:all

规则

a:逻辑常数不得相互比较。

【正确】逻辑常数不能相互比较。

【错误】逻辑常数相互比较。

原因

A. 对于逻辑信号条件表达式,一致使用“布尔值信号==true(布尔类型常量)”或“(布尔值信号)”可以提高可读性。 防止模型中出现冗余。 偏离规则可能会导致意外问题。

jc_0451: 一元负号在无符号数前的使用

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a:一元负号不能用于无符号整数。

原因

a. 可能会出现意外结果。

jc_0802:禁止在Stateflow中使用隐式类型转换

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a: 禁止在 Stateflow 所有操作中使用隐式类型转换,包括在相同数据类型的变量之间执行替换、比较、算术等操作。函数调用中的实际参数和形式参数的数据类型应该是相同的。

【正确】 变量使用相同的数据类型进行计算。示例:比较操作

示例:算术运算和赋值运算(复合表达式)

变量有不同的数据类型,但在计算前会显式地进行类型转换。示例:比较操作

示例:算术运算和赋值运算(复合表达式)

函数调用中实际参数和形式参数的数据类型相同

【不正确】 变量使用不同的数据类型进行计算。示例:比较操作

示例:算术运算和赋值运算(复合表达式)

计算在无符号整数类型变量和有符号整数之间执行。

函数调用中实际参数和形式参数的数据类型不同。

原因

A. 隐式数据类型转换可能会产生意外的结果。

jc_0803:将值传递给库函数

NA-MAAB: a1/a2,b1/b2,c1/c2,d1/d2

JMAAB: a1/a2,b1/b2,c1/c2,d1/d2

Matlab版本:all

规则

a1:使用abs库函数时,不应提供带符号整数类型的最小值。

错误?是因为函数是int8输入?

a2:不得使用abs库功能。

b1:使用sqrt库函数时,不得输入负数。

b2:不使用sqrt函数

c1:使用log和log10库函数时,不得输入负数。

c2:不得使用log或log10库函数。

d1:使用fmod库函数时,第二个参数不得输入零。

d2:不使用fmod函数

原因

a1b1c1d1 传递无效值时库函数的行为取决于处理系统,可能会导致意外行为。

a2b2 c2d2 为了避免在Simulink和Stateflow中对同一保护进程进行重复建模,请使用Simulink执行算术运算。

Label description标签描述

jc_0732:状态名称、数据名称和事件名称之间的区别

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a:单一[chart]中的状态、数据(inputs and outputs, local data, constants, parameters, data store memory)或事件名称不得使用相同的名称。

【正确】名称不重复。

【不正确】名称重复。

原因

a. 使用唯一的名称可以防止误解。

jc_0730:stateflow中的唯一状态名

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a:[chart]中的state名称应是唯一的。链接的原子子图表的内容可以被视为另一个[chart]。

原因

a:可读性受损。 偏离规则可能会导致意外的代码行为。

jc_0731:State name的格式

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a:state名称后面应加一行不包含斜杠(/)的新行。

原因

a. 当一致地描述state名称时,可读性会提高。

jc_0501:状态标签中的换行符

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a:state action不得与state action type在同一行

原因

a:可读性受损。

jc_0736: Stateflow 中的统一缩进

NA-MAAB: 不建议

JMAAB: abc

Matlab版本:all

规则

a:状态动作类型在行首不应有空格。可执行语句在行首应有一个单字节空

【正确】可执行语句在行首使用一个单字节空格。

【不正确】可执行语句在行首没有单字节空格。

b: 不得在以下内容之前输入空格:•“[”转移条件•“{”条件动作•“/”转移动作

【正确】在转换标签条件、条件动作和转移动作的“[”和“{”之前不输入空格。

【错误】在转换标签条件、条件动作和转移动作的“[”和“{”之前输入空格。

c:在转换动作的“/”之后至少应输入一个单字节空格。

【正确】在转换动作的“/”后面输入单字节空格。

【不正确】转换动作的“/”后面没有单字节空格。

原因

A. 在可执行语句之前使用统一的缩进,可以澄清状态标签的状态操作类型与执行语句之间的联系,从而提高可读性。

B 对转换条件、条件动作和转换动作使用统一的缩进可以提高可读性。

C 一致使用空格可以提高可读性。

jc_0739: 状态中的描述文本

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a: 描述文本不得超出 state

原因

a. 当一个状态内的文本超出其边界时,可能很难确定文本属于哪个状态。

jc_0770:转移标签的位置

NA-MAAB: 不建议

JMAAB: a1/a2

Matlab版本:all

规则

a1: 转移标签应当位于转移线的起始位置

【正确】转移标签位于起始位置。

【错误】转移标签的位置不一致,与转移线不对应。

a2: 转移标签应当位于转移线的中间位置 (推荐)

【正确】转移标签位于转移线中心附近。

【错误】转移标签的位置不一致,与转移线不对应。

原因

a1a2转移标签的一致定位使标签和线之间的对应关系更容易理解。

jc_0771:转换标签中的注释位置

NA-MAAB: a1/a2

JMAAB: a1/a2

Matlab版本:all

规则

a1:转移标签中的注释应位于转移条件、条件动作、转移动作和状态流事件之上。

【正确】注释在转移标签中的位置是统一的。

【错误】注释在转移标签中的位置不一致。

a2:转移标签中的注释应位于转移条件、条件动作、转移动作和状态流事件的下方。

【正确】注释在转移标签中的位置是统一的。

【错误】注释在转移标签中的位置不一致。

原因

a1a2 注释在转移标签中的统一定位澄清了标签对应的转移条件、条件动作、转移动作或状态流事件。

jc_0752: 转移标签的条件动作

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a:条件动作中的括号只能在一行上使用花括号。(在花括号前后应开始一条新线。)

【正确】注:该示例用于流程图,但该规则也适用于状态转换。

原因

a. 澄清条件操作可以提高可读性。

jc_0774:无条件转换的注释

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a:当无条件转换中没有处理时,应在转换标签上写上注释。

错误:条件路径上没有提供明确的注释,因此很难确定没有处理是否是故意的。

原因

A. 增加可读性。 添加到转换标签的注释也包含在生成的代码中

Miscellaneous其他

jc_0511:从图形函数返回值

NA-MAAB: 不建议

JMAAB: a

Matlab版本:all

规则

a: 图形函数的返回值应当只在一处赋值

原因

A. 对输出名称的修改受到限制,以防止遗漏或忽略更改。

jc_0804:禁止使用带有图形函数的递归调用

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a: 禁止从图形函数调用自身以及图形函数之间的调用。

【正确】在图形功能中执行处理。

【不正确】图形函数正在调用自身。

图形函数正在相互调用。

原因

A. 可读性降低。偏离规则可能会导致意外溢出和无限循环。

na_0042:Simulink函数的使用

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a:在[图表]中使用[Simulink Function]时,应满足以下一个或多个条件。

 输入\输出变量应仅使用[Simulink Function]中的本地[Chart]数据。

 输入\输出变量应仅使用本地[chart]数据和[Simulink函数]中的输入数据。

 [Simulink Function]应在[Chart]中的多个位置调用。

 不应在每个时间步调用[Simulink Function]。

【正确】[Simulink Function]lookup1D不是从每个时间步调用的,因此可以使用。

【不正确】[Simulink Function]lookup1D从每个时间步调用,因此无法使用。(out是Stateflow输出数据)

原因

a. 为了提高模型的可读性,在chart中应谨慎使用[Simulink函数]。

na_0039: stateflow中Simulink 函数的使用限制

NA-MAAB: a

JMAAB: a

Matlab版本:all

规则

a: stateflow中的Simulink 函数不得使用 stateflow

原因

a. 可读性降低,并可能导致设计错误。

  • 13
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Simulink Stateflow是一种基于模型的设计和仿真工具,可以在Matlab/Simulink环境下进行系统级建模和仿真。它可以帮助工程师通过图形化编程方式来实现各种控制逻辑,例如状态机、事件驱动等。 Stateflow在许多应用领域中广泛应用,例如自动化、控制和通信系统。下面我来举一个简单的Stateflow案例来说明其应用。 假设我们要设计一个自动贩卖机系统,其中包含以下几个状态:待机、选择商品、等待付款和出货状态。我们可以使用Stateflow来描述这些状态之间的转换和行为。 在Stateflow中,每个状态都可以用一个矩形表示,并且可以定义进入状态时的初始化动作和在状态内发生的事件。我们可以使用转换条件来定义状态之间的转换条件,例如当用户按下购买按钮时,系统从选择商品状态转换到等待付款状态。 在每个状态中,我们可以定义相关的操作和行为。例如,在待机状态下,系统可以定时检测是否有用户按下按钮,如果有,则进入选择商品状态。在等待付款状态下,系统可以接收付款信息,并根据付款结果来决定是否进入出货状态。 在Stateflow中,我们还可以定义事件和条件之间的层级关系。例如,在等待付款状态中可以定义一个超时事件,如果在规定时间内没有收到付款信息,系统将自动转换到选择商品状态,并重新开始流程。 通过使用Simulink Stateflow,我们可以在一个集成的开发环境中对自动贩卖机系统进行建模和仿真。这样可以大大简化系统设计和调试过程,并提高系统的可靠性和性能。 总之,Simulink Stateflow是一个强大的建模和仿真工具,可以在各种应用领域中实现复杂的控制逻辑。通过它,工程师可以图形化地描述系统的状态转换和行为,并进行细粒度的调试和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞哥哥s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值