我希望这里的人能够帮助我解决Simulink/Matlab代码中的一个小问题。这与我之前讨论的问题非常相似,但有点复杂,现在它更像是Simulink问题,而不是Matlab问题。
所以我有一个涡轮机,它的速度是由门的打开来控制的,因此控制电压。通过控制闸门开度,我正在加速涡轮机,在某个时间点,我需要引入饱和效应(因为我现在正在测试代码,它将由外部信号完成)。这种影响不会改变控制电压,但会影响系统的其他组件,因此在相同的控制电压下,涡轮机的速度会上升。但同时,我需要将速度保持在饱和效应之前的相同值(假设是320 rpm)。为此,我需要降低控制电压,并应继续这样做,直到我达到的速度,因为它是以前。无需立即执行(此方法稍后将在硬件中介绍),但在这些合成测试中检查算法将是一件好事。
所以应该是这样的:
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子系统的内存部分实现传输延迟,但在编译过程中一直出现错误。
有没有任何明显的错误?或者从一开始,我就应该选择另一种方法——我真的希望有人能够帮助我。提前谢谢你,祝你度过愉快的一天。