主要内容

设计优化,以满足步骤响应要求(代码)

此示例显示如何以编程方式优化控制器参数以满足使用该控制器参数以满足步骤响应要求SDO.Optimize.函数。

模型结构

Simu金宝applink.®模型watertank_stepinput包括非线性水箱系统装置和单回路反馈系统的PI控制器。

一步块应用一个步骤输入。您还可以使用其他类型的输入(如斜坡)来优化此类输入生成的响应。

该图显示了水箱系统。

水以与阀门开口成比例的速率在顶部进入罐。阀门开口与电压成比例,V,适用于泵。水以与水高的平方根成比例的速率,水叶通过罐底座的开口留下,H.在水流速中的平方根的存在导致非线性植物。

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

变量

H是水箱中水的高度。

是水箱中水的体积。

V电压是否施加到泵上。

参数

一个是罐的横截面积。

b是与流速进入罐中的恒定。

一个是与罐中的流量相关的恒定。

微分方程

d d t V o l 一个 d H d t b V 一个 H

H
输入 V
输出 H

设计要求

水箱里的水的高度,H,必须满足以下阶段响应要求:

  • 上升时间小于2.5秒

  • 沉淀时间小于20秒

  • 超调小于5%

指定步骤响应要求

  1. 打开Simulin金宝appk模型。

    sys =“watertank_stepinput”;open_system(系统);

  2. 记录水位,H

    在优化期间,使用模型参数的当前值模拟模型,并使用记录信号来评估设计要求。

    PlantOutput =.金宝appSimulink.SimulationData.SignalLoggingInfo;PlantOutput。[sys '/Water-Tank System']; / /系统信息PlantOutput。OutputPortIndex = 1;PlantOutput.LoggingInfo.NameMode = 1;PlantOutput.LoggingInfo.LoggingName =“PlantOutput”;
  3. 存储日志记录信息。

    模拟器=sdo.simulationtest.(SYS);simulator.logginginfo.Signals = PlantOutput;

    模拟器是一个sdo.simulationtest.您还使用稍后使用以模拟模型的对象。

  4. 指定阶跃响应要求。

    stepresp = sdo.requirements.stepresponseEnvelope;stepresp.riseTime = 2.5;stepresp.settlingtime = 20;steprep.percentovershoot = 5;stepresp.finalvalue = 2;stepresp.initialValue = 1;

    StepResp是一个sdo.requirements.StepResponseEnvelope对象。分配给StepResp。FinalValueStepResp。InitialValue对应于水箱高度的一步变化12

指定设计变量

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

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

    p =sdo.getParameterFromModel(sys,{'kp','ki'});

    p数组是否为2参数。连续对象。

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

    p(1).minimum = 0;p(2).minimum = 0;

优化模型响应

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

    evalDesign = @(p) sldo_model1_design(p,simulator,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修改设计变量以满足设计要求。有关更多信息,请参阅优化算法如何制定最小化问题

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

    max Step-size一阶Iter f -count 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.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) = Name: 'Kp' Value: 2.0545 Minimum: 0 Maximum: Inf Free: 1 Scale: 1 Info: [1x1 struct] pOpt(2,1) = Name: 'Ki' Value: 0.3801 Minimum: 0 Maximum: Inf Free: 1 Scale: 1 Info: [1x1 struct]
  7. 用优化后的值对模型进行仿真。

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

      Sdo.setvalueinmodel(Sys,Popt);
    2. 模拟模型。

      SIM(SYS);

另请参阅

||||||

相关话题