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});