getCodeGenerationData
Create data structures for mpcmoveCodeGeneration
Syntax
Description
Use this function to create data structures for the mpcmoveCodeGeneration
function, which computes optimal control moves for
implicit and explicit linear MPC controllers.
For information on generating data structures for nlmpcmoveCodeGeneration
, see getCodeGenerationData
.
[
creates data structures for use with configData
,stateData
,onlineData
]
= getCodeGenerationData(mpcobj
)mpcmoveCodeGeneration
.
[___] = getCodeGenerationData(___,
specifies additional options using one or more Name,Value
)Name,Value
pair
arguments.
Examples
Create MPC Code Generation Data Structures
Create a plant model, and define the MPC signal types.
plant = rss(3,2,2); plant.D = 0; plant = setmpcsignals(plant,'mv',1,'ud',2,'mo',1,'uo',2);
Create an MPC controller.
mpcObj = mpc(plant,0.1);
-->"PredictionHorizon" is empty. Assuming default 10. -->"ControlHorizon" is empty. Assuming default 2. -->"Weights.ManipulatedVariables" is empty. Assuming default 0.00000. -->"Weights.ManipulatedVariablesRate" is empty. Assuming default 0.10000. -->"Weights.OutputVariables" is empty. Assuming default 1.00000. for output(s) y1 and zero weight for output(s) y2
Configure your controller parameters. For example, define bounds for the manipulated variable.
mpcObj.ManipulatedVariables.Min = -1; mpcObj.ManipulatedVariables.Max = 1;
Create code generation data structures.
[configData,stateData,onlineData] = getCodeGenerationData(mpcObj);
-->Converting model to discrete time. -->The "Model.Disturbance" property is empty: Assuming unmeasured input disturbance #2 is integrated white noise. Assuming no disturbance added to measured output #1. -->"Model.Noise" is empty. Assuming white noise on each measured output. -->Converting model to discrete time. -->The "Model.Disturbance" property is empty: Assuming unmeasured input disturbance #2 is integrated white noise. Assuming no disturbance added to measured output #1. -->"Model.Noise" is empty. Assuming white noise on each measured output.
Specify Options for Creating MPC Code Generation Structures
Create a plant model, and define the MPC signal types.
plant = rss(3,2,2); plant.D = 0;
Create an MPC controller.
mpcobj = mpc(plant,0.1);
-->"PredictionHorizon" is empty. Assuming default 10. -->"ControlHorizon" is empty. Assuming default 2. -->"Weights.ManipulatedVariables" is empty. Assuming default 0.00000. -->"Weights.ManipulatedVariablesRate" is empty. Assuming default 0.10000. -->"Weights.OutputVariables" is empty. Assuming default 1.00000.
Create code generation data structures. Configure options to:
Use single-precision floating-point values in the generated code.
Improve computational efficiency by not computing optimal sequence data.
Run your MPC controller in adaptive mode.
[configData,stateData,onlineData] = getCodeGenerationData(mpcobj,... 'DataType','single',OnlyComputeCost=true,IsAdaptive=true);
-->Converting model to discrete time. -->Assuming output disturbance added to measured output #1 is integrated white noise. -->Assuming output disturbance added to measured output #2 is integrated white noise. -->"Model.Noise" is empty. Assuming white noise on each measured output. -->Converting model to discrete time. -->Assuming output disturbance added to measured output #1 is integrated white noise. -->Assuming output disturbance added to measured output #2 is integrated white noise. -->"Model.Noise" is empty. Assuming white noise on each measured output.
Input Arguments
mpcobj
— Model predictive controller
mpc
object | explicitMPC
object
Model predictive controller, specified as one of the following:
mpc
object — MPC controllerexplicitMPC
object — Explicit MPC controller created usinggenerateExplicitMPC
.
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: 'DataType','single'
specifies that the generated code
uses single-precision floating point values.
DataType
— Data type used in generated code
'double'
(default) | 'single'
Data type used in generated code when using
mpcmoveCodeGeneration
, specified as specified
as the comma-separated pair consisting of 'DataType'
and one of the following:
'double'
— Use double-precision floating point values.'single'
— Use single-precision floating point values.
OnlyComputeCost
— Toggle for computing only optimal cost
false
(default) | true
Toggle for computing only optimal cost during simulation when using
mpcmoveCodeGeneration
, specified as specified
as the comma-separated pair consisting of
'OnlyComputeCost'
and either
true
or false
. To reduce
computational load by not calculating optimal sequence data, set
OnlyComputeCost
to
true
.
IsAdaptive
— Adaptive MPC indicator
false
(default) | true
Adaptive MPC indicator when using
mpcmoveCodeGeneration
, specified as specified
as the comma-separated pair consisting of
'IsAdaptive'
and either true
or false
. Set IsAdaptive
to
true
if your controller is running in adaptive
mode.
For more information on adaptive MPC, see Adaptive MPC.
Note
IsAdaptive
and IsLTV
cannot
be true
at the same time.
IsLTV
— Time-varying MPC indicator
false
(default) | true
Time-varying MPC indicator when using
mpcmoveCodeGeneration
, specified as the
comma-separated pair consisting of 'IsLTV'
and either
true
or false
. Set
IsLTV
to true
if your
controller is running in time-varying mode.
For more information on time-varying MPC, see Time-Varying MPC.
Note
IsAdaptive
and IsLTV
cannot
be true
at the same time.
UseVariableHorizon
— Variable horizon indicator
false
(default) | true
Variable horizon indicator when using
mpcmoveCodeGeneration
, specified as the
comma-separated pair consisting of
'UseVariableHorizon'
and either
true
or false
. To vary your
prediction and control horizons at run time, set
UseVariableHorizons
to
true
.
When you use variable horizons,
mpcmoveCodeGeneration
ignores the horizons
specified in configData
and instead uses the
prediction and control horizon specified in
onlineData.horizons
.
For more information, see Adjust Horizons at Run Time.
Output Arguments
configData
— MPC configuration parameters
structure
MPC configuration parameters that are constant at run time, returned as a
structure. These parameters are derived from the controller settings in
mpcobj
. When simulating your controller, pass
configData
to mpcmoveCodeGeneration
without
changing any parameters.
For more information on how generated MPC code uses constant matrices in
configData
to solve the QP problem, see QP Problem Construction for Generated C Code.
stateData
— Initial controller states
structure
Initial controller states, returned as a structure. To initialize your
simulation with the initial states defined in mpcobj
,
pass stateData
to mpcmoveCodeGeneration
. To use
different initial conditions, modify stateData
. You can
specify nondefault controller states using
InitialState
.
For more information on the stateData
fields, see
mpcmoveCodeGeneration
.
stateData
has the following fields.
Field | Description |
---|---|
Plant | Plant model state estimates |
Disturbance | Unmeasured disturbance model state estimates |
Noise | Output measurement noise model state estimates |
LastMove | Manipulated variable control moves from previous control interval |
Covariance | Covariance matrix for controller state estimates |
iA | Active inequality constraints |
onlineData
— Online MPC controller data
structure
Online MPC controller data that you must update at each control interval, returned as a structure with the following fields.
Field | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
signals | Input and output signals, returned as a structure with the following fields.
| ||||||||||||
limits | Input and output constraints, returned as a structure with the following fields:
When | ||||||||||||
weights | Updated QP optimization weights, returned as a structure with the following fields:
When | ||||||||||||
customconstraints | Updated custom mixed input/output constraints, returned as a structure with the following fields:
When | ||||||||||||
horizons | Updated controller horizon values, returned as a structure with the following fields:
The When
| ||||||||||||
model | Updated plant and nominal values for adaptive MPC and time-varying MPC, returned as a structure with the following fields:
The |
getCodeGenerationData
returns
onlineData
with empty matrices for all structure
fields, except signals.ref
,
signals.ym
, and signals.md
. These
fields contain the corresponding nominal signal values from
mpcobj
. If your controller does not have measured
disturbances, signals.md
is returned as an empty
matrix.
For more information on configuring onlineData
fields, see mpcmoveCodeGeneration
.
Version History
Introduced in R2016a
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)