www.gusucode.com > 模糊控制工具箱 fuzzy logic toolbox源码程序 > fuzzy/fuzdemos/animtank.m

    function [sys,x0]=animtank(t,x,u,flag,ts)
%ANIMTANK Animation of water tank system.

%   Ned Gulley, 10-4-94
%   Copyright 1994-2002 The MathWorks, Inc. 
%   $Revision: 1.8.2.1 $  $Date: 2003/01/07 19:34:32 $

global tankdemo

if flag==2,
    if any(get(0,'Children')==tankdemo),
      if strcmp(get(tankdemo,'Name'),'Tank Demo'),

    % Update tank one level
        tankHndlList=get(tankdemo,'UserData');
    yData=get(tankHndlList(1),'YData');
    yOffset=yData(1);
    yData(3:4)=[1 1]*u(2)+yOffset;
    set(tankHndlList(1),'YData',yData);

    yData=get(tankHndlList(2),'YData');
    yData([3 4])=[1 1]*u(2)+yOffset;
    set(tankHndlList(2),'YData',yData);

    yData=get(tankHndlList(3),'YData');
    yData=[1 1]*u(1)+1;
    set(tankHndlList(3),'YData',yData);

        drawnow;
      end
    end
    sys=[];
    x0=[];
    
elseif flag == 4 % Return next sample hit
  
  % ns stores the number of samples
  ns = t/ts;

  % This is the time of the next sample hit.
  sys = (1 + floor(ns + 1e-13*(1+ns)))*ts;
  x0=[];
  
elseif flag==0,

    % Initialize the figure for use with this simulation
    animinit('Tank Demo');
    tankdemo=findobj(0,'Name','Tank Demo');

    tank1Wid=1; 
    tank1Ht=2; 
    tank1Init=0;
    setPt=0.5;

    tankX=[0 0 1 1]-0.5;
    tankY=[1 0 0 1];
    % Draw the tank
    line(1.1*tankX*tank1Wid+1,tankY*tank1Ht+0.95,'LineWidth',2,'Color','black');
    tankX=[0 1 1 0 0]-0.5;
    tankY=[0 0 1 1 0];
    % Draw the water
    waterX=tankX*tank1Wid+1;
    waterY=tankY*tank1Init+1;
    tank1Hndl=patch(waterX,waterY,'blue','EraseMode','none','EdgeColor','none');
    % Draw the anti-water (to erase the blue as we go along)
    waterY([1 2 5])=tank1Ht*[1 1 1]+1;
    waterY([3 4])=tank1Init*[1 1]+1; 
    tank2Hndl=patch(waterX,waterY,[.9 .9 .9],'EdgeColor','none','EraseMode','none');
    % Draw the set point
    lineHndl=line([0 0.4],setPt*[1 1]+1,'Color','red','LineWidth',4, ...
    'EraseMode','background');

    set(gcf, ...
    'Color',[.9 .9 .9], ...
    'UserData',[tank1Hndl tank2Hndl lineHndl]);
    set(gca, ...
    'XLim',[0 2],'YLim',[0 3.5], ...
    'XTick',[],'YTick',[], ...
    'XColor','black','YColor','black', ...
    'Box','on');
    axis equal
    xlabel('Water Level Control','Color','black');
    set(get(gca,'XLabel'),'Visible','on')

    sys=[0 0 0 2 0 0];
    x0=[];

end;