【问题标题】:How can I store dynamically a vector in a For iterator Simulink Subsystem?如何在 For 迭代器 Simulink 子系统中动态存储向量?
【发布时间】:2020-05-28 11:42:23
【问题描述】:

我有这个简单的系统:

函数中的代码是:

function a = fcn(iteration,a)
a(1,iteration) = iteration;
end

外部Simulink层如下(a初始化为a = zeros(1,5)):

循环是:

for i = 1:5

并且我想将迭代器存储在一个数组中(即[1 2 3 4 5]),但由于某种原因,Simulink 在每个迭代器步骤中为单个时间步初始化数组,所以我只能看到最后一个值。 我尝试了许多不同的组合,但我无法让它按我想要的方式工作。怎么做?

【问题讨论】:

    标签: matlab for-loop vector simulink


    【解决方案1】:

    每次迭代时,MATLAB 函数都从初始数组(输入端口)开始。为了防止这种情况,只需添加一个延迟循环。 MATLAB 函数的输出应提供延迟以及输出端口。这确保了最后一次迭代的结果也是可用的。 您可以将可重置延迟与外部初始条件一起使用,以从输入值开始,并在每次迭代期间对其进行更新。

    【讨论】:

    • 这在您的 Simulink 中有效吗?我试过了,但出现以下错误:When the input signal of 'test_of_iterations/For Iterator Subsystem/Resettable Delay' is variable-size, only scalar is allowed for initial value.
    • 如果我从频道中删除可变大小选项,我会得到以下信息:When parameter 'InputProcessing' is set to 'Elements as channels (sample based)' and data input signal is 2-D or N-D signals, the dimension of initial condition should be scalar or equal to the dimension of data input if it is unit delay.
    • 对我来说,延迟有效,使用 R2020a,并具有指定的尺寸,但点击延迟似乎对你有用......
    【解决方案2】:

    我发现有一个点击延迟选项。使用此选项,您可以将各种值作为向量(动态)存储在 Simulink 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多