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

你能解释一下这个嵌入式MATLAB函数错误吗?,matlab,embedded,simulink,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

我在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; 
  ...

我认为您遇到的问题是,您不能在模拟过程中更改会导致信号尺寸更改的参数。在您的示例中,代码

f = fstart:f_end;
当fstart更改时更改大小。我想这就是EMF block所抱怨的。对于这个特殊问题,我没有任何简单的解决方法,但也许有一种等效的方法可以避免这个问题。

我认为这是正确的:不能在嵌入式函数中重新定义变量的大小。如果你在定义局部变量的小节中看到这一点,它会说:

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

您必须重新编写嵌入函数,以便声明的变量不会改变大小。因为我不知道你接下来对变量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

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

我不是用EMF而是用2级M文件S函数解决了这个问题。对于输入,例如fstart,我使用了一个常量和一个增益块,我从GUI中设置了该块。然后我将这个值用于我的2级M文件S函数。它起作用了。