You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整Simulink模型使Embedded Coder生成数组形式的外部输入输出?

问题背景

当前使用Simulink Embedded Coder生成子系统C代码时,外部输入输出结构体为单个变量形式:

/* External inputs (root inport signals with default storage) */
typedef struct {
  real_T V_dc_abs_B;                   /* '<Root>/V_dc_abs_B' */
  real_T CM_B;                         /* '<Root>/CM_B' */
  real_T GMEAS_A;                      /* '<Root>/GMEAS_A' */
  real_T GMEAS_B;                      /* '<Root>/GMEAS_B' */
  real_T V_dc_abs_A;                   /* '<Root>/V_dc_abs_A' */
  real_T CM_A;                         /* '<Root>/CM_A' */
} ExtU_Regelung_T;

/* External outputs (root outports fed by signals with default storage) */
typedef struct {
  real_T AO_A;                         /* '<Root>/AO_A' */
  real_T AO_B;                         /* '<Root>/AO_B' */
} ExtY_Regelung_T;

希望调整模型,生成类似参考示例的数组形式结构体:

/* External inputs (root inport signals with default storage) */
typedef struct {
  real_T INPUTS[24];                   /* '<Root>/INPUTS' */
} ExtU_WindExample_T;

/* External outputs (root outports fed by signals with default storage) */
typedef struct {
  real_T OUTPUTS[21];                  /* '<Root>/OUTPUTS' */
} ExtY_WindExample_T;

尝试过Bus Creator和Selector模块未得到预期结果,需可行解决方法。

解决步骤

1. 替换根输入/输出端口为数组端口

  • 删除原有的6个根输入端口,添加单个根输入端口,将其信号维度设置为[6 1](对应原6个输入),命名为INPUTS
  • 同理,删除原有的2个根输出端口,添加单个根输出端口,信号维度设置为[2 1],命名为OUTPUTS
  • 使用Selector模块拆分数组输入:将INPUTS端口连接到Selector模块,设置每个Selector模块的索引对应原输入的位置(比如第1个原输入对应索引1,第2个对应索引2,以此类推),拆分后分别连接到子系统的各个输入
  • 使用Concatenate模块合并子系统输出:将子系统的2个输出连接到Concatenate模块,设置输出维度为[2 1],再连接到根输出端口OUTPUTS

2. 配置代码生成的存储类

  • 打开Model Configuration Parameters,进入Code Generation > Interface页面
  • 在Code interface packaging中选择C-struct
  • 找到External inputs和External outputs的设置:
    • 确保External inputs的存储类设置为Default,结构体名称可自定义(比如ExtU_Regelung_T)
    • 确保External outputs的存储类设置为Default,结构体名称自定义(比如ExtY_Regelung_T)
  • 进入Code Generation > Code Style页面,在Identifier format中可设置数组变量名(直接用根端口的名称INPUTS/OUTPUTS即可)

3. 验证代码生成

  • 重新生成代码,检查头文件中的外部输入输出结构体,确认是否为数组形式
  • 如果数组名称不符合预期,直接修改根端口的名称为INPUTS/OUTPUTS,代码生成时会自动沿用端口名作为数组变量名

注:Bus Creator模块用于生成总线结构体,而非数组形式,因此之前使用Bus Creator无法得到预期结果,改用数组端口+Selector/Concatenate的方式即可实现需求。

内容的提问来源于stack exchange,提问作者WamboRambo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:52:30