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

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

Модель Simulink

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

open_system('sltank')

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

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

Нечеткая система определяется в объекте FIS, tank, в рабочей области MATLAB ®. Для получения дополнительной информации о том, как задать FIS в блоке Fuzzy Logic Controller, см. «Нечеткий логический контроллер».

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

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

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

plotmf(tank,'output',1)

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

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

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

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

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

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

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

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

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)" 

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

Симуляция

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

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

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

См. также

Блоки

Похожие темы