本文最后更新于 2026年4月20日。
在默认情况下,Simulink 确实会生成很多类似于 rtb_...(Signal 变量)或 dw_...(DWork 变量)的名称,这对于手写代码对接或代码审查来说不够友好。
**答案是肯定的:这些名称完全可控。**通过以下几个层级来约束和自定义变量名称:
1. 最直接的方法:命名信号线 (Signal Naming)
在 Simulink 中,信号线的名称直接决定了生成代码中的变量名。
-
操作: 双击信号线,输入你想要的名称(例如
engine_speed)。 -
关键步骤: 右键点击该信号线,选择 Properties,勾选 "Signal name must resolve to Simulink signal object" 或者在 Code Generation 选项中设置 Storage Class。
-
效果: 生成的代码中,该变量将不再是随机的
rtb_xxx,而是engine_speed。
2. 使用数据字典或基础工作区 (Simulink.Signal)
如果你希望更专业地管理变量,建议使用 Simulink.Signal 对象。
-
操作: 在 MATLAB Command Window 或 Data Dictionary 中定义:
my_var = Simulink.Signal;my_var.CoderInfo.StorageClass = 'ExportedGlobal'; -
效果: 你可以精确控制变量的存储类型(全局变量、静态变量等)和名称。
3. 配置参数中的命名规则 (Identifier Formatting)
如果你想批量改变生成名称的“风格”,可以修改模型配置:
-
路径:
Configuration Parameters->Code Generation->Identifiers。 -
可控参数:
-
Global variables: 默认是
$R$N(N是数字)。你可以改为 sys_$N等。 -
Local temporary variables: 默认是
rtb_$N。
-
-
建议: 除非有特定的命名规范需求,否则通常在这里修改前缀。
4. 使用存储类 (Storage Classes)
这是控制变量最核心的手段。通过 Embedded Coder Dictionary 或者信号的 Code Mappings 窗口:
-
可以将信号设置为
ExportedGlobal(生成独立的全局变量)。 -
可以将信号设置为
ImportedExtern(代码中只声明extern,由你自己定义)。 -
可以将信号设置为
BitField(节省内存)。
总结建议
| 需求场景 | 推荐做法 |
|---|---|
| 偶尔改一两个变量 | 直接给信号线命名,并设置 Storage Class。 |
| 大规模标准化管理 | 使用 Simulink Data Dictionary (SLDD) 定义 Simulink.Signal 对象。 |
| 改变生成的整体风格 | 在 Configuration Parameters 的 Identifiers 栏目修改模板。 |
| 与手写代码对接 | 将变量设为 ImportedExtern 或 ExportedGlobal。 |
💡 小提示: > 如果你发现即使命了名,代码里还是有
rtb_前缀,通常是因为该信号被优化了(被视为局部变量)。在信号属性里把 Storage Class 改为ExportedGlobal就能强行让它以你定义的名称出现在.c或.h文件中。