在生成的代码中使用Simulink参数

时间:2013-12-03 15:58:24

标签: matlab parameters simulink

我使用m文件初始化MATLAB工作区中的参数。

是文件的例子:

Pconstant=Simulink.Parameter;
Pconstant.Value=3;
Pconstant.CoderInfo.StorageClass = 'exportedGlobal';

Pgain=Simulink.Parameter;
Pgain.Value=10;
Pgain.CoderInfo.StorageClass = 'exportedGlobal';

这些参数在“增益”和“常量”块中用作值。我为这个模型生成了c源代码,并在model_data.c文件中收到了以下结构:

/* Block parameters (auto storage) */
P_ParameterTest_T ParameterTest_P = {
  10.0,                                /* Expression: Pgain
                                        * Referenced by: '<Root>/Gain'
                                        */
  3.0,                                 /* Expression: Pconstant
                                        * Referenced by: '<Root>/Constant'
                                        */
};

Model.h文件包含以下代码:

/* Parameters (auto storage) */
struct P_ParameterTest_T_ {
  real_T Gain_Gain;                    /* Expression: Pgain
                                        * Referenced by: '<Root>/Gain'
                                        */
  real_T Constant_Value;               /* Expression: Pconstant
                                        * Referenced by: '<Root>/Constant'
                                        */
};

模型源代码编译到model.a lib文件中,用于其他程序。 我可以在外部c代码中更改常量值:

parameters = (BLOCK_PARAMETERS*)rtmGetDefaultParam(model);
parameters->Constant_Value = 1;

但这个解决方案对我不利。因为我不知道在哪里使用这些参数,我不知道结构的字段名称。

我可以编写在使用Pconstant参数的结构的所有字段中设置值的代码吗?像这样:

Pconstant = 1; //instead of parameters->Constant_Value = 1;

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您说您已将存储类定义为ExportedGlobal,但在生成的代码中,它显示为“自动存储”,因此某些内容并不完全正确。

要实现您的目标,我认为您需要在优化窗格中打开“内联参数”(请参阅​​documentation),然后单击“配置...”按钮以定义您的参数不想内联,即PconstantPgain(请参阅文档中有关inlining parameters的内容)。代码中的结构构造通常在“内联参数”关闭时使用。

我猜你有Simulink Coder,所以你也应该看一下Simulink Coder文档,了解它如何为不同条件下的参数生成代码。从记忆中,它通常非常彻底。