www.gusucode.com > sloptim工具箱matlab源码程序 > sloptim/sloptim/newsro.m

    function Proj = newsro(Model,Params)
%NEWSRO  Create default response optimization project for Simulink model.
%
%   NEWSRO will be removed in a future release. Use the new Simulink Design
%   Optimization command line interface instead, see sdo.optimize for more
%   information.
%   
%   PROJ = NEWSRO(MODELNAME,PARAMETERS) creates a new optimization project
%   PROJ for the Simulink model with name MODELNAME.  The tuned parameters
%   are specified by the cell array of character vectors PARAMETERS.  The
%   specified model should contain at least one Signal Constraint block
%   from the Simulink Design Optimization library (see SDOLIB).
%
%   Type HELP SROPROJECT for more information on how to customize and
%   run a Response Optimization project.
%
%   Example
%      p = newsro('srodemo1',{'P' 'I' 'D'})
%
%   See also RESPONSEOPTIMIZER/FINDCONSTR, RESPONSEOPTIMIZER/FINDPAR,
%   GETSRO, RESPONSEOPTIMIZER/OPTIMIZE, SROPROJECT.

%   Copyright 1990-2016 The MathWorks, Inc.

%Warn about updated SDO command line
ctrlMsgUtils.warning('sldo:general:warnSDOUpdate_RemoveX','newsro');

narginchk(2,2)

% Is the model open?
LoadFlag = isempty( find_system('Name', Model, 'Type', 'block_diagram') );
if LoadFlag
   try
      load_system(Model)
   catch E
      throw(E)
   end
end

% Look for SRO blocks
SROBlocks = find_system(Model,'FollowLinks','on','LookUnderMasks','all',...
      'RegExp','on','BlockType','SubSystem','LogID','SRO_DataLog_\d');
if isempty(SROBlocks)
   ctrlMsgUtils.error('Sloptim:sloptim:errNoSROBlocks',Model)
end

% Creates project specification for Simulink model
ProjForm = srogui.SimProjectForm;
ProjForm.Name = Model;

% Initialize project with one constraint per block in MODEL
ProjForm.init(Model)

   % Get list of all model parameters
utils = slcontrol.Utilities;
AllVars = getTunableParameters(utils,ProjForm.Model);
AllVars = {AllVars.Name};
   
   % Check parameters against list of tunable model parameters
   if ischar(Params)
      Params = {Params};
   elseif ~iscellstr(Params)
      ctrlMsgUtils.error('Sloptim:sloptim:errParamNameCell')
   end
isValid = ismember(strtok(Params,'.({'),AllVars);
   idxNotValid = find(~isValid);
   if ~isempty(idxNotValid)
      ctrlMsgUtils.error('Sloptim:sloptim:errUndefinedVar',Params{idxNotValid(1)})
   end

% Create parameter specs and initialize parameters
ParForms = [];
for ct=1:numel(Params)
   ps = srogui.ParameterForm(Params{ct});
   ParForms = [ParForms ; ps]; %#ok<AGROW>
end
ProjForm.Parameters = ParForms;

% Evaluate project specification
try
   Proj = evalForm(ProjForm);
catch E
   rethrow(E)
end

% Clean up
if LoadFlag
   close_system(Model,0)
end