我在使用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;
...
答案 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块所抱怨的。对于这个特定的问题,我没有任何简单的解决方法,但也许有一种等效的方法来做你想要的,以避免这个问题。