www.gusucode.com > control_featured 案例源码程序 matlab代码 > control_featured/GSConnectingModels.m

    %% Connecting Models
% This example shows how to model interconnections of LTI systems, 
% from simple series and parallel connections to complex
% block diagrams.

%   Copyright 1986-2012 The MathWorks, Inc.

%% Overview
% Control System Toolbox(TM) provides a number of functions to help you
% build networks of LTI models.  These include functions to perform
%
% * Series and parallel connections (|series| and |parallel|)
% * Feedback connections (|feedback| and |lft|)
% * Input and output concatenations (|[ , ]|, |[ ; ]|, and |append|)
% * General block-diagram building (|connect|).
%
% These functions can handle any combination of model representations.
% For illustration purposes, create the following two SISO transfer 
% function models:
H1 = tf(2,[1 3 0])

%%
H2 = zpk([],-5,5)

%% Series Connection
% <<../GSConnectingModels_Fig02.png>>

%% 
% Use the |*| operator or the |series| function to connect LTI models in
% series, for example:
H = H2 * H1

%%
% or equivalently
H = series(H1,H2);

%% Parallel Connection
% <<../GSConnectingModels_Fig03.png>>

%%
% Use the |+| operator or the |parallel| function to connect LTI models in
% parallel, for example:
H = H1 + H2

%%
% or equivalently
H = parallel(H1,H2);


%% Feedback Connections
% The standard feedback configuration is shown below:
%
% <<../GSConnectingModels_Fig04.png>>

%%
% To build a model of the closed-loop transfer from |u| to |y|, type
H = feedback(H1,H2)

%%
% Note that |feedback| assumes negative feedback by default. 
% To apply positive feedback, use the following syntax:
H = feedback(H1,H2,+1);

%% 
% You can also use the |lft| function to build the more general 
% feedback interconnection sketched below.
%
% <<../GSConnectingModels_Fig08.png>>




%% Concatenating Inputs and Outputs
% You can concatenate the inputs of the two models |H1| and |H2| by typing
H = [ H1 , H2 ]

%%
% The resulting model has two inputs and corresponds to the
% interconnection:
%
% <<../GSConnectingModels_Fig05.png>>

%% 
% Similarly, you can concatenate the outputs of |H1| and |H2|  by typing
H = [ H1 ; H2 ]

%%
% The resulting model |H| has two outputs and one input and 
% corresponds to the following block diagram:
%
% <<../GSConnectingModels_Fig06.png>>
    
%%
% Finally, you can append the inputs and outputs of two models using:
H = append(H1,H2)

%%
% The resulting model |H| has two inputs and two outputs and 
% corresponds to the block diagram:
%
% <<../GSConnectingModels_Fig07.png>>
 
%%
% You can use concatenation to build MIMO models from elementary SISO
% models, for example:
H = [H1 , -tf(10,[1 10]) ; 0 , H2 ]

%%
sigma(H), grid

%% Building Models from Block Diagrams
% You can use combinations of the functions and operations introduced so far to construct
% models of simple block diagrams. For example, consider
% the following block diagram:
%
% <<../GSConnectingModels_Fig09.png>>
%
% with the following data for the blocks |F|, |C|, |G|, |S|:
s = tf('s');
F = 1/(s+1);
G = 100/(s^2+5*s+100);
C = 20*(s^2+s+60)/s/(s^2+40*s+400);
S = 10/(s+10);

%% 
% You can compute the closed-loop transfer |T| from |r| to |y| as
T = F * feedback(G*C,S);
step(T), grid

%%
% For more complicated block diagrams, the |connect| function provides a
% systematic and simple way to wire  blocks together. To use |connect|,
% follow these steps:
%
% * Define all blocks in the diagram, including summation blocks
% * Name all block input and output channels 
% * Select the block diagram I/Os from the list of block I/Os.

%%
%
% <<../GSConnectingModels_Fig10.png>>
%
% For the block diagram above, these steps amount to:
Sum1 = sumblk('e = r - y');
Sum2 = sumblk('u = uC + uF');

% Define block I/Os ("u" and "y" are shorthand for "InputName" and "OutputName")
F.u = 'r';   F.y = 'uF';
C.u = 'e';   C.y = 'uC';
G.u = 'u';   G.y = 'ym';
S.u = 'ym';  S.y = 'y';

% Compute transfer r -> ym
T = connect(F,C,G,S,Sum1,Sum2,'r','ym');
step(T), grid

%% Precedence Rules
% When connecting models of different types, the resulting model type is
% determined by the precedence rule 

%%
%    FRD > SS > ZPK > TF > PID

%%
% This rule states that FRD has highest precedence, followed by SS, ZPK, TF, and PID has
% the lowest precedence. For example, in the series connection:
H1 = ss(-1,2,3,0);
H2 = tf(1,[1 0]);
H = H2 * H1;

%%
% |H2| is automatically converted to the state-space representation and the
% result |H| is a state-space model:
class(H)

%%
% Because the SS and FRD representations are best suited for system
% interconnections, it is recommended that you convert at least one of 
% the models to SS or FRD to ensure that all computations are performed 
% using one of these two representations. One exception is when using 
% |connect| which automatically performs such conversion and always
% returns a state-space or FRD model of the block diagram.