www.gusucode.com > mpc 案例源码 matlab代码程序 > mpc/ComputeOptimalControlMovesUsingCodeGenDataStructuresExample.m

    %% Compute Optimal Control Moves Using Code Generation Data Structures
%%
% Create a proper plant model.
plant = rss(3,1,1);
plant.D = 0; 

%%
% Specify the controller sample time.
Ts = 0.1;

%%
% Create an MPC controller.
mpcObj = mpc(plant,Ts);

%%
% Create code generation data structures.
[configData,stateData,onlineData] = getCodeGenerationData(mpcObj);

%%
% Initialize the plant states to zero to match the default states used by
% the MPC controller.


%%
% Run a closed-loop simulation. At each control interval, update the online
% data structure and call |mpcmoveCodeGeneration| to compute the optimal
% control moves.
x = zeros(size(plant.B,1),1); % Initialize plant states to zero (|mpcObj| default).
Tsim = 20;
for i = 1:round(Tsim/Ts)+1
    % Update plant output.
    y = plant.C*x;
    % Update measured output in online data.
    onlineData.signals.ym = y;
    % Update reference signal in online data.
    onlineData.signals.ref = 1;
    % Compute control actions.
    [u,statedata] = mpcmoveCodeGeneration(configData,stateData,onlineData);
    % Update plant state.
    x = plant.A*x + plant.B*u;
end

%%
% Generate MEX function with MATLAB(R) Coder(TM), specifying |configData|
% as a constant.
func = 'mpcmoveCodeGeneration';
funcOutput = 'mpcmoveMEX';
Cfg = coder.config('mex');
Cfg.DynamicMemoryAllocation = 'off';
codegen('-config',Cfg,func,'-o',funcOutput,'-args',...
    {coder.Constant(configData),stateData,onlineData});