Matlab Simulink:带减法的 while 循环

Matlab Simulink: while loop with subtraction

我希望这里有人能够帮助我解决 Simulink/Matlab 代码之一的小问题。它与我之前讨论的问题非常相似,但稍微复杂一点,现在它更像是一个 Simulink 问题,而不是 Matlab 问题。 所以我有一个涡轮机,其速度由门的开度控制,因此控制电压。通过控制门的打开,我正在加速涡轮机,在某个时间点,我需要引入饱和效应(因为我现在正在测试代码,它将通过外部信号完成)。这种效应不会改变控制电压,但会影响系统的其他组件,因此在相同的控制电压下,涡轮机的速度会提高。但与此同时,我需要将速度保持在与饱和效应之前相同的值(假设为 320 rpm)。为此,我需要降低控制电压,并且应该一直这样做,直到达到之前的速度。没有必要立即去做(这种方法稍后会在硬件中介绍),但是在这些综合测试中检查算法将是一件很好的事情。

在模型方面,我打算再次使用速度要求“if speed > 320”的 while 循环,现在只是为了简化事情。为了降低控制电压,我计划首先从原来的 50(开度百分比)- 0.25 (u2) 中减去,然后将该值增加 0.25,直到我将速度降低到 320 以下。我不知道确切的开度是什么时候这个要求将得到满足,因此我需要某种算法来“跟踪”这个电压。 所以它应该是这样的:

u2  = 0;
While speed > 320
u2 = u2+0.25
End

u2 最初为零,因为我们有预定义的初始控制电压。显然,当电机速度低于 320 时,我需要保持 u2(和控制电压)的最新值。

总的来说,是一个小代码,应该在Simulink中完成(不想在模型中引入任何其他Fcn函数)。我从未在 Simulink 中使用过 while 和 if 块,但到目前为止我想出了这个系统。是我模型的简化版,但是控制原理是一样的

我们得到的电机速度是350,与320(“饱和”前的速度)相比,如果我们的饱和后速度更高,我们需要降低控制电压。为了触发 while 循环块,我决定使用一个简单的开关。 while 块同时是:

绝对不是最好的实现,但我尝试了很多不同的组合,但没有任何真正的成功。我总是遇到同样的错误:

试图使用步进信号而不是常数“7”来模拟电机的加速度,并且在加速度超过 320 阈值时出现相同的错误。所以看起来这种方法几乎是正确的,但在数学上它未能找到最合适的解决方案。我试图在 while 子系统的内存部分实现传输延迟,但在编译期间一直出现错误。 有没有明显的(而不是)错误?或者也许从一开始,我就应该选择另一种方法……我真的希望有人能够提供帮助。提前谢谢你,祝你有美好的一天。

我认为您没有正确使用 While 块。

这就是我所做的,我使用 "Matlab function" 块而不是 "While" 块,如下所示,

Matlab函数中的函数为

function u2=fcn(speed,u2d)
if speed>320
    u2=u2d+0.25;
else
    u2=u2d;
end

我得到的结果,范围 1

范围

Edit

由于您更喜欢无函数模型,以下可能也是如此。