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

    %% Passive Control of Water Tank Level
% In this example, you learn how to use Control System Tuner app to design a
% controller for a nonlinear plant modeled in Simulink. You accomplish the
% following tasks: 
% 
% * Configure the model and app for compensator tuning
% * Tune a first-order compensator using passivity-based design
% * Simulate the closed-loop nonlinear response.

% Copyright 2015 The MathWorks, Inc.

%% Simulink Model of the Control System
% The watertank_comp_design model, shown in the figure below, models
% a feedback loop for regulating the water level in a water tank.
% The Controller block contains the first-order compensator to be tuned.

mdl = 'watertank_comp_design';
open_system(mdl);


%% 
% The Water Tank subsystem models the water-tank dynamics.
% Water enters the tank from the top at a rate proportional to the voltage,
% V, applied to the pump. The water leaves through an opening in the tank
% base at a rate that is proportional to the square root of the water
% height, H, in the tank. The presence of the square root in the water flow
% rate makes the plant nonlinear.
%
% <<../op_watertank_schematic.gif>>
%
% The nonlinear model for the water flow is
%
% $$A\dot{x}~=~bu - a\sqrt{x}$$
%
%
% $$y~=~x$$
%
% where 
%
% * $x=H$ denotes the height of water in the tank
% * $u$ denotes the voltage applied to the pump 
% * $A$ denotes the cross-sectional area of the tank
% * $a$ and $b$ are constants related to the flow rate into and out of the tank
%
% This system is passive with storage function $V(x) = \frac{A}{2b}x^2$ since
%
% $$\dot{V}(x) - uy ~=~ -\frac{a}{b}x\sqrt{x}~\leq~ 0$$

%% Passivity-Based Control
% By the Passivity Theorem, the negative-feedback  interconnection of
% two strictly passive systems $H_1$ and $H_2$ is always stable.
%
% <<../vsp.png>>
%
% Since the water tank system is passive, it makes sense to require that the
% controller be strictly passive to guarantee closed-loop stability
% even when the plant model is inaccurate.

%% Compensator Tuning using Control System Tuner
% You can use the Control System Tuner app to tune the Controller block.
%
% Step 1: Launch the Control System Tuner app from the Simulink model 
%
% <<../passivity_tank_gui1.png>>
%%
% Step 2: Launch the tuned block selector from the *Select
% Blocks* button in the *Tuning* tab
%
% <<../passivity_tank_gui2.png>>
%% 
% Step 3: Select the Controller block and Click OK. This block now
% appears in the Tuned Blocks list. 
%
% <<../passivity_tank_gui3.png>>
%
%% 
% Step 4: Specify the tuning goals. Here there are two main goals:
%
% # Track step changes in water level
% # Make the controller passive
%
% Click on the *New Goal* dropdown list and first add a *Passivity*
% goal.
% 
% <<../passivity_tank_gui4.png>>
%
% Configure this goal to apply to
% the Controller block only. This is done by setting the input signal to be the
% "Desired Water Level", the output signal to be the output of
% the Controller block, and the loop opening to be at the Controller block
% output. Also specify minimum passivity indices of 0.01 at the inputs and
% outputs to enforce strict passivity.
%
% <<../passivity_tank_gui5.png>>
%
% Next add a *Reference Tracking* goal from the *New Goal* dropdown
% list. Configure this goal for a 1 second response time.
%
% <<../passivity_tank_gui6.png>>
%
% Finally, click on the *Manage Goals* button off the *Tuning* tab
% and mark the Passivity goal as a hard tuning constraint.
% 
% <<../passivity_tank_gui7.png>>

%% 
% Step 5: You are ready to tune the Controller block. Click the Tune button. 
% You can view the
% tuning results side by side by selecting *Left/Right* in the *View* tab.
% 
% <<../passivity_tank_gui8.png>>

%% 
% You can further analyze these results by generating a MATLAB script that 
% reproduces this tuning process.
% 
% <<../passivity_tank_gui9.png>>

%% Closed-Loop Simulation
% You can view the Bode plot of the tuned controller. Click on the *New Plot*
% button off the *Control System* tab. Select *New Bode* from dropdown list.
% 
% <<../passivity_tank_gui11.png>>
%
% The controller response can be specified as follows. 
% 
% <<../passivity_tank_gui12.png>>
%
% Click on the *Plot* button. The bode plot is shown in the following
% figure.
% 
% <<../passivity_tank_gui13.png>>
%
% You can also simulate the closed-loop nonlinear response 
% with the tuned controller. First, update the Controller block by
% clicking *Update Blocks* in the *Control System* tab. 
% 
% <<../passivity_tank_gui10.png>>
%
% In the Simulink model, double click the Scope block to open the Scope
% window, then simulate the model. 
% 
% <<../nonlinearsimulation.png>>
%
% The nonlinear response of the tuned control system appears in the Scope
% window. This simulation shows that the tracking performance is satisfactory.