exponenta event banner

Контроль уровня воды в резервуаре

В этой модели показано, как реализовать систему нечеткого вывода (FIS) в модели Simulink ®.

Модель Simulink

Эта модель управляет уровнем воды в резервуаре с помощью системы нечеткого вывода, реализованной с помощью блока контроллера нечеткой логики. Откройте окно sltank модель.

open_system('sltank')

Для этой системы управление водой, поступающей в резервуар, осуществляется с помощью клапана. Расход зависит от диаметра выходной трубы, который является постоянным, и давления в баке, которое изменяется с уровнем воды. Поэтому система имеет нелинейные характеристики.

Система нечеткого вывода

Нечеткая система определяется в объекте FIS, tank, в рабочей области MATLAB ®. Дополнительные сведения о том, как указать FIS в блоке контроллера нечеткой логики, см. в разделе Контроллер нечеткой логики.

Двумя входами в нечеткую систему является ошибка уровня воды, levelи скорость изменения уровня воды, rate. Каждый вход имеет три функции членства.

figure
plotmf(tank,'input',1)
figure
plotmf(tank,'input',2)

Выход нечеткой системы - это скорость, с которой открывается или закрывается регулирующий клапан, valve, которая имеет пять функций членства.

plotmf(tank,'output',1)

Из-за диаметра выпускной трубы резервуар для воды в этой системе опорожняется медленнее, чем заполняется. Чтобы компенсировать этот дисбаланс, close_slow и open_slow функции членства в клапане несимметричны. Контроллер PID не поддерживает такую асимметрию.

Нечеткая система имеет пять правил. Первые три правила регулируют клапан только на основании погрешности уровня воды.

  • Если уровень воды в норме, то не отрегулируйте клапан.

  • Если уровень воды низкий, откройте клапан быстро.

  • Если уровень воды высокий, то быстро закройте клапан.

Два других правила регулируют клапан на основе скорости изменения уровня воды, когда уровень воды находится вблизи уставки.

  • Если уровень воды в норме и увеличивается, закройте клапан медленно.

  • Если уровень воды нормальный и понижается, откройте клапан медленно.

tank.Rules
ans = 

  1x5 fisrule array with properties:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                              Description                      
         ______________________________________________________

    1    "level==okay => valve=no_change (1)"                  
    2    "level==low => valve=open_fast (1)"                   
    3    "level==high => valve=close_fast (1)"                 
    4    "level==okay & rate==positive => valve=close_slow (1)"
    5    "level==okay & rate==negative => valve=open_slow (1)" 

В этой модели можно также контролировать уровень воды с помощью ПИД-контроллера. Чтобы переключиться на контроллер PID, установите для блока const значение больше или равное нулю.

Моделирование

Модель моделирует контроллер с периодическими изменениями уставки уровня воды. Запустите моделирование.

sim('sltank',100)
open_system('sltank/Comparison')

Уровень воды отслеживает заданную точку. Можно настроить производительность контроллера, изменив правила tank FIS. Например, если удалить два последних правила, которые аналогичны действию управления производной, контроллер работает плохо, с большими колебаниями уровня воды.

См. также

Блоки

Связанные темы