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

Эта модель показывает, как реализовать нечеткую систему вывода (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')

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

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

Блоки

Похожие темы