Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

Designing Model Predictive Controller at Equilibrium Operating Point

This example shows how to design a model predictive controller with non-zero nominal values.

The plant model is obtained by linearization of a nonlinear plant in Simulink® at a non-zero steady state operating point.

Linearize Nonlinear Plant Model

To run this example, Simulink® and Simulink Control Design® are required.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink(R) is required to run this example.')
    return
end
if ~mpcchecktoolboxinstalled('slcontrol')
    disp('Simulink Control Design(R) is required to run this example.')
    return
end

The nonlinear plant is implemented in Simulink® model "mpc_nloffsets" and linearized at the default operating condition using the "linearize" command from Simulink Control Design®.

Create operating point specification.

plant_mdl = 'mpc_nloffsets';
op = operspec(plant_mdl);
% Compute initial condition.
[op_point, op_report] = findop(plant_mdl,op);
% Obtain nominal values of x, y and u.
x0 = [op_report.States(1).x;op_report.States(2).x];
y0 = op_report.Outputs.y;
u0 = op_report.Inputs.u;
% Obtain linear plant at the initial condition.
plant = linearize(plant_mdl, op_point);
 Operating point search report:
---------------------------------

 Operating point search report for the Model mpc_nloffsets.
 (Time-Varying Components Evaluated at time t=0)

Operating point specifications were successfully met.
States: 
----------
(1.) mpc_nloffsets/Integrator
      x:         0.575      dx:     -1.82e-14 (0)
(2.) mpc_nloffsets/Integrator2
      x:          2.15      dx:     -8.38e-12 (0)

Inputs: 
----------
(1.) mpc_nloffsets/In1
      u:         -1.25    [-Inf Inf]

Outputs: 
----------
(1.) mpc_nloffsets/Out1
      y:        -0.529    [-Inf Inf]

Design MPC Controller

Create the controller object with sampling period, prediction and control horizons:

Ts = 0.1;                 % Sampling time
p = 20;
m = 3;
mpcobj = mpc(plant,Ts,p,m);
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
-->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
-->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

Set nominal values in the controller.

mpcobj.Model.Nominal = struct('X', x0, 'U', u0, 'Y', y0);

Set output measurement noise model (white noise, zero mean, variance=0.01)

mpcobj.Model.Noise = 0.1;

Set MV constraint.

mpcobj.MV.Max = 0.2;

Simulate Using Simulink®

Reference signal for output vector

r0 = 1.5*y0;
% Simulate
mdl = 'mpc_offsets';
open_system(mdl)    % Open Simulink(R) Model
sim(mdl);           % Start Simulation
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.

Simulate Using SIM Command

Simulate

Tf = round(10/Ts);
r = r0*ones(Tf,1);
[y1,t1,u1,x1,xmpc1] = sim(mpcobj,Tf,r);

Plot and compare results.

subplot(121)
plot(y.time,y.signals.values,t1,y1,t1,r)
legend('Nonlinear','Linearized','Reference')
title('output')
grid
subplot(122)
plot(u.time,u.signals.values,t1,u1)
legend('Nonlinear','Linearized')
title('input')
grid

bdclose(plant_mdl);
bdclose(mdl);
Was this topic helpful?