MAB(Mathworks Advisory Board,Mathworks咨询委员会)针对MATLAB、Simulink、Stateflow规定了建模重要基本规则,这些建模指南的总体目的是让模型的建模者和使用者能够形成简单、统一的理解,本文章主要针对2020年3月发布的5.0版本进行逐条解读。
众所周知,编码规范可以在命名、缩进、注释、格式上统一代码风格,别人一看就懂,降低了沟通成本,并且规范的代码结构也使得代码的可读性、可维护性极大提升,同样,建模规范也有异曲同工之妙,遵守建模规范是实现以下目标的重要前提主要目标是:
- 提高图形的可理解性
- 提高功能分析的可读性
- 防止连接错误
- 注释等
- 提高代码生成效率
- 确保生成代码的健壮性
目录
- Stateflow建模规范(共54条)
- 详细解读
-
- [jc_0511: 图形函数返回值规范](#jc_0511: 图形函数返回值规范)
- [jc_0804: 图形函数禁止递归调用规范](#jc_0804: 图形函数禁止递归调用规范)
- [na_0042: Simulink 函数使用规范](#na_0042: Simulink 函数使用规范)
- [na_0039: Chart 块中 Simulink 函数使用限制规范](#na_0039: Chart 块中 Simulink 函数使用限制规范)
- 其他Stateflow规范
-
- [Stateflow模块 / 数据 / 事件](#Stateflow模块 / 数据 / 事件)
- Stateflow图
- [条件转移 / 动作](#条件转移 / 动作)
- 标签描述
- 声明
MAB 5.0共151条规范,分为命名规范、Simulink建模规范、Stateflow建模规范、MATLAB规范四类。
Stateflow规范共54条,分以下5部分进行解读
- 第1部分:Stateflow模块 / 数据 / 事件
- 第2部分:Stateflow图
- 第3部分:条件转移 / 动作
- 第4部分:标签描述
- 第5部分:其他
本文章解读第5部分 其他
MAB 5.0最全规范见 MATLAB MAB 5.0建模规范解读(最全)
Stateflow建模规范(共54条)
其他(4条)
| 序号 | 规范 ID | 规范名称 | 核心要求简述 |
|---|---|---|---|
| 1 | jc_0511 | Return values from a graphical function 图形函数返回值规范 | 图形函数的返回值仅在一个位置设置 |
| 2 | jc_0804 | Prohibited use of recursive calls with graphical functions 图形函数禁止递归调用规范 | 图形函数不允许递归调用或相互调用 |
| 3 | na_0042 | Usage of Simulink functions Simulink 函数使用规范 | Chart 中 Simulink 函数仅使用本地数据 / 输入数据;或被多处调用;或不按每个时间步调用 |
| 4 | na_0039 | Limitation on Simulink functions in Chart blocks Chart 块中 Simulink 函数使用限制规范 | Simulink 函数中不使用 Stateflow 块 |
详细解读
jc_0511: 图形函数返回值规范
规范描述
- 图形函数的返回值只应在一个位置设置。
核心目的
- 避免返回值混乱:分散设置返回值可能导致不同执行路径返回不一致的结果,或因分支遗漏导致返回值未定义,规范可杜绝此类风险。
- 保障逻辑确定性:统一返回值设置位置,使函数的输出逻辑透明化,确保仿真与代码生成时的结果一致性,符合嵌入式控制器对函数输出稳定性的要求。
- 提升模型可读性与可维护性:集中管理返回值,让开发人员快速定位函数的输出逻辑,避免因多路径返回导致的理解偏差,降低跨团队协作的维护成本。
示例说明
| 正确示例 |
|---|
图形函数的返回值只在一个位置设置。 ![]() |
| 错误示例 |
|---|
图形函数的返回值在多个位置设置。 ![]() |
jc_0804: 图形函数禁止递归调用规范
规范描述
- 禁止图形函数的自调用以及图形函数之间的相互调用。
核心目的
- 避免运行时异常:递归调用可能导致栈溢出、无限循环等问题,尤其嵌入式系统的内存与运行资源有限,此类异常会直接导致系统崩溃,规范可从源头规避该风险。
- 保障逻辑确定性:禁止递归可确保图形函数的执行流程清晰可控,无不确定的调用深度与循环,符合嵌入式控制器对逻辑稳定性的要求。
- 提升模型可读性与可维护性:非递归的调用关系更直观,开发人员可快速追溯函数执行路径,降低跨团队协作时的理解成本,减少调试难度。
示例说明
| 正确示例 |
|---|
处理在图形函数内执行。 ![]() |
| 错误示例 |
|---|
图形函数正在调用其自身。 ![]() |
图形函数正在互相调用。 ![]() |
na_0042: Simulink 函数使用规范
规范描述
- 仅当满足以下任意一项或多项条件时,才可在 Stateflow [Chart] 中使用 [Simulink Function]:
- 输入 / 输出变量仅使用 [Chart] 的局部数据;
- 输入 / 输出变量仅使用 [Chart] 的局部数据和输入数据;
Simulink Function\] 需在 \[Chart\] 内的多个位置被调用;
核心目的
- 提升模型可读性:限定 [Simulink Function] 的使用场景,避免在无需复用、高频调用等场景下滥用,使模型结构更清晰,便于开发人员理解函数用途与调用逻辑。
- 优化模型性能:避免 [Simulink Function] 被每个时间步强制调用导致的冗余计算,降低模型仿真与代码生成的资源消耗,提升运行效率。
- 保障逻辑合理性:明确输入 / 输出变量的使用范围(局部数据、输入数据),避免变量跨范围滥用导致的逻辑混乱,确保函数与 [Chart] 的数据交互可控。
示例说明
| 正确示例 |
|---|
Simulink Function 模块lookup1D 没有在每个时间步中都被调用,因此可以使用。 ![]() |
| 错误示例 |
|---|
Simulink Function 模块lookup1D 在每个时间步中都被调用,因此无法使用(out 是 Stateflow 的输出数据)。 ![]() |
na_0039: Chart 块中 Simulink 函数使用限制规范
规范描述
- 不应在 Stateflow Chart (Stateflow) 所包含的 Simulink Function模块中使用 Stateflow 模块。
核心目的
- 避免逻辑层级混淆:Stateflow 块(如 [Chart])与 [Simulink Function] 分属不同建模逻辑载体,嵌套使用会导致层级关系混乱,规范可明确两者的使用边界,杜绝理解偏差。
- 降低设计错误风险:Stateflow 块的状态流转、事件触发逻辑与 [Simulink Function] 的运算逻辑嵌套后,易引发执行顺序冲突、数据交互异常等问题,禁止混用可从源头规避此类风险。
- 提升模型可读性与可维护性:明确 [Simulink Function] 的内部实现范围,让开发人员快速识别函数的逻辑边界,避免因嵌套 Stateflow 块导致的调试与修改困难,降低跨团队协作成本。
示例说明
| 错误示例 |
|---|
![]() |
其他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规范 第4部分(详细)
声明
此文章基于Mathworks官方MAB 5.0规范进行解读,部分图形会有引用,而非另起炉灶撰写。
感谢阅读,如有错误恳请指正,如对您有帮助,动手点个赞吧^ - ^







