Управление уровнем воды в баке

Эта модель показывает, как реализовать нечеткую систему вывода (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 функции принадлежности клапана не симметричны. ПИД-регулятор не поддерживает такую асимметрию.

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

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

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

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

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

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

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

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. Например, если вы удаляете последние два правила, которые походят на производное действие управления, контроллер выполняет плохо с большими колебаниями в уровне воды.

Смотрите также

Блоки

Похожие темы