Generate MATLAB Code from Control System Tuner for Command-Line Tuning
You can generate a MATLAB® script in Control System Tuner for tuning a control system at the command line. Generated scripts are useful when you want to programmatically reproduce a result you obtained interactively. A generated MATLAB script also enables you to programmatically perform multiple tuning operations with variations in tuning goals, system parameters, or model conditions such as operating point.
Tip
You can also save a Control System Tuner session to reproduce within Control System Tuner. To do so, in the Control System tab, click Save Session.
To generate a MATLAB script in Control System Tuner, in the Tuning tab, click Tune. Select Script with current values.
The MATLAB Editor displays the generated script, which script reproduces programmatically the current tuning configuration of Control System Tuner.
For example, suppose you generate a MATLAB script after completing all steps in the example Control of a Linear Electric Actuator Using Control System Tuner. The generated script computes the operating point used for tuning, designates the blocks to tune, creates the tuning goals, and performs other operations to reproduce the result at the command line.
The first section of the script creates the slTuner
(Simulink Control Design) interface to the Simulink® model (rct_linact
in this example). The
slTuner
interface stores a linearization of the model and
parameterizations of the blocks to tune.
%% Create system data with slTuner interface TunedBlocks = {'rct_linact/Current Controller/Current PID'; ... 'rct_linact/Speed Controller/Speed PID'}; AnalysisPoints = {'rct_linact/Speed Demand (rpm)/1'; ... 'rct_linact/Current Sensor/1'; ... 'rct_linact/Hall Effect Sensor/1'; ... 'rct_linact/Speed Controller/Speed PID/1'; ... 'rct_linact/Current Controller/Current PID/1'}; OperatingPoints = 0.5; % Specify the custom options Options = slTunerOptions('AreParamsTunable',false); % Create the slTuner object CL0 = slTuner('rct_linact',TunedBlocks,AnalysisPoints,OperatingPoints,Options);
The slTuner
interface also specifies the operating point at which
the model is linearized, and marks as analysis points all the signal locations required to
specify the tuning goals for the example. (See Create and Configure slTuner Interface to Simulink Model.)
If you are tuning a control system modeled in MATLAB instead of Simulink, the first section of the script constructs a genss
model that has equivalent dynamics and parameterization to the genss
model of the control system that you specified Control System Tuner.
Next, the script creates the three tuning goals specified in the example. The script
uses TuningGoal
objects to capture these tuning goals. For instance,
the script uses TuningGoal.Tracking
to capture the
Tracking Goal of the example.
%% Create tuning goal to follow reference commands with prescribed performance % Inputs and outputs Inputs = {'rct_linact/Speed Demand (rpm)/1'}; Outputs = {'rct_linact/Hall Effect Sensor/1[rpm]'}; % Tuning goal specifications ResponseTime = 0.1; % Approximately reciprocal of tracking bandwidth DCError = 0.001; % Maximum steady-state error PeakError = 1; % Peak error across frequency % Create tuning goal for tracking TR = TuningGoal.Tracking(Inputs,Outputs,ResponseTime,DCError,PeakError); TR.Name = 'TR'; % Tuning goal name
After creating the tuning goals, the script sets any algorithm options you had set in Control System Tuner. The script also designates tuning goals as soft or hard goals, according to the configuration of tuning goals in Control System Tuner. (See Manage Tuning Goals.)
%% Create option set for systune command Options = systuneOptions(); %% Set soft and hard goals SoftGoals = [ TR ; ... MG1 ; ... MG2 ]; HardGoals = [];
In this example, all the goals are designated as soft goals when the script is
generated. Therefore, HardGoals
is empty.
Finally, the script tunes the control system by calling systune
(Simulink Control Design) on the slTuner
interface using the tuning goals
and options.
%% Tune the parameters with soft and hard goals
[CL1,fSoft,gHard,Info] = systune(CL0,SoftGoals,HardGoals,Options);
The script also includes an optional call to viewGoal
, which
displays graphical representations of the tuning goals to aid you in interpreting and
validating the tuning results. Uncomment this line of code to generate the plots.
%% View tuning results % viewGoal([SoftGoals;HardGoals],CL1);
You can add calls to functions such getIOTransfer
(Simulink Control Design) to make the script generate additional analysis plots.