simulink模型生成c代码的时候很多自动生成的变量名称,这个名称可控吗

5 次阅读

本文最后更新于 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$NRN是数字)。你可以改为 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 ParametersIdentifiers 栏目修改模板。
与手写代码对接 将变量设为 ImportedExternExportedGlobal

💡 小提示: > 如果你发现即使命了名,代码里还是有 rtb_ 前缀,通常是因为该信号被优化了(被视为局部变量)。在信号属性里把 Storage Class 改为 ExportedGlobal 就能强行让它以你定义的名称出现在 .c.h 文件中。