满足阶跃响应需求的设计优化(代码)

此示例显示如何以编程方式优化控制器参数,以满足使用sdo.optimize功能。

模型结构

的仿真软万博1manbetx件®模型watertank_stepinput包括非线性水容系统的植物,并在单回路反馈系统中的PI控制器。

块施加阶跃输入。也可以使用其他类型的输入,例如斜坡,以优化由这些输入生成的响应。

这个图显示了水箱系统。

水以与阀门开度成比例的速度从顶部进入容器。阀门的开度与电压成正比,V,应用于泵。水从水箱底部的开口流出,流出的速度与水高度的平方根成正比,H。水流速率中平方根的存在导致了一个非线性的植物。

下表描述了水箱系统的变量、参数、微分方程、状态、输入和输出。

变量

H是的水箱中的水的高度。

是的水箱中的水的体积。

V是施加到泵上的电压。

参数

一个为罐的横截面积。

b是一个常数,与流入槽内的流量有关。

一个是一个与流出槽的流量有关的常数。

微分方程

d d Ť V Ø = 一个 d H d Ť = b V - 一个 H

状态 H
输入 V
输出 H

设计要求

水箱的高度,H,必须符合以下步骤的回应要求:

  • 上升时间小于2.5秒

  • 建立时间小于20秒

  • 过冲小于5%

指定阶跃响应需求

  1. 打开Simulin万博1manbetxk模型。

    sys ='watertank_stepinput';open_system(SYS);

  2. 记录水位,H

    在优化过程中,利用模型参数的当前值对模型进行仿真,利用所记录的信号对设计要求进行评估。

    PlantOutput =万博1manbetxSimulink.SimulationData.SignalLoggingInfo;PlantOutput.BlockPath = [SYS '/水容系统'];PlantOutput.OutputPortIndex = 1;PlantOutput.LoggingInfo.NameMode = 1;PlantOutput.LoggingInfo.LoggingName = 'PlantOutput';
  3. 存储日志信息。

    模拟器=sdo.SimulationTest(系统);simulator.LoggingInfo。信号= PlantOutput;

    模拟器sdo.SimulationTest对象,您稍后还将使用该对象来模拟模型。

  4. 指定步骤响应要求。

    StepResp = sdo.requirements.StepResponseEnvelope;StepResp。上升时间= 2.5;StepResp。SettlingTime = 20;StepResp。PercentOvershoot = 5;StepResp.FinalValue=2; StepResp.InitialValue = 1;

    StepRespsdo.requirements.StepResponseEnvelope宾语。值分配给StepResp.FinalValueStepResp.InitialValue对应于从在水箱高度的阶跃变化12

指定设计变量

当你优化模型响应,软件修改参数(设计变量)值,以满足设计要求。

  1. 选择要优化的模型参数。在这里,对PID控制器的参数进行优化。

    p =sdo.getParameterFromModel(sys, {‘Kp’,‘吻’});

    p为2的数组param.Continuous对象。

  2. 若要将参数限制为正值,请将每个参数的最小值设置为0

    (1页)。最小值= 0;(2页)。最小值= 0;

优化模型的响应

  1. 创建一个设计函数来评估一组参数值的系统性能。

    evalDesign = @(p)的sldo_model1_design(P,模拟器,StepResp);

    evalDesign调用成本函数的是匿名函数吗sldo_model1_design。成本函数模拟模型和评估设计要求。

    小费

    类型编辑sldo_model1_design来查看这个函数。

  2. 评估当前响应。(可选的)

    1. 通过计算设计变量的当前值的模型响应。

      initDesign = evalDesign (p);

      在模拟中,阶跃响应块抛出断言警告在MATLAB®提示符,它指示块中指定的需求没有得到满足。

    2. 研究非线性不等式约束。

      initDesign.Cleq
      ans = 0.1739 0.0169 -0.0002 -0.0101 -0.0229 0.0073 -0.0031 0.0423

      一些CLEQ值是正的,超出规定的公差,其指示使用当前的参数值违反设计要求的响应。

  3. 指定优化选项。

    选择=sdo.OptimizeOptions;opt.MethodOptions.Algorithm = 'SQP';

    软件配置选择使用默认的优化方法,fmincon和序列二次规划算法fmincon

  4. 优化响应。

    [pOpt, optInfo] =sdo.optimize(evalDesign,P,优化);

    在每一步优化迭代,软件模拟模型和默认的优化求解fmincon修改设计变量以满足设计要求。有关更多信息,请参见优化算法如何构造最小化问题

    优化完成后,命令窗口显示以下结果:

    最大步长的一阶Iter项目F-计数F(X)约束最优0 5 0 0.1739 1 10 0 0.03411 1 0.81 2 15 0 0 0.235 0.0429 3 15 0 0 2.26e-18 0本地最小发现满足约束。优化完成,因为目标函数是在可行的方向非递减,给函数公差的设定值内,并且约束约束公差的设定值内满足到。

    的消息找到满足约束条件的局部最小值表明优化求解器找到了在规定公差内满足设计要求的解决方案。有关优化期间显示的输出的更多信息,请参见迭代显示(优化工具箱)。

  5. 中包含的优化终止信息optInfo输出参数。这些信息可以帮助您验证响应符合阶跃响应的要求。

    例如,检查以下字段:

    • CLEQ,给出了优化后的非线性不等式约束。

      optInfo.Cleq
      ANS = -0.0001 -0.0028 -0.0050 -0.0101 -0.0135 -0.0050 -0.0050 -0.0732

      所有值满足CLEQ0在优化公差范围内,满足阶跃响应要求。

    • exitflag,其中确定为什么优化终止。

      这个值是1,这表明求解器发现一种解决方案,是小于的函数值和约束违反规定的公差。

  6. 查看优化的参数值。

    POPT
    POPT(1,1)=名称:“KP的值:2.0545最小值:0最大值:Inf文件免:1比例:1的信息:[1x1的结构] POPT(2,1)=名称: '起' 值:0.3801最少:0最大:Inf文件免:1比例:1的信息:[1x1的结构]
  7. 模拟与优化值模型。

    1. 更新模型中的优化参数值。

      sdo.setValueInModel (sys pOpt);
    2. 模拟模型。

      sim(系统);

也可以看看

||||||

相关的话题