如何将Simulink.Parameter
结构(在我的情况下,是结构结构)传递给C S-function
?
修改
的信息您可以通过以下方式创建Simulink.Parameter对象:
modelParameters = Simulink.Parameter;
modelParameters.Value = myStruct;
modelParameters.CoderInfo.StorageClass = 'ExportedGlobal';
myStruct
值是结构的常规matlab结构。这就是我的情况:
这是一个特殊的对象类型,用于将参数传递给Simulink,我正在寻找一种机制来从C S-function
访问它。
从here下载 MnWE
。
编辑2: 我这样读了参数:
modelParameters_T *modelParameters = (modelParameters_T*)mxGetPr(ssGetSFcnParam(S, PARAM_STRUCT));
但是我可以看出为什么这种方法不起作用 - 来自Matlab的结构对象与C结构不相似,即在内存中不连续并且也包含其他属性。我想我会将Matlab结构转换为数组,然后将C中的数组转换为我的结构定义。
答案 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。