将Simulink.Parameter传递给C S函数

时间:2014-04-04 10:03:03

标签: simulink s-function

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

修改

有关Simulink.Parameter

的信息

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

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

myStruct值是结构的常规matlab结构。这就是我的情况: enter image description here

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

here下载 MnWE

编辑2: 我这样读了参数:

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

但是我可以看出为什么这种方法不起作用 - 来自Matlab的结构对象与C结构不相似,即在内存中不连续并且也包含其他属性。我想我会将Matlab结构转换为数组,然后将C中的数组转换为我的结构定义。

1 个答案:

答案 0 :(得分:0)

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

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));

在doc中查看mxArray API以访问不同类型的mxArrays。