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