2

如何将Simulink.Parameter结构(在我的情况下是结构的结构)传递给 a C S-function

编辑:

有关Simulink.Parameter的信息

您可以通过以下方式创建 Simulink.Parameter 对象:

modelParameters = Simulink.Parameter;
modelParameters.Value = myStruct;
modelParameters.CoderInfo.StorageClass = 'ExportedGlobal';

myStruct值是结构的常规 matlab 结构。这就是我的情况: 在此处输入图像描述

这是一种用于将参数传递给 Simulink 的特殊对象类型,我正在寻找一种机制来从C S-function.

MnWE这里下载一个。

编辑2: 我以这种方式读取参数:

modelParameters_T *modelParameters = (modelParameters_T*)mxGetPr(ssGetSFcnParam(S, PARAM_STRUCT));

但我明白为什么这种方法不起作用——Matlab 中的结构对象与 C 结构不同,即在内存中不连续并且也包含其他属性。我想我会将 Matlab 结构转换为一个数组,然后将 C 中的数组转换为我的结构定义。

4

1 回答 1

0

mxGetPr 不是访问对象类型参数的正确方法。它不是结构类型。即使它是结构类型,您也需要使用 mxArray API 来访问结构字段。您需要使用类似以下代码的内容来访问这些字段。

mxArray* param = ssGetSFcnParam(S, PARAM_STRUCT);
mxArray* prop = mxGetProperty(param, 0, "Value"); // Get Value property from param object
// If prop is double precision use the following line to get its value
double* prop = *(mxGetPr(prop));

查看文档中的 mxArray API 以访问不同类型的 mxArray。

于 2014-04-11T13:38:23.570 回答