【发布时间】:2014-04-04 10:03:02
【问题描述】:
如何将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 中的数组转换为我的结构定义。
【问题讨论】:
-
您可以通过模块掩码将参数传递到 S-Function,但我不确定这如何与分层 Simulink.Parameters 一起使用(我猜您的意思是总线对象类型)。跨度>
-
@pmb 有 Simulink.Parameter 数据类型。我通过 S-Function 块掩码传递了那个,但是我如何在 C 代码中读取它呢?我不认为这是一个连续的内存块,因为获取指向它的指针并读取第一个双精度并没有给出正确的值。
-
但是您的 Simulink.Parameter 的类型是 Bus Object 类型...我不确定为什么这不起作用。我认为总线对象是简单的 C 结构。
-
您可以将总线作为输入传递,但不能作为参数传递。将总线对象设置为输入时,您必须使用 ssSetInputPortRequiredContiguous(S, INPUT_PORT_BUS, true);然后您可以将其转换为 C 结构。默认情况下,这些总线在内存中是不连续的。无论如何,我找不到将参数设置为内存连续的函数。
-
这与您的问题有点不同,但是您能否发布 Simulink.Parameter 结构的属性的屏幕截图?如果没有 Bus Objects,我不太明白你是如何做到这一点的(我也有兴趣使用它!)。
标签: simulink s-function