Matlab Simulink:while while with subtraction

时间:2017-11-01 02:25:29

标签: matlab while-loop simulink tracking subtraction

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

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

u2  = 0;
While speed > 320
u2 = u2+0.25
End
由于我们有预定义的初始控制电压,所以

u2最初为零。显然,当我们将电机的速度降至320以下时,我需要保持u2(和控制电压)的最新值。

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

enter image description here

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

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

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

1 个答案:

答案 0 :(得分:0)

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

这就是我所做的,我使用了" Matlab函数"阻止而不是"而#34;阻止如下,

enter image description here

Matlab函数中的函数是

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

我得到的结果,范围1

Scope1

范围

Scope

  

修改

由于您更喜欢免功能模型,以下内容可能会相同。

enter image description here