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