Hyowinner的MBD技术论坛

 找回密码
 立即注册
搜索
查看: 200|回复: 0

Simulink AI 建模规范Skill:命名、布局、模块与连线

[复制链接]

108

主题

281

帖子

4507

积分

管理员

校长

Rank: 9Rank: 9Rank: 9

积分
4507
QQ
发表于 7 天前 | 显示全部楼层 |阅读模式
Simulink AI 建模规范:命名、布局、模块与连线的工程化约束

最近用 AI 或脚本自动生成 Simulink 模型时,一个很常见的问题是:功能能跑,但模型打开后不够工程化,比如块名是 Constant1/Add2,信号线交叉,反馈线贴着模块,数据类型靠继承,验证用 Display/Scope 混在算法子系统里。

下面整理一份面向 AI 建模的 Simulink 规范,目标不是替代项目正式的 MAB/MAAB 检查,而是给 AI 一个更明确的建模约束,让生成出来的模型更接近工程师愿意维护的模型。

一、总体原则

1. 单一职责:每个子系统只表达一个明确功能,不要把输入处理、核心算法、输出处理混在同一层。
2. 显式优先:数据类型、采样时间、初值、常量含义应显式设置,避免大量继承类型导致审查困难。
3. 从左到右:主数据流从左到右,控制信号从左上到右下,反馈环路清晰绕行。
4. 少交叉:连线不穿越模块,不重叠标签,不出现无意义折返。
5. 接口稳定:顶层只暴露真实输入输出,内部调试量不要随意做成 Outport。
6. 可检查:模型生成后应能运行项目选择的 MAB/MAAB 或 Model Advisor 基础检查。

二、模型层级规范

1. 顶层只放接口、主要功能子系统和必要说明,不直接堆放大量算法块。
2. 算法子系统建议命名为 SS_FunctionName,例如 SS_CStaticCntReturn1
3. 子系统深度通常控制在 2 到 4 层;超过 4 层时要确认是否过度拆分。
4. 可复用算法子系统可设置为 atomic subsystem,并按代码生成需求设置 reusable function。
5. Display、Scope、To Workspace 等验证用块不要混入生产算法子系统,建议放在测试模型或验证脚本里。

三、命名规范

命名要表达角色、含义和数据类型。建议使用英文、数字和下划线,避免空格、中文、特殊符号和自动生成名称。

对象推荐格式示例说明
模型lower_snake_casec_static_cnt_return1_mab短、稳定、能表达模型目的
子系统SS_FunctionNameSS_CStaticCntReturn1SS 表示 Subsystem
输入端口U_SignalNameU_EngineSpeedU 表示外部输入
输出端口Y_SignalNameY_ReturnValueY 表示外部输出
常量块C_MeaningC_ReturnValueC 表示 Constant
延迟/状态D_StateNameD_CntStateD 表示 Delay 或状态记忆
求和块Sum_ResultSum_CntNext说明运算结果
开关块Sw_ConditionSw_EnableLimit说明选择条件
信号线sig_meaning_typesig_cnt_next_s32关键线必须命名


四、数据类型和采样时间规范

1. 常量必须设置数据类型,例如 int32(1)uint16(0)true
2. 状态模块必须设置初值,初值数据类型应和状态数据类型一致,例如 int32(0)
3. 整数运算应明确溢出策略;需要饱和时显式开启 Saturate on integer overflow。
4. 离散模型统一设置固定步长求解器;块级采样时间只在确有必要时显式设置。
5. 不同采样率之间必须使用 Rate Transition 或明确的接口子系统,避免隐式速率转换。

五、布局规范

1. 主数据流从左到右,控制信号从上到下或左上到右下。
2. 模块之间至少保留 60 到 100 像素,复杂模块保留更大间距。
3. 同一功能链路上的模块水平居中,并列分支纵向对齐。
4. 反馈线从输出端绕到输入端,形成清晰矩形回路,不贴着模块边缘。
5. 信号标签靠近源端或主水平线段,不能压在线、模块或其它文字上。
6. 注释只写模型意图、关键假设和约束,不解释显而易见的块功能。
7. 一屏内模块数量宜控制在 20 个以内;超过时优先拆分子系统。

六、模块使用规范

场景推荐模块注意事项
常量输出Constant必须设置值、数据类型、采样时间策略
上一拍状态Unit Delay / Delay初值显式设置,状态信号命名
加减运算AddInputs 参数要明确,输出类型按需求设置
乘除缩放Gain / Product避免在 Gain 中隐藏复杂表达式
条件选择Switch / Multiport Switch条件阈值、数据类型和默认分支明确
逻辑判断Relational Operator / Logical Operator布尔信号名称要体现 is、has、enable 等含义
类型转换Data Type Conversion转换原因应通过名称或注释体现
复杂流程Stateflow仅在状态机语义明确时使用
复杂数学MATLAB Function仅在基本块表达成本过高时使用,并保证可代码生成


七、连线规范

1. 关键信号必须命名,名称体现物理含义或算法含义,不使用 signal1、tmp、x。
2. 同一信号的分支应从一个清晰分叉点引出,避免链式跨图分叉。
3. 跨越较远距离的信号优先使用 Goto/From 或 Bus,但不得滥用隐藏数据流。
4. 线段尽量水平或垂直,避免斜线、短碎线和贴边走线。
5. 反馈线必须留出足够空间,标签不能和主数据流标签重叠。
6. 禁止未连接端口、悬空线、无名大范围跨越线。

八、给 AI 的建模提示词模板

可以把下面这段作为生成 Simulink 模型时的基础约束:

请根据以下 C/算法描述生成 Simulink 模型。要求:
1)顶层只包含一个算法子系统和真实输入输出端口;
2)使用 MAB/MAAB 风格命名;
3)所有常量、状态和输出显式设置数据类型;
4)主数据流从左到右,反馈线绕行且信号标签不重叠;
5)关键信号命名为 sig_meaning_type;
6)不要在算法子系统内放 Display、Scope、To Workspace;
7)生成后运行仿真断言和 Model Advisor 基础检查,并给出报告路径。

九、AI 建模后自动检查清单

1. 功能等效:仿真输出和源代码/需求一致,关键边界条件已验证。
2. 顶层接口:只包含真实输入输出,不暴露内部调试信号。
3. 命名:模型、子系统、端口、模块、信号均无默认名称。
4. 数据类型:常量、状态、输出和关键运算类型明确。
5. 采样时间:固定步长设置正确,无无意的继承/多速率问题。
6. 布局:左到右、少交叉、标签不重叠、反馈清晰。
7. 模块选择:基本块优先,MATLAB Function/Stateflow 使用有充分理由。
8. 连线:无悬空线、无未连接端口、分支点清晰。
9. Model Advisor:项目要求的 MAB/MAAB 检查无失败,警告有解释或修正。
10. 代码生成:目标为代码生成时,模型可成功生成代码或通过代码生成前检查。

十、一个简单例子:static cnt++ / return 1

对于下面这段 C 代码:


  1. static int cnt = 0;
  2. cnt++;
  3. return 1;
复制代码


推荐建模方式:

1. 使用 D_CntState 的 Unit Delay 表示 static int cnt,初值设置为 int32(0)
2. 使用 C_CntIncrement 的 Constant 表示增量 int32(1)
3. 使用 Sum_CntNext 计算 sig_cnt_next_s32 = sig_cnt_current_s32 + sig_cnt_increment_s32
4. 将 sig_cnt_next_s32 反馈到 D_CntState 输入,形成下一拍状态。
5. 使用 C_ReturnValue 输出 int32(1),连接到 Y_ReturnValue
6. 如果原函数接口只返回 1,cnt 不应作为顶层 Outport;验证时用日志或测试框架观察内部信号。

十一、不推荐做法

1. 默认块名 Constant1、Add2:审查者无法快速理解模型,应改为 C_ReturnValue、Sum_CntNext 等。
2. 所有信号不命名:检查和调试困难,关键接口、状态、分支和反馈线必须命名。
3. 布局完全依赖自动路由:容易出现线交叉、标签重叠,应先定坐标,再连线,最后少量自动整理。
4. 算法中混入 Display/Scope:生产模型和验证模型边界不清,应放在测试模型或脚本中。
5. 用 MATLAB Function 包住简单逻辑:可读性和可检查性下降,简单加减、比较、选择、延迟优先用基本块表达。
6. 内部状态暴露为顶层输出:会改变接口语义,应使用信号日志或测试 harness 观察内部状态。

十二、推荐的 Model Advisor 基础检查

不同 MATLAB 版本和项目配置中的检查集名称可能不同。若安装 Simulink Check,可以至少运行以下基础检查作为 AI 建模后的快速门禁:

检查 ID用途
mathworks.jmaab.db_0043检查模型字体设置
mathworks.jmaab.db_0097检查信号标签位置,防止标签重叠或不可读
mathworks.jmaab.db_0112检查索引模式一致性
mathworks.jmaab.jc_0201检查子系统名称
mathworks.jmaab.jc_0211检查端口模块名称


建议把这些检查和项目正式 MAB/MAAB 配置文件结合使用。AI 生成模型后,至少应输出仿真结果、检查通过数量、警告数量、失败数量和报告路径。

总结

AI 建模要真正进入工程工作流,不能只追求“能生成一个能跑的模型”,还要让模型具备可读性、可审查性和可维护性。对 AI 来说,越明确的命名、布局、模块和连线约束,越容易生成接近工程规范的 Simulink 模型。

下载:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
持续学习 未来有你
基于场景 解决问题
项目合作联系微信:Hyowinners
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|MBD全栈技术学校|苏ICP备2025212294号-1|Hyowinner校长B站首页|手机版|小黑屋|Hyowinner的MBD技术论坛

GMT+8, 2026-6-25 05:25 , Processed in 0.102465 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表