www.gusucode.com > slcontrol 案例源码程序 matlab代码 > slcontrol/VaryOperatingPointsandObtainMultipleTransferFunctionsUsiExample.m

    %% Vary Operating Points and Obtain Multiple Transfer Functions Using slLinearizer  
% This example shows how to use the |slLinearizer| interface to batch linearize
% a Simulink(R) model. You linearize a model at multiple operating points
% and obtain multiple open-loop and closed-loop transfer functions from
% the model. 
%
% You can perform the same analysis using the |linearize| command. However,
% when you want to obtain multiple open-loop and closed-loop transfer functions,
% especially for models that are expensive to compile repeatedly, |slLinearizer|
% can be more efficient.   

%% Create slLinearizer Interface for Model 
% Open the model.
mdl = 'watertank';
open_system(mdl);    
%%
% Use the |slLinearizer| command to create the interface.
sllin = slLinearizer(mdl)  
%%
% The command-window display shows information about the |slLinearizer|
% interface.  In this interface, the |OperatingPoints| property display
% shows that no operating point is specified.
%% Specify Multiple Operating Points for Linearization
% You can linearize the model using trimmed operating points, the model
% initial condition, or simulation snapshot times. For this example, use
% trim points that you obtain for varying water-level reference heights. 
opspec = operspec(mdl);
opspec.States(2).Known = 1;
opts = findopOptions('DisplayReport','off');

h = [10 15 20];

for ct = 1:numel(h)
    opspec.States(2).x = h(ct);
    Href = h(ct);
    ops(ct) = findop(mdl,opspec,opts);
end

sllin.OperatingPoints = ops; 

%%
% Here, |h| specifies the different water-levels. |ops| is a 1 x 3 array
% of operating point objects. Each entry of |ops| is the model operating
% point at the corresponding water level. Configure the |OperatingPoints|
% property of |sllin| with |ops|. Now, when you obtain transfer functions
% from |sllin| using the |getIOTransfer|, |getLoopTransfer|, |getSensitivity|,
% and |getCompSensitivity| functions, the software returns a linearization
% for each specified operating point.  

%% 
% Each trim point is only valid for the corresponding reference height,
% represented by the |Href| parameter of the Desired Water Level block.
% So, configure |sllin| to vary this parameter accordingly. 
param.Name = 'Href';
param.Value = h;

sllin.Parameters = param;  

%% Analyze Plant Transfer Function
% In the |watertank| model, the Water-Tank System block represents the plant.
% To obtain the plant transfer function, add the input and output signals
% of the Water-Tank System block as analysis points of |sllin|. 
addPoint(sllin,{'watertank/PID Controller','watertank/Water-Tank System'})
sllin 

%%
% The first analysis point, which originates at the outport of the PID Controller
% block, is the input to the Water-Tank System block. The second analysis
% point is the output of the Water-Tank System block.  

%% 
% Obtain the plant transfer function from the input of the Water-Tank System
% block to the block output. To eliminate the effects of the feedback loop,
% specify the block output as a temporary loop opening. 
G = getIOTransfer(sllin,'PID','Tank','Tank'); 

%%
% In the call to |getIOTransfer|, |'PID'|, a portion of the block name
% |'watertank/PID Controller'|, specifies the first analysis point as the
% transfer function input. Similarly, |'Tank'|, a portion of the block
% name |'watertank/Water-Tank System'|, refers to the second analysis point.
% This analysis point is specified as the transfer function output (third
% input argument) and a temporary loop opening (fourth input argument). 

%%
% The output, |G|, is a 1 x 3 array of continuous-time state-space models.  

%% 
% Plot the step response for |G|. 
stepplot(G);   

%%
% The step response of the plant models varies significantly at the
% different operating points.

%% Analyze Closed-Loop Transfer Function
% The closed-loop transfer function is equal to the transfer function from
% the reference input, originating at the Desired Water Level block, to
% the plant output. 
%
% Add the reference input signal as an analysis point of |sllin|. 
addPoint(sllin,'watertank/Desired  Water Level');  

%% 
% Obtain the closed-loop transfer function. 
T = getIOTransfer(sllin,'Desired','Tank'); 

%%
% The output, |T|, is a 1 x 3 array of continuous-time state-space models.  

%% 
% Plot the step response for |T|. 
stepplot(T);   

%%
% Although the step response of the plant transfer function varies significantly
% at the three trimmed operating points, the controller brings the
% closed-loop responses much closer together at all three operating points.

%% Analyze Sensitivity at Plant Output
S = getSensitivity(sllin,'Tank'); 

%%
% The software injects a disturbance signal and measures the output at the
% plant output. |S| is a 1 x 3 array of continuous-time state-space models.  

%% 
% Plot the step response for |S|. 
stepplot(S);   

%%
% The plot indicates that both models can reject a step disturbance at the
% plant output within 40 seconds.