MAB(Mathworks Advisory Board,Mathworks咨询委员会)针对MATLAB、Simulink、Stateflow规定了建模重要基本规则,这些建模指南的总体目的是让模型的建模者和使用者能够形成简单、统一的理解,本文章主要针对2020年3月发布的5.0版本进行逐条解读。
众所周知,编码规范可以在命名、缩进、注释、格式上统一代码风格,别人一看就懂,降低了沟通成本,并且规范的代码结构也使得代码的可读性、可维护性极大提升,同样,建模规范也有异曲同工之妙,遵守建模规范是实现以下目标的重要前提主要目标是:
- 提高图形的可理解性
- 提高功能分析的可读性
- 防止连接错误
- 注释等
- 提高代码生成效率
- 确保生成代码的健壮性
目录
- Stateflow建模规范(共54条)
-
- 标签描述(10 条)
- 详细解读
-
- jc_0732: 状态名、数据名和事件名区分规范
- jc_0730: Stateflow 块中唯一状态名规范
- jc_0731: 状态名格式规范
- jc_0501: 状态标签换行规范
- jc_0736: Stateflow 块中统一缩进规范
- jc_0739: 状态内文本描述规范
- jc_0770: 转换标签位置规范
- jc_0771: 转换标签中注释位置规范
- jc_0752: 转换标签中的条件动作规范
- jc_0774: 直通转移注释规范
- 其他Stateflow规范
-
- Stateflow模块 / 数据 / 事件
- Stateflow图
- 条件转移 / 动作
- 其他
- 声明
MAB 5.0共151条规范,分为命名规范、Simulink建模规范、Stateflow建模规范、MATLAB规范四类。
Stateflow规范共54条,分以下5部分进行解读
- 第1部分:Stateflow模块 / 数据 / 事件
- 第2部分:Stateflow图
- 第3部分:条件转移 / 动作
- 第4部分:标签描述
- 第5部分:其他
本文章解读第4部分 标签描述
MAB 5.0最全规范见 MATLAB MAB 5.0建模规范解读(最全)
Stateflow建模规范(共54条)
标签描述(10 条)
| 1 | jc_0732 | Distinction between state names, data names, and event names状态名、数据名和事件名区分规范 | 单个 Chart 中状态名、数据名、事件名不重复 |
| 2 | jc_0730 | Unique state name in Stateflow blocksStateflow 块中唯一状态名规范 | Chart 中状态名唯一 |
| 3 | jc_0731 | State name format状态名格式规范 | 状态名后换行,不含斜杠(/) |
| 4 | jc_0501 | Line breaks in state labels状态标签换行规范 | 状态动作语句与动作类型不写在同一行 |
| 5 | jc_0736 | Uniform indentations in Stateflow blocksStateflow 块中统一缩进规范 | 可执行语句前加 1 个单字节空格;转换条件 / 动作前不加空格;转换动作 “/” 后加空格 |
| 6 | jc_0739 | Describing text inside states状态内文本描述规范 | 状态内文本不超出状态边界 |
| 7 | jc_0770 | Position of transition label转换标签位置规范 | 转换标签统一位于转换线源头或中心 |
| 8 | jc_0771 | Comment position in transition labels转换标签中注释位置规范 | 转换标签中的注释统一位于条件 / 动作上方或下方 |
| 9 | jc_0752 | Condition action in transition label转换标签中的条件动作规范 | 条件动作的花括号在单行,前后换行 |
| 10 | jc_0774 | Comments for through transition直通转移注释规范 | 无条件转移无处理时,需添加说明注释(如 /do nothing/) |
详细解读
jc_0732: 状态名、数据名和事件名区分规范
规范描述
核心目的
- 避免逻辑歧义:同名的状态、数据或事件会导致模型逻辑混淆(如无法区分代码中引用的是状态还是数据),规范可杜绝此类误解。
- 保障代码生成准确性:名称唯一能确保生成的嵌入式代码中,状态变量、数据变量、事件标识的命名无冲突,避免编译错误或运行时非预期行为。
- 提升模型可读性与可维护性:清晰区分三类对象的命名,让开发人员快速识别对象类型,降低跨团队协作的理解成本,便于后续调试与修改。
示例说明
名称不重复。![]() |
名称重复。![]() |
jc_0730: Stateflow 块中唯一状态名规范
规范描述
核心目的
- 避免逻辑歧义:重复的状态名会导致开发人员无法区分不同状态的功能的,混淆状态流转逻辑,进而引发建模与调试错误。
- 保障代码生成准确性:状态名是生成代码中状态标识的核心依据,重名会导致代码中变量 / 宏定义冲突,编译失败或运行时非预期行为。
- 提升模型可读性与可维护性:唯一状态名可直观体现各状态的业务含义(如 “Idle_Mode”“Run_Mode”),便于跨团队协作时快速理解状态功能,降低维护成本。
示例说明
名称不重复。![]() |
名称重复。![]() |
jc_0731: 状态名格式规范
规范描述
核心目的
- 避免语法解析歧义:斜杠(/)在 Stateflow 中常用于转移动作标识(如/action),若在状态名称后的换行中出现斜杠,可能导致模型解析时混淆 “状态名称延伸” 与 “转移动作”,引发语法识别错误。
- 提升模型可读性:统一状态名称的格式规范,明确状态名称与后续动作、注释的分隔边界,让开发人员直观区分状态标识与执行逻辑,降低跨团队协作的理解成本。
- 保障建模一致性:标准化状态名称的书写格式,避免因格式不统一导致的模型结构混乱,符合工程化建模对格式规整性的要求,简化模型评审与调试流程。
示例说明
状态名后面紧跟一个不包含斜杠 (/) 的新行。![]() |
状态名后面紧跟一个包含了斜杠 (/) 的新行。![]() |
jc_0501: 状态标签换行规范
规范描述
核心目的
- 提升模型可读性:明确区分状态动作类型与具体执行语句,让开发人员快速识别动作类型与对应逻辑的归属关系,避免因同行书写导致的视觉混淆。
- 统一建模格式:标准化状态标签的书写规范,使不同开发人员的建模风格保持一致,降低跨团队协作的理解成本。
- 简化评审与调试:规整的换行格式让状态动作的层级关系更清晰,便于模型评审时快速核查动作逻辑,减少调试过程中对语句归属的追溯时间。
示例说明
状态动作语句未和状态动作类型写在同一行。![]() |
状态动作语句未和状态动作类型写在了同一行。![]() |
jc_0736: Stateflow 块中统一缩进规范
规范描述
核心目的
- 提升模型可读性:统一的缩进与空格规则可清晰区分状态动作类型与执行语句、语法符号与内容,让开发人员快速识别逻辑结构,降低跨团队协作的理解成本。
- 避免语法歧义:规范符号前后的空格使用,可杜绝因格式不统一导致的模型解析误解(如空格干扰条件表达式、动作语句的识别)。
- 保障建模一致性:标准化格式要求,使不同开发人员的建模风格统一,简化模型评审流程,减少因格式差异引发的沟通成本。
示例说明
可执行语句在行首有单字节空格。![]() |
转移标签条件、条件动作和转移动作的 [ 和 { 前都没有输入空格。![]() |
转移动作的 / 后输入了单字节空格。![]() |
可执行语句在行首没有单字节空格。![]() |
转移标签条件、条件动作和转移动作的 [ 和 { 前都输入了空格。![]() |
转移动作的 / 后没有单字节空格。![]() |
jc_0739: 状态内文本描述规范
规范描述
核心目的
- 避免归属混淆:状态内文本溢出边界后,易与相邻状态的文本、转移线或其他元素混淆,导致开发人员误判文本所属的状态,规范可杜绝此类误解。
- 提升模型可读性:文本完全包含在状态边界内,使状态的整体结构直观清晰,跨团队协作时可快速识别每个状态的内部逻辑,降低理解成本。
- 保障建模规整性:标准化状态内文本的布局要求,使 Stateflow 模型的视觉呈现更规整,符合工程化建模对格式统一性的要求,简化模型评审流程。
- 避免编辑失误:溢出的文本可能被误操作修改(如编辑相邻状态时误改其他状态的溢出文本),规范可降低此类操作风险,确保逻辑完整性。
示例说明
状态内部的文本(包括状态动作、注释、转移条件关联文本等)未超出该状态的边界范围。![]() |
状态内部的文本(包括状态动作、转移条件关联文本等)超出了该状态的边界范围。![]() |
jc_0770: 转换标签位置规范
规范描述
- 选项1:转移标签必须位于转移线的起点附近,与转移线起点对应关系明确。
- 选项2:转移标签必须位于转移线的中间位置附近,保持视觉上的居中对齐。
核心目的
- 避免归属混淆:转移标签位置统一可明确标识其对应的转移线,杜绝因标签位置分散导致的 “标签 – 转移线” 匹配错误,尤其在多转移线交叉场景中提升辨识度。
- 提升模型可读性:标准化的标签位置让开发人员快速关联转移条件 / 动作与对应转移线,降低跨团队协作时的视觉理解成本,使状态流转逻辑更直观。
- 保障建模一致性:统一的布局规范使 Stateflow 模型视觉呈现更规整,符合工程化建模对格式统一性的要求,简化模型评审与调试流程。
- 降低维护成本:规范的标签位置减少后续修改时对标签与转移线对应关系的追溯时间,避免因位置混乱导致的误操作(如修改错误转移线的标签)。
示例说明
转移标签放置在源点处或靠近转移线中心的位置。![]() ![]() |
带转移条件的转移标签放置在靠近转移线源点的位置,不带转移条件的转换标签放置在靠近转移线终点的位置。![]() |
转移标签的放置位置不一致,且与转移线不对应。![]() |
不带转移条件的转移标签没有放置在靠近转移线终点的位置。![]() |
jc_0771: 转换标签中注释位置规范
规范描述
- 选项 1:转移标签中的注释必须位于转移条件、条件动作、转移动作及 Stateflow 事件的上方。
- 选项 2:转移标签中的注释必须位于转移条件、条件动作、转移动作及 Stateflow 事件的下方。
核心目的
- 避免归属混淆:统一注释位置可明确标识注释对应的转移条件、动作或事件,杜绝因注释位置分散导致的 “注释 – 转移元素” 匹配错误,尤其在多条件、多动作的复杂转移标签中提升辨识度。
- 提升模型可读性:标准化的注释位置让开发人员快速关联注释与对应转移逻辑,降低跨团队协作时的视觉理解成本,使状态流转的注释说明更直观易懂。
- 保障建模一致性:统一的布局规范使 Stateflow 模型的转移标签格式更规整,符合工程化建模对格式统一性的要求,简化模型评审与调试流程。
- 降低维护成本:规范的注释位置减少后续修改时对注释归属的追溯时间,避免因位置混乱导致的误理解或误修改(如修改注释时关联错误的转移逻辑)。
示例说明
转移标签中注释的位置一致。![]() |
转移标签中注释的位置不一致。![]() |
jc_0752: 转换标签中的条件动作规范
规范描述
核心目的
- 避免语法边界混淆:标准化花括号使用与换行格式,可明确区分条件动作与转移条件、转移动作的语法边界,杜绝因格式不统一导致的模型解析误解。
- 提升模型可读性:统一的格式使开发人员快速识别转移标签中的条件动作范围,降低跨团队协作时的视觉理解成本,让状态流转逻辑更直观。
- 保障建模一致性:标准化条件动作的书写规范,使 Stateflow 模型的转移标签格式更规整,符合工程化建模对格式统一性的要求,简化模型评审流程。
- 避免编辑失误:清晰的格式边界可减少修改时的误操作(如误删条件动作内容、混淆条件与动作的归属),确保逻辑完整性。
示例说明
条件动作中的括号在一个单行上使用花括号。花括号前后另起一行。![]() |
条件动作中的括号未在一个单行上使用花括号。花括号前后未另起一行。![]() |
jc_0774: 直通转移注释规范
规范描述
核心目的
- 避免逻辑误解:无条件转移无处理逻辑时,易被误认为是建模遗漏,添加注释可明确告知 “无处理是有意为之”,杜绝误解。
- 提升模型可读性:注释可补充转移的设计意图(如 “状态分发后无额外处理”),帮助跨团队协作人员快速理解转移逻辑,降低理解成本。
- 保障建模完整性:标准化穿透转移的注释要求,使模型逻辑表达更严谨,避免因无注释导致的后续修改失误(如误添加多余处理逻辑)。
示例说明
提供了说明性注释 /do nothing/。![]() |
条件路径上没有提供说明性注释,因此很难确定缺少动作是否是有意为之。![]() |
其他Stateflow规范
Stateflow模块 / 数据 / 事件
Stateflow模块 / 数据 / 事件规范详细解读见 MATLAB MAB 5.0建模规范-Stateflow规范 第1部分(详细)
Stateflow图
Stateflow图规范详细解读见 MATLAB MAB 5.0建模规范-Stateflow规范 第2部分(详细)
条件转移 / 动作
条件转移 / 动作规范详细解读见 MATLAB MAB 5.0建模规范-Stateflow规范 第3部分(详细)
其他
其他规范详细解读见 MATLAB MAB 5.0建模规范-Stateflow规范 第5部分(详细)
声明
此文章基于Mathworks官方MAB 5.0规范进行解读,部分图形会有引用,而非另起炉灶撰写。
感谢阅读,如有错误恳请指正,如对您有帮助,动手点个赞吧^ – ^































