首页 文章

Matlab Simulink:while循环减法

提问于
浏览
0

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

就模型而言,我计划再次使用速度要求“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中的块,但到目前为止我想出了这个系统 . 它是我模型的简化版本,但控制原理是相同的 .

enter image description here

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

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

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

1 回答

  • 0

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

    这就是我所做的,我使用了“Matlab函数”块而不是“While”块,如下所示,

    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

相关问题