function mpcprops
%MPCPROPS Detailed help on available MPC controller properties.
%
%   MPCPROPS gives details on the generic properties of MPC controllers.
%
%   See also MPC.

%   Author: A. Bemporad, N. L. Ricker, R. Chen
%   Copyright 1986-2016 The MathWorks, Inc.

DisplayStr = {...
        ' '...
        ' MPC controller properties (with Ny output variables and Nu manipulated variables):'...
        ' '...
        ' <strong>Model</strong> - a structure of plant, disturbance and noise models and their nominal values.'...
        '     <strong>Model.Plant</strong> - plant model (LTI or linear model from System Identification Toolbox).'...
        '         Default: none, must be specified.'...
        '     <strong>Model.Disturbance</strong> - model describing unmeasured input disturbances (LTI or linear model from System Identification Toolbox).'...
        '         Default: integrator (models step disturbance).'...
        '         See also: "<strong>getindist</strong>" and "<strong>setindist</strong>" commands'...
        '     <strong>Model.Noise</strong> - model describing added output measurement noise (LTI or linear model from System Identification Toolbox).'...
        '         Default: unity gain (models white noise).'...
        '     <strong>Model.Nominal</strong> - structure containing nominal state, input, and output variable values.'...
        '         <strong>Model.Nominal.X</strong> - state of Model.Plant at the operating point'...
        '         <strong>Model.Nominal.U</strong> - input of Model.Plant at the operating point'...
        '         <strong>Model.Nominal.Y</strong> - output of Model.Plant at the operating point'...
        '         <strong>Model.Nominal.DX</strong> - state derivative/update at the operating point'...
        '         Default: all nominal values set to zero.'...
        ' '...
        '    Define input signal types <strong>Model.Plant.InputGroup</strong>:'...
        '       ManipulatedVariables (or MV or Manipulated or Input) - indices of manipulated variables'...
        '               UnmeasuredDisturbances (or UD or Unmeasured) - indices of unmeasured disturbances'...
        '                   MeasuredDisturbances (or MD or Measured) - indices of measured disturbances'...
        '    By default, all the plant inputs are manipulated variables.'...   
        '    See also:  the "<strong>setmpcsignals</strong>" command.'...
        ' '...
        '    Define output signal types in <strong>Model.Plant.OutputGroup</strong>:'...
        '                        MeasuredOutputs (or MO or Measured) - indices of measured outputs'...
        '                      UnmeasuredOutputs (or UO or Unmeasured) - indices of unmeasured outputs'...
        '    By default, all the plant outputs are measured outputs.'...   
        '    See also:  the "<strong>setmpcsignals</strong>" command.'...
        ' '...
        ' <strong>Ts</strong> - sample time of the MPC controller (in the same time unit as Model.Plant).'...
        '    Default:  if Model.Plant.Ts > 0, MPC.Ts = Model.Plant.Ts; otherwise, MPC.Ts must be specified.'...
        ' '...
        ' <strong>PredictionHorizon</strong> - intervals in the prediction horizon (scalar)'...
        '    Default: 10 + max intervals of delay in Model.Plant'...
        ' '...
        ' <strong>ControlHorizon</strong> - intervals in the control horizon (scalar or a vector of blocked moves)'...
        '    Default: 2'...
        ' '...
        ' <strong>Weights</strong> - a structure defining dimensionless MPC weights with the following fields:'...
        '     <strong>Weights.ManipulatedVariables</strong> (or MV or Manipulated or Input) - (min 1, max p) x Nu matrix of weights on manipulated variables'...
        '         Default: zeros(1,Nu)'...
        '     <strong>Weights.ManipulatedVariablesRate</strong> (or MVRate or ManipulatedRate or InputRate) - (min 1, max p) x Nu matrix of weights on rates of manipulated variables'...
        '         Default: 0.1*ones(1,Nu).  '...
        '     <strong>Weights.OutputVariables</strong> (or OV or Output) - (min 1, max p) x Ny matrix of weights on plant outputs'...
        '         Default: if Ny<=Nu, ones(1,Ny); otherwise, only Nu outputs are weighted by default with preference on measured outputs'... 
        '     <strong>Weights.ECR</strong> - Scalar weight on the slack variable used for constraint softening'...
        '         Default: 1e5*max(Weights)'... 
        ' '...        
        '     <strong>Alternative weighting</strong>: using the syntax Weights.MV={R}, where R is a Nu x Nu'...        
        '     symmetric and positive semi-definite matrix, one can specify a matrix weight R,'...        
        '     that is constant over the prediction horizon (similar syntax for Weights.MVRate and Weights.OV)'...        
        ' '...        
        ' <strong>ManipulatedVariables</strong> (or MV or Manipulated or Input) - array of structures with fields:'...
        '     <strong>MV(i).Min</strong>         - 1 to P dimensional vector of lower bounds on MV #i (default: -Inf)'...
        '     <strong>     .Max</strong>         - 1 to P dimensional vector of upper bounds on MV #i (default:  Inf)'...
        '     <strong>     .MinECR</strong>      - 1 to P dimensional vector of weights for softening the '...
        '                         lower bounds on MV #i (default: 0, hard constraint)'...
        '     <strong>     .MaxECR</strong>      - 1 to P dimensional vector of weights for softening the '...
        '                         upper bounds on MV #i (default: 0, hard constraint)'...
        '     <strong>     .RateMin</strong>     - 1 to P dimensional vector of lower bounds on the rate of MV #i (default: -Inf)'...
        '     <strong>     .RateMax</strong>     - 1 to P dimensional vector of upper bounds on the rate of MV #i (default: Inf)'...
        '     <strong>     .MinECR</strong>      - 1 to P dimensional vector of weights for softening the '...
        '                         lower bounds on the MV #i rate (default: 0, hard constraint)'...
        '     <strong>     .MaxECR</strong>      - 1 to P dimensional vector of weights for softening the '...
        '                         upper bounds on the MV #i rate (default: 0, hard constraint)'...
        '     <strong>     .Target</strong>      - 1 to P dimensional vector of target values for MV #i (default: Model.Nominal.U)'...
        '     <strong>     .Name</strong>        - name of MV #i (default: from Model.Plant.InputName'...  
        '     <strong>     .Units</strong>       - string specifying the engineering units for MV #i'...  
        '     <strong>     .ScaleFactor</strong> - a scalar in engineering units (default: 1). MV #i will be divided by its'...
        '                         scale factor to form the dimensionless signal used in MPC computations.', ...
        ' '...
        ' <strong>OutputVariables</strong> (or OV or Controlled or Output) - array of structures with fields:'...
        '     <strong>OV(i).Min</strong>        - 1 to P dimensional vector of lower bounds on OV #i (default: -Inf)'...
        '     <strong>     .Max</strong>        - 1 to P dimensional vector of upper bounds on OV #i (default:  Inf)'...
        '     <strong>     .MinECR</strong>     - 1 to P dimensional vector of weights for softening the '...
        '                        lower bounds on OV #i (default: 1, soft constraint)'...
        '     <strong>     .MaxECR</strong>     - 1 to P dimensional vector of weights for softening the '...
        '                        upper bounds on OV #i (default: 1, soft constraint)'...
        '     <strong>     .Name</strong>        - name of OV #i (default: Model.Plant.OutputName{i})'...  
        '     <strong>     .Units</strong>       - string specifying the engineering units for OV #i'...  
        '     <strong>     .ScaleFactor</strong> - a scalar in engineering units (default: 1). OV #i will be divided by its'...
        '                         scale factor to form the dimensionless signal used in MPC computations.', ...
        ' '...
        ' <strong>DisturbanceVariables</strong> (or DV or Disturbance) - array of structures with fields:'...
        '     <strong>DV(i).Name</strong> - name of DV #i (default: from Model.Plant.InputName'...  
        '     <strong>     .Units</strong> - string specifying the engineering units for DV #i'...  
        '     <strong>     .ScaleFactor</strong> - a scalar in engineering units (default: 1). MV #i will be divided by its'...
        '                         scale factor to form the dimensionless signal used in MPC computations.', ...
        '     DV comprises all the measured disturbance inputs followed by all the unmeasured disturbance inputs.' ...
        ' '...
        ' <strong>Optimizer</strong> - QP optimizer parameter structure with fields:'...
        '     <strong>Optimizer.Algorithm</strong> - solver algorithm (default: ''active-set'')'...
        '     <strong>Optimizer.ActiveSetOptions</strong> - active-set solver options'...
        '     <strong>Optimizer.InteriorPointOptions</strong> - interior-point options'...
        '     <strong>Optimizer.MinOutputECR</strong> - minimum value of output MinECR and MaxECR (default: 0)'...
        '     <strong>Optimizer.UseSuboptimalSolution</strong> - true if controller applies the sub-optimal solution when maximum iteration number is exceeded (default: false)'...        
        '     <strong>Optimizer.CustomSolver</strong> - true if custom QP solver is to be used (default: false)'...        
        '     <strong>Optimizer.CustomSolverCodeGen</strong> - true if custom QP solver is to be used for code generation (default: false)'...        
        '  '...
        ' <strong>Notes</strong> - user''s notes. It can be a string or a cell array of strings.'...
        ' '...
        ' <strong>UserData</strong> - additional information or data. It can be any MATLAB data type.'...
        ' '...
        ' <strong>History</strong> - creation date and time info.'...
        ' '...
        ' See the "<strong>mpc</strong>" command for construction syntax.'...
    };

disp(char(DisplayStr))
