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