你能解释一下这个嵌入式MATLAB函数错误吗?

时间:2009-08-11 08:08:59

标签: matlab embedded simulink

我在使用Simulink模型中从GUI向嵌入式MATLAB函数(EMF)发送值时遇到问题。我从GUI中的滑块获取此值并将其发送到模型中的EMF块。我可以确认该值正在从我的GUI正确传输到我的Simulink块,因为我可以在模型中用显示块显示值,并在我更改GUI中的滑块位置时查看值的变化。但是,当我运行我的模型时,我不断收到此错误:

Could not determine the size of this expression.

Function 'Kastl' (#18.282.283), line 14, column 1:
"f"

这是我的EMF区块代码的一部分:

function y = input_par(u,fstart)
  ...
  f_end = 1000;
  f = fstart:f_end; 
  ...

2 个答案:

答案 0 :(得分:2)

我相信MikeT是正确的:您无法在嵌入式函数中重新定义变量的大小。如果您在定义局部变量小节下查看此Embedded MATLAB Function documentation page,则会说:

  

一旦定义了变量,就不能   将其重新定义为任何其他类型或大小   在功能体中。

您必须重新编写嵌入式函数,以便声明的变量不会改变大小。由于我不知道您随后使用变量f做了什么,因此我无法提供更多特定的帮助。

通常,如果您绝对需要来使用更改大小的数据,一种解决方案是使用“垃圾”值填充数据以保持不变的大小。例如:

MAX_ELEMS = 1000;  % Define the maximum number of elements in the vector
f = [fstart:MAX_ELEMS nan(1,fstart-1)];  % Create vector and pad with NaNs

在上面的示例中,变量f将始终具有1000个元素(假设fstart的值是小于或等于1000的整数值)。值NaN用于将向量填充到适当的常量大小。任何后续代码都必须能够识别应忽略NaN的值。根据随后在嵌入式函数中进行的计算,可能需要使用不同的填充值代替NaN(例如0,负值等)。

答案 1 :(得分:1)

我相信您遇到的问题是您无法在模拟过程中更改参数,这会导致信号尺寸发生变化。在您的示例中,代码

f = fstart:f_end;
每当fstart发生变化时,

都会改变大小。我认为这就是EMF块所抱怨的。对于这个特定的问题,我没有任何简单的解决方法,但也许有一种等效的方法来做你想要的,以避免这个问题。