【问题标题】:Can you explain this Embedded MATLAB Function error?你能解释一下这个嵌入式 MATLAB 函数错误吗?
【发布时间】:2009-08-11 08:08:59
【问题描述】:

我在将值从 GUI 发送到 Simulink 模型中的嵌入式 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; 
  ...

【问题讨论】:

    标签: matlab embedded simulink


    【解决方案1】:

    我相信MikeT 是正确的:您不能在嵌入式函数中重新定义变量的大小。如果您查看 Defining Local Variables 小节下的 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、负值等)。

    【讨论】:

    • 我不是用 EMF 而是用 2 级 M 文件 S-Function 解决了这个问题。对于输入,fe fstart 我使用了我从 GUI 设置的常量和增益块。然后我将此值用于我的 2 级 M 文件 S-Function。它有效。
    【解决方案2】:

    我相信您遇到的问题是您无法在仿真期间更改参数,这会导致信号的维度发生变化。在您的示例中,代码

    f = fstart:f_end;
    

    每当 fstart 改变时改变大小。我认为这就是 EMF 块所抱怨的。对于这个特定问题,我没有任何简单的解决方法,但也许有一种等效的方法可以避免这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 2011-02-16
      相关资源
      最近更新 更多