Разработка системы управления на базе нечеткой логики с генерацией кода в «DLL»

Лабораторная работа №8 по курсу «Управление в технических системах»

Введение

В классической теории автоматического управления, управляющее воздействие на систему рассчитывается в зависимости от регулируемой величины, выраженной в численном виде, и система управления производит преобразование входных параметров в управляющие воздействия передаточными функциями.

Нечеткая логика — это принцип построения алгоритмов управления на базе системы логических правил, аналогичных классической логике. При данном подходе управляющие воздействие рассчитывается на основе набора правил, в виде логического анализа утверждений.

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

В данной лабораторной работе будет разработана модель системы управления на базе нечеткой логики для поддержания заданного уровня воды в негерметичном баке путем регулирования расхода поступающей в бак воды.

Цель работы:

Задачи работы:

Основные теоретические сведения о системах нечеткого вывода

В теории нечетких множеств, помимо переменных численного типа, существуют лингвистические переменные с приписываемым им значениями. Множество всех возможных значений, которые может принимать лингвистическая переменная, называется терм-множеством. Каждый нечеткий терм определяется функцией принадлежности, характеризующей соответствующее терму нечеткое множество. Например, пусть переменная x обозначает температуру (x = «температура»). Для данной лингвистической переменной можно определить нечеткие множества «отрицательная», «близкая к нулю», «положительная», характеризуемые функциями принадлежности μотриц(x), μбнул(x), μполож(x).

Нечеткие правила вывода

Базовое правило вывода типа «если-то» называется нечеткой импликацией, принимающей форму:
где A и B – это лингвистические значения, определенные через функции принадлежности соответственно для x и y. Выражение «x это A» называется условием (предпосылкой), а «y это B» называется следствием (заключением).
Нечеткое рассуждение – это процедура, которая позволяет определить заключение из множества правил «если-то». Такое множество может принять вид:
Значение функции принадлежности μA(x), где x = [x1, x2, …, xN] – входной вектор, должно интерпретироваться с использованием нечетких операций и их композиций. Самые распространенные интерпретации имеют следующие формы:
  • форма логического произведения множеств, «И»:
  • форма логической суммы множеств, «ИЛИ»:

Приписывание единственного значения функции принадлежности, описывающей многомерное условие, называется агрегированием предпосылки. Каждой импликации A → B, определенной выражением, можно приписать единственное значение функции принадлежности μA → B(x, y).

Системы нечеткого вывода

Элементы теории нечетких множеств, правила импликации и нечетких рассуждений образуют систему нечеткого вывода. В общем случае система нечеткого логического вывода включает следующие этапы:
  1. Приведение к нечеткости, или фазификация – преобразование точного множества входных величин в нечеткое множество, определяемое с помощью значений функций принадлежности μA(x), соответствующих лингвистическим термам.
  2. Нечеткий логический вывод:
    1. Агрегация – определение степени истинности всех предпосылок в каждом правиле. Агрегация необходима, если в правилах больше одной предпосылки.
    2. Активация – вычисленное значение истинности для всех предпосылок каждого правила применяется к заключениям каждого правила. Это приводит к нечетким множествам, которые будут назначены каждой переменной вывода для каждого правила. На этапе активации происходит обращение к нечеткой базе правил.
  3. Аккумуляция – получение нечеткого множества для каждой из выходной переменной путем объединения нечетких множеств, полученных для каждой переменной вывода.
  4. Приведение к четкости, или дефазификация – преобразование нечеткого множества, определяемого функцией принадлежности μB(y), в конкретное значение выходной переменной y.
Описанная система нечеткого вывода называется системой типа Мамдани, ее структура представлена на рисунке (Рисунок 1).

Рисунок 1. Структура нечеткой системы с фазификатором и дефазификатором.

В данной лабораторной работе при разработке регулятора будет использоваться именно метод Мамдани, так как он является наиболее часто используемым методом реализации регуляторов на базе нечеткой логики. Система управления с нечетким регулятором, содержащим все вышеуказанные компоненты: фазификатор, механизм вывода, дефазификатор – представлена на рисунке (Рисунок 2). На вход регулятора подается сигнал ошибки, полученный в результате сравнения заданного входного сигнала с выходным сигналом системы, выходной сигнал нечеткого регулятора подается на объект управления.

Рисунок 2. Структурная схема системы управления на базе нечеткой логики.

Описание модели управления негерметичным баком на базе нечеткой логики

В данной лабораторной работе рассматривается модель системы управления негерметичным баком, которая должна поддерживать уровень воды в баке на заданном уровне.

Описание модели негерметичного бака

Схематическое представление негерметичного бака показано на рисунке (Рисунок 3). К баку подходят две трубы: через одну трубу, снабженную клапаном, вода втекает в бак, через другую – вытекает. Интенсивность потока воды, поступающей в бак, зависит от положения клапана, управляемого регулятором. Расход воды является неконтролируемым и зависит от диаметра выходной трубы (фиксированная величина) и от текущего уровня воды в баке.

Рисунок 3. Схематическое представление негерметичного бака.

На рисунке (Рисунок 3) приняты следующие обозначения: «V» – объем бака, м3; «ht» – высота бака, м; «area» – площадь сечения бака; «outarea» – площадь выходного отверстия; «overs» – положение сенсора переполнения от верхнего среза, м; «h» – уровень воды в баке, м; «rate» – расход, поступающий в бак, м3/с; «outrate» – расход утечки, м3/с.

Уравнения динамики негерметичного бака: скорость изменения объема воды в баке, расход утечки, уровень воды в баке и скорость изменения уровня воды представляются следующими дифференциальными и алгебраическими уравнениями:
где g = 9.81 м/с2 – ускорение свободного падения.

Описание модели клапана

С помощью клапана происходит управление расходом воды, поступающей в бак. На вход подается значение скорости открытия/закрытия клапана, интеграл от которой по времени равен положению клапана и принимает значение от 0 до 1, где:
  • «0» – клапан закрыт – расход равен нулю;
  • «1» – клапан открыт – расход равен номинальному, заданному как константа.

Выходное значение – расход воды, поступающий в бак, «rate», рассчитывается как произведение номинального расхода на значение положения клапана.

Если понимать под выходной (регулируемой) переменной уровень воды, а под регулирующим элементом – клапан, то можно отметить, что подобный объект регулирования, с точки зрения его математического описания, является динамическим и существенно нелинейным.

Описание модели нечеткого регулятора

Управление положением клапана осуществляется посредством нечеткого регулятора (Рисунок 4). Алгоритм управления представляет собой систему нечеткого вывода типа Мамдани, определяющую скорость открытия/закрытия клапана на основании сигналов, поступающих на вход регулятора: разницы между фактическим и целевым уровнем воды баке и скорости изменения уровня.

Рисунок 4. Схематическое представление системы управления уровнем воды в баке.

Регулятор представляет собой систему нечеткого вывода, которая включает следующие компоненты: фазификатор, механизм вывода, дефазификатор.

Для приведения к нечеткости (фазификации) входных переменных необходимо задать терм-множества для каждой входной переменной и функции принадлежности, определяющие эти нечеткие множества. Для входной лингвистической переменной «разница уровней» терм-множество будет иметь следующие значения:
  1. отрицательная,
  2. близкая к нулю,
  3. положительная.

Таким образом, если разница между фактическим и целевым уровнем воды в баке отрицательная, то есть фактический уровень ниже целевого, то необходимо увеличить расход воды, поступающей в бак; если разница положительная, то есть фактический уровень превышает целевой, то необходимо ограничить подачу воды в бак; если разница близкая к нулю, то есть фактический уровень соответствует целевому или отличается на малую величину, то изменять положение клапана не надо, но если при этом уровень воды изменяется с некоторой скоростью, то для определения скорости открытия/закрытия клапана необходимо учесть вторую переменную – «скорость изменения уровня».

Переменная «скорость изменения уровня» будет иметь термы:
  1. уменьшается,
  2. не изменяется,
  3. увеличивается.

Итак, если разница уровней близкая к нулю и скорость изменения уровня уменьшается, то необходимо медленно увеличивать поток поступающей в бак воды, а если скорость увеличивается, то необходимо медленно уменьшать поток воды, поступающей в бак.

Для составления базы правил на основе этих утверждений необходимо задать терм-множество и, для дефазификации, соответствующие функции принадлежности для выходной переменной нечеткой системы – скорости открытия/закрытия клапана. Выходная лингвистическая переменная «команда клапана» будет иметь следующие термы:
  1. закрывать быстро,
  2. закрывать медленно,
  3. не менять,
  4. открывать медленно,
  5. открывать быстро.

Функции принадлежности, определяющие нечеткие множества для входных переменных будут задаваться как функции принадлежности Гаусса, для выходной переменной – как треугольные функции принадлежности.

База правил, необходимая для построения нечеткого логического вывода по формированию команд управления клапаном, в соответствии с утверждениями и заданными терм-множествами, имеет следующий вид:
  1. ЕСЛИ «разница уровней» = «отрицательная», ТО «команда клапана» = «открывать быстро»;
  2. ЕСЛИ «разница уровней» = «близкая к нулю», TO «команда клапана» = «не изменять»;
  3. ЕСЛИ «разница уровней» = «положительная», TO «команда клапана» = «закрывать быстро»;
  4. ЕСЛИ «разница уровней» = «близкая к нулю» И «скорость изменения уровня» = «уменьшается», ТО «команда клапана» = «открывать медленно»;
  5. ЕСЛИ «разница уровней» = «близкая к нулю» И «скорость изменения уровня» = «увеличивается», ТО «команда клапана» = «закрывать медленно».

Выполнение лабораторной работы

Содержание лабораторной работы

В данной лабораторной работе будет:
  • разработана модель негерметичного бака;
  • разработана модель клапана;
  • разработана модель нечеткого регулятора как системы нечеткого вывода типа Мамдани;
  • проведено моделирование системы управления негерметичным баком;
  • построены графики зависимости уровня воды в баке и расхода обратного тока от времени;
  • произведено сравнение графиков целевого и фактического уровня воды в баке;
  • произведено преобразование нечеткого регулятора в вид динамической библиотеки «DLL» с использованием генератора кода;
  • проведено моделирование системы управления негерметичным баком с преобразованным нечетким регулятором;
  • произведено сравнение результатов работы модели системы с преобразованным нечетким регулятором и исходной модели системы.

Разработка модели негерметичного бака

Для создания нового проекта необходимо выполнить следующие действия:
  1. В главном окне SimInTech нажать левой кнопкой мыши на кнопку «Файл» и выбрать пункт «Новый проект».
  2. В выпадающем меню выбрать пункт «Схема модели общего вида».
  3. Сохранить проект, оставив имя по умолчанию или указать желаемое имя проекта.

Разработка моделей негерметичного бака, клапана и нечеткого регулятора будет производиться в отдельных субмоделях для удобства организации блоков по моделям. После разработки всех моделей они будут объединены в общую модель системы управления.

Для разработки модели негерметичного бака необходимо добавить в рабочую область окна проекта блок «Субмодель» из вкладки «Субструктуры» и задать к нему подпись согласно рисунку (Рисунок 5).

Рисунок 5. Окно проекта с блоком «Субмодель» с подписью «Бак».

Двойным нажатием левой кнопкой мыши по блоку «Субмодель» открыть рабочую область субмодели для разработки модели негерметичного бака. В рабочую область блока «Субмодель» поместить следующие блоки:
  • 1 блок «Порт входа» и 3 блока «Порт выхода» из вкладки «Субструктуры» – данные блоки предназначены для соединения внешней части схемы со схемой, находящейся внутри субмодели;
  • 1 блок «Интегратор с ограничением» и 1 блок «Язык программирования» из вкладки «Динамические», 2 блока «Усилитель» и 1 блок «Сравнивающее устройство» из вкладки «Операторы» – данные блоки моделируют работу негерметичного бака.
Разместить блоки на схеме, соединить линиями связи, задать имена входных и выходных портов и задать подписи к блокам согласно рисунку (Рисунок 6).

Рисунок 6. Рабочая область субмодели со структурной схемой модели негерметичного бака.

Параметры геометрии негерметичного бака и его начальный уровень жидкости будут описываться в скрипте проекта, а уравнения динамики бака будут задаваться в блоках «Интегратор с ограничением», «Усилитель» и «Язык программирования». Для установки параметров бака необходимо открыть окно «Скрипт страницы» и задать параметры моделируемого негерметичного бака, указанные в описании модели (раздел «Описание модели управления негерметичным баком на базе нечеткой логики»), согласно рисунку (Рисунок 7). После ввода всего текста скрипта нажать на кнопку «Закрыть и применить» для принятия изменений и закрытия окна редактора.

Рисунок 7. Окно «Скрипт страницы».

После задания параметров моделируемого негерметичного бака необходимо реализовать модель наполнения бака водой и утечки воды из бака, описание которой в виде систем алгебраических и обыкновенных дифференциальных уравнений представлено в разделе «Описание модели управления негерметичным баком на базе нечеткой логики». Заполненный объем бака будет определяться с помощью блока «Интегратор с ограничением»: объем воды в баке рассчитывается в блоке как интеграл по времени от входного сигнала – расхода воды, поступающего в бак, при заданных начальных условиях и ограничении – максимально возможного значения объема воды в баке. Для задания формул расчета начального объема воды в баке и максимально возможного объема воды необходимо открыть окно «Свойства» блока «Интегратор с ограничением» и задать формулы свойствам согласно рисунку (Рисунок 8).

Рисунок 8. Окно «Свойства» блока «Интегратор с ограничением».

Уровень воды в баке будет рассчитываться с помощью блока «Усилитель» с подписью «Уровень в баке». Для задания формулы расчета уровня воды необходимо открыть окно «Свойства» блока «Усилитель» с подписью «Уровень в баке» и задать формулу свойства «Коэффициент усиления» согласно рисунку (Рисунок 9). Уровень воды в баке рассчитывается как отношение значения текущего объема воды, определенного с помощью блока «Интегратор с ограничением», к площади сечения бака.

Рисунок 9. Окно «Свойства» блока «Усилитель» с подписью «Уровень в баке».

Далее необходимо реализовать формулы расчета утечки воды из бака. Для этого необходимо двойным нажатием левой кнопкой мыши по блоку «Язык программирования» открыть текстовый редактор и реализовать формулу расчета утечки воды из бака в текстовом виде согласно рисунку (Рисунок 10). После ввода всего текста скрипта нажать на кнопку «Закрыть и применить» для принятия изменений в блоке «Язык программирования» и закрытия окна редактора.

Рисунок 10. Окно редактора блока «Язык программирования».

После закрытия окна текстового редактора блока «Язык программирования» названия портов блока изменятся согласно заданным в скрипте переменным. Поскольку подписи портов перекрываются, необходимо изменить размеры блока. Для изменения размера блока необходимо одинарным нажатием левой кнопкой мыши выбрать блок и навести курсор мыши на край блока. Курсор мыши изменится на курсор «Изменение размера по диагонали» согласно рисунку (Рисунок 11).

Рисунок 11. Рабочая область субмодели с выделенным блоком «Язык программирования».

Захватить край блока одинарным нажатием левой кнопкой мыши и потянуть в сторону для изменения размера блока «Язык программирования» согласно рисунку (Рисунок 12).

Рисунок 12. Рабочая область субмодели с измененным размером блока «Язык программирования».

Создание модели бака завершено, далее необходимо выйти из субмодели двойным нажатием левой кнопки мыши по свободному пространству рабочей области субмодели. Так как названия портов субмодели сливаются, необходимо увеличить размер блока согласно рисунку (Рисунок 13).

Рисунок 13. Рабочая область окна проекта с увеличенным блоком «Субмодель» с подписью «Бак».

Разработка модели клапана

Далее необходимо создать модель клапана, с помощью которого будет регулироваться поток воды, поступающий в бак. Для этого в рабочую область окна проекта требуется поместить блок «Субмодель» из вкладки «Субструктуры» и задать подпись согласно рисунку (Рисунок 14).

Рисунок 14. Окно проекта с установленным блоком «Субмодель» с подписью «Клапан».

Для создания модели клапана необходимо двойным нажатием левой кнопки мыши по блоку «Субмодель» с подписью «Клапан» войти в субмодель и поместить в рабочую область субмодели следующие блоки:
  • 2 блока «Порт входа» и 1 блок «Порт выхода» из вкладки «Субструктуры» – данные блоки предназначены для соединения внешней части схемы со схемой, находящейся внутри субмодели;
  • 1 блок «Интегратор с ограничением» из вкладки «Динамические» и 1 блок «Перемножитель» из вкладки «Операторы» – данные блоки моделируют работу клапана.
Соединить блоки линиями связи и задать названия портов входов и выхода субмодели согласно рисунку (Рисунок 15).

Рисунок 15. Рабочая область субмодели с подписью «Клапан» с установленными блоками и заданными названия портов.

На вход блока подаются два сигнала – команда клапана и номинальный расход воды, поступающий через клапан. Команда клапана представляет собой числовое значение скорости открытия/закрытия клапана. С помощью блока «Интегратор с ограничением» рассчитывается положение задвижки как интеграл от скорости по времени и принимает значение от 0 до 1, где 0 – клапан закрыт, 1 – клапан полностью открыт. Выходной сигнал блока – расход воды, поступающий в бак, рассчитывается путем перемножения полученного значения положения клапана с номинальным расходом: закрытому клапану соответствует нулевой расход воды, полностью открытому клапану соответствует номинальный расход.

После создания модели клапана необходимо выйти из субмодели и изменить размер блока «Субмодель» с подписью «Клапан», чтобы не перекрывались названия входных и выходных портов блока, согласно рисунку (Рисунок 16).

Рисунок 16. Окно проекта с измененным размером блока «Субмодель» с подписью «Клапан».

Разработка модели нечеткого регулятора

Далее требуется создать модель нечеткого регулятора, с помощью которого будет определяться команда клапана. Для этого необходимо в рабочую область окна проекта поместить блок «Субмодель» из вкладки «Субструктуры» и задать подпись согласно рисунку (Рисунок 17).

Рисунок 17. Окно проекта с установленным блоком «Субмодель» с подписью «Нечеткий регулятор».

Для создания модели нечеткого регулятора необходимо войти в субмодель с подписью «Нечеткий регулятор» и поместить в рабочую область субмодели следующие блоки:
  • 2 блока «Порт входа» и 1 блок «Порт выхода» из вкладки «Субструктуры» – данные блоки предназначены для соединения внешней части схемы со схемой, находящейся внутри субмодели;
  • 2 блока «Демультиплексор» из вкладки «Векторные» – данный блок позволяет разделить векторный входной сигнал на отдельные выходные сигналы;
  • 1 блок «Мультиплексор» из вкладки «Векторные» – данный блок обеспечивает поочередную передачу на один выходной порт нескольких входных сигналов;
  • 2 блока «НЛ – Фазификация – Фазификация Гаусса» из вкладки «Нечеткая логика» – данные блоки предназначены для фазификации входных сигналов, то есть для преобразования точных множеств входных величин в нечеткие множества, определяемые с помощью значений функций принадлежности μA(error), μA(dh), соответствующих заданным лингвистическим термам;
  • 3 блока «НЛ – Операции – Импликация», 2 блока «НЛ – Операции – И (конъюнкция)» из вкладки «Нечеткая логика» – данные блоки предназначены для формирования механизма вывода на основе заданной в разделе «Описание модели управления негерметичным баком на базе нечеткой логики» базы правил;
  • 1 блок «НЛ – Нечеткий вывод – Треугольная функция» из вкладки «Нечеткая логика» – данный блок предназначен для дефазификации выходной переменной, то есть для преобразования нечеткого множества, определяемого функцией принадлежности μB(valve cmd), в конкретное значение выходной переменной «valve cmd».
Расположить блоки, задать названия портов входов и выхода согласно рисунку (Рисунок 18).

Рисунок 18. Рабочая область субмодели с подписью «Нечеткий регулятор» с установленными блоками.

Перед соединением блоков в соответствии с правилами нечеткого логического вывода и с заданной базой правил, необходимо задать подписи к блокам согласно рисунку (Рисунок 19). Если подписи к блокам перекрывают друг друга, необходимо изменить положение блоков так, чтобы перекрытия не было. Подписи к блокам «Демультиплексор» и «Мультплексор» обозначают соответствие между номерами выходных и входных портов и лингвистических термов. Так, первому выходному порту верхнего блока «Демультиплексор» будет соответствовать лингвистический терм «отрицательная», а первому входному порту блока «Мультиплексор» – терм «закрывать быстро».

Рисунок 19. Рабочая область субмодели с подписью «Нечеткий регулятор» с заданными подписями к блокам.

Требуется изменить количество выходных и входных портов блоков «Демультиплексор» и «Мультиплексор» в соответствии с количеством термов, указанных в подписях к блокам. Для этого необходимо открыть окно «Свойства» одного из блоков «Демультиплексор» и задать значение свойства согласно рисунку (Рисунок 20). Блок «Демультиплексор» предназначен для разделения векторного входного сигнала на три отдельных выходных сигнала.

Рисунок 20. Окно «Свойства» блока «Демультиплексор».

После закрытия окна и сохранения свойств, появится третий выходной порт блока «Демультиплексор». Необходимо повторить действие для второго блока «Демультиплексор».

Для изменения количества входных портов блока «Мультиплексор» необходимо открыть окно «Свойства» блока «Мультиплексор» и задать значение свойства «Количество портов» равным «5» (Рисунок 21). Блок «Мультиплексор» предназначен для поочередной передачи на один выходной порт пяти входных сигналов.

Рисунок 21. Окно «Свойства» блока «Мультиплексор».

После закрытия окна и сохранения свойств, у блока «Мультиплексор» будет пять входных портов.

После подготовки блоков, необходимо соеденить блоки линиями связи в соответствии с заданной базой правил согласно рисунку (Рисунок 22):
  1. ЕСЛИ «разница уровней» = «отрицательная», ТО «команда клапана» = «открывать быстро»;
  2. ЕСЛИ«разница уровней» = «близкая к нулю», TO «команда клапана» = «не изменять»;
  3. ЕСЛИ «разница уровней» = «положительная», TO «команда клапана» = «закрывать быстро»;
  4. ЕСЛИ «разница уровней» = «близкая к нулю» И «скорость изменения уровня» = «уменьшается», ТО «команда клапана» = «открывать медленно»;
  5. ЕСЛИ «разница уровней» = «близкая к нулю» И «скорость изменения уровня» = «увеличивается», ТО «команда клапана» = «закрывать медленно».

Рисунок 22. Рабочая область субмодели с подписью «Нечеткий регулятор» с блоками, соединенными линиями связи.

Теперь схема соответствует заданной базе правил.

После соединения блоков необходимо задать свойства, определяющие функции принадлежности нечетких множеств, соответствующих входным и выходным переменным, то есть задать свойства фазификаторов и дефазификатора. Для этого необходимо открыть окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса» с подписью «Разница уровней» и задать значения свойств согласно рисунку (Рисунок 23).

Рисунок 23. Окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса» с подписью «Разница уровней».

Далее необходимо открыть окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса» с подписью «Скорость изменения уровня» и задать значения свойств согласно рисунку (Рисунок 24).

Рисунок 24. Окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса» с подписью «Скорость изменения уровня».

После этого необходимо открыть окно «Свойства» блока «НЛ – Нечеткий вывод – Треугольная функция» и задать значения свойств согласно рисунку (Рисунок 25).

Рисунок 25. Окно «Свойства» блока «НЛ – Нечеткий вывод – Треугольная функция».

После завершения настройки схемы модели нечеткого регулятора необходимо выйти из субмодели и изменить размер блока с подписью «Нечеткий регулятор» согласно рисунку (Рисунок 26).

Рисунок 26. Окно проекта с увеличенным блоком «Субмодель» с подписью «Нечеткий регулятор».

Объединение моделей в систему управления негерметичным баком на базе нечеткой логики

Разработка модели

После создания моделей негерметичного бака, клапана и нечеткого регулятора необходимо связать субмодели в общую модель системы управления уровнем в негерметичном баке для проведения моделирования и построения графиков зависимости уровня воды в баке и расхода обратного тока от времени. Для этого необходимо добавить в рабочую область окна проекта следующие блоки:
  • 1 блок «Меандр» из вкладки «Источники» – данный блок позволяет задавать целевой уровень воды с определенной периодичностью;
  • 1 блок «Константа» из вкладки «Источники» – данный блок позволяет задать номинальный расход воды, поступающий в бак;
  • 1 блок «Сравнивающее устройство» из вкладки «Операторы» – данный блок предназначен для вычисления разницы между фактическим и целевым уровнем воды в баке;
  • 2 блока «Временной график» из вкладки «Вывод данных» – данные блоки выводят значения результатов моделирования в виде графиков.
Расположить блоки на схеме и задать подписи согласно рисунку (Рисунок 27).

Рисунок 27. Окно проекта с установленными блоками и заданными подписями.

Так как требуется построить графики не только фактического уровня воды, но и целевого, и сравнить их, необходимо чтобы эти графики были построены в одном окне. Для этого требуется изменить количество входных портов блока «Временной график» с подписью «Графики уровня воды в баке». Необходимо открыть окно «Свойства» блока «Временной график» и задать значение свойства «Количество входных портов» равным «2» (Рисунок 28).

Рисунок 28. Окно «Свойства» блока «Временной график» с подписью «Графики уровня воды в баке».

После закрытия окна и сохранения свойств количество входных портов блока станет равным двум.

Соединить блоки линиями связи согласно рисунку (Рисунок 29).

Рисунок 29. Окно проекта с соединенными блоками.

Для формирования целевого уровня необходимо открыть окно «Свойства» блока «Меандр» и задать значения свойств согласно рисунку (Рисунок 30). Данный блок генерирует периодический прямоугольный импульсный сигнал с амплитудой 1 и полупериодом 20 секунд.

Рисунок 30. Окно «Свойства» блока «Меандр».

Далее необходимо задать номинальный расход воды, поступающий в бак. Для этого необходимо открыть окно «Свойства» блока «Константа» и задать значение свойства «Значение» согласно рисунку (Рисунок 31).

Рисунок 31. Окно «Свойства» блока «Константа».

Настройка параметров расчета

После настройки схемы, перед началом моделирования, необходимо настроить параметры расчета. Так как полупериод изменения целевого уровня был задан равным «20», то для моделирования и построения графиков на протяжении нескольких периодов требуется изменить параметры расчета проекта, увеличив длительность интервала модельного времени, при котором выполняется моделирование, а для ускорения расчета требуется увеличить максимальный шаг интегрирования. Для этого необходимо открыть окно «Параметры проекта» и во вкладке «Параметры расчета» в поле «Значение» задать значения параметров «Максимальный шаг» и «Конечное время расчета» согласно рисунку (Рисунок 32).

Рисунок 32. Окно «Параметры проекта» с выделенными параметрами, которые необходимо изменить.

Закрыть окно «Параметры расчета», при этом внесенные изменения сохраняются.

Запуск моделирования и построение графиков

После настройки проекта для построения графиков необходимо запустить процесс моделирования и дождаться окончания расчета.

После этого необходимо изменить оформление окон, в которых отображаются графики. Требуется задать название графиков и осей. Для этого:
  1. Открыть окно «Свойства графика» блока «Временной график» с подписью «Графики уровня воды в баке» и на вкладке «График и оси» в поле «Название графика» задать значение первому графику «График целевого уровня воды», второму графику «График фактического уровня воды», в колонке «Ось Y» задать значение свойства «Название оси» равным «Уровень h, м» (Рисунок 33).

    Рисунок 33. Окно «Свойства графика» блока «Временной график» с подписью «Графики уровня воды в баке» с выделенными свойствами, которые необходимо изменить.

  2. На вкладке «Общие» ввести в поле «Заголовок» название графика «Графики уровня воды в баке» (Рисунок 34).

    Рисунок 34. Окно «Свойства графика» блока «Временной график» с подписью «Графики уровня воды в баке», вкладка «Общие».

Для сохранения изменений и закрытия окна необходимо нажать кнопку «Ok». График должен выглядеть согласно рисунку (Рисунок 35).

Рисунок 35. Графики целевого и фактического уровня воды в баке.

График целевого уровня воды действительно представляет собой импульсы с полупериодом 20 секунд, значения которых изменятся с 1.5 м до 0.5 м и обратно. График фактического уровня воды достаточно плавно стремится к графику целевого уровня. В результате анализа полученных графиков установлено, что модель работает корректно.

После этого необходимо оформить окно, в котором построен график расхода обратного тока. Для этого:
  1. Открыть окно «Свойства графика» блока «Временной график» с подписью «График расхода обратного тока» и задать на вкладке «Графики и оси» название оси Y согласно рисунку (Рисунок 36).

    Рисунок 36. Окно «Свойства графика» блока «Временной график» с подписью «График расхода обратного тока» с выделенным свойством, которое необходимо изменить.

  2. На вкладке «Общие» в поле «Заголовок» изменить название графика на «График расхода обратного тока» и отключить свойство «Показывать легенду» (Рисунок 37).

    Рисунок 37. Окно «Свойства графика» блока «Временной график» с подписью «График расхода обратного тока», вкладка «Общие», с выделенным свойством, которое необходимо изменить.

Сохранить изменения и закрыть окно нажатием кнопки «Ok».

График должен выглядеть согласно рисунку (Рисунок 38).

Рисунок 38. График расхода обратного тока.

В результате анализа полученного графика установлено, что график полностью соответствует ожидаемым результатам: переменная «outrate» в момент времени 20 секунд приближенно равна «0.271», что согласуется с теоретическим значением, рассчитанным по формуле для значения уровня воды в тот же момент времени, равного «1.5 м»:

Преобразование нечеткого регулятора во внешнюю динамическую библиотеку «DLL» с использованием генерации кода Си

SimInTech позволяет преобразовывать расчетные схемы моделей алгоритмов управления во внешние динамические библиотеки «DLL» с использованием автоматической генерации кода Си. Использование динамических библиотек «DLL» вместо исходных схем моделей алгоритмов управления позволяет существенно увеличить скорость расчета и проводить проверку работоспособности данных алгоритмов в качестве бортовых алгоритмов управления. Данный раздел посвящен преобразованию алгоритма управления клапаном – нечеткого регулятора – в программный код на языке Си и его компиляции в «DLL» с помощью встроенного шаблона, настроенного для создания «DLL»-библиотек под Windows «MinGW».

Внимание: для дальнейшей работы необходимо иметь ключ генерации кода и пакет компиляторов MinGW, который находится на сайте разработчика.

Перед преобразованием нечеткого регулятора во внешнюю динамическую библиотеку «DLL» необходимо сохранить модель нечеткого регулятора в отдельный файл. Для этого двойным нажатием левой кнопкой мыши по блоку «Субмодель» с подписью «Нечеткий регулятор» войти в субмодель, затем в главном окне SimInTech необходимо выбрать пункт «Файл» подпункт «Сохранить страницу как…». Сохранить модель нечеткого регулятора в файле нового проекта под именем «FL_controller.prt».

После этого требуется подготовить схему модели нечеткого регулятора для генерации кода. Для этого необходимо открыть проект «FL_controller.prt» и заменить блоки «Порт входа» и «Порт выхода» соответственно на блоки «Входной контакт» и «Выходной контакт» из вкладки «Сигналы». В свойствах блоков «Порт входа» в поле «Значение» задать значение свойства «Имя контакта» равными: «input:0», «input:1» соответственно (Рисунок 39).

Рисунок 39. Окно проекта «FL_controller.prt».

В свойствах блока «Порт выхода» в поле «Значение» необходимо выбрать свойство «Тип контакта» согласно рисунку (Рисунок 40).

Рисунок 40. Окно «Свойства» блока «Порт выхода».

После настройки схемы, перед кодогенерацией, требуется настроить параметры расчета и параметры кодогенератора. Для этого необходимо открыть окно «Параметры проекта» и во вкладке «Параметры расчета» в группе «Генерация кода» в параметре «Имя (имена) алгоритма» в поле «Значение» ввести «fuzzy_control» (Рисунок 41). Сохранить проект.

Рисунок 41. Окно «Параметры проекта».

После настройки параметров проекта необходимо произвести настройку кодогенератора. Для этого в главном окне SimInTech необходимо выбрать пункт «Кодогенератор» подпункт «Кодогенератор Си». В открывшемся окне «Кодогенератор Си» во вкладке «Настройки» в строке «Директория исходников» указать «.\src» для сохранения исходных файлов программы, получаемых в результате работы кодогенератора, в директорию «src», в строке «Директория шаблона кода» указать путь «%codetemplates%MinGW_DLL\». Данный шаблон позволяет генерировать код Си и динамическую библиотеку для расчетов с использованием плавающей точки. Вместе с тем допускается использование и других, встроенных в SimInTech, шаблонов (Рисунок 42).

Рисунок 42. Окно настройки «Кодогенератор Си».

В частности, например, для получения кода, выполняющего вычисления с фиксированной точкой, необходимо во вкладке «Настройки» в строке «Директории шаблона кода» выбрать в выпадающем меню строку: «%codetemplates%FixPoint_16_16_MinGW_DLL\».

Далее для генерации кода необходимо в главном окне SimInTech выбрать пункт «Инструменты» подпункт «Сгенерировать программу», в результате чего в директории с исходным проектом будет создана новая директория «src», в которой кодогенератор создаст новые файлы, содержащие исходные коды Си, созданные на основе схемы (Рисунок 43):
  • <имя алгоритма>.h;
  • <имя алгоритма>.inc;
  • <имя алгоритма>.log;
  • <имя алгоритма>_init.inc;
  • <имя алгоритма>_state.inc;
  • <имя алгоритма>.dll

    Рисунок 43. Рабочая область проекта с сообщениями генератора кода для схемы.

Исследование работы системы управления негерметичным баком с нечетким регулятором в виде «DLL»

Для исследования работы системы управления негерметичным баком с нечетким регулятором в виде «DLL» необходимо сохранить копию проекта с исходной моделью системы «Схема модели общего вида.prt» под именем «Схема модели общего вида_1.prt». Открыть проект «Схема модели общего вида_1.prt».

Далее необходимо поместить в рабочую область окна проекта блок «Внешняя DLL» из вкладки «Внешние модели». Открыть окно «Свойства» блока «Внешняя DLL» и в поле «Значение» задать значения следующих свойств согласно рисунку (Рисунок 44):
  • «Количество портов» – с помощью данного свойства задается количество входных портов блока в соответствии с количеством входных контактов в расчетной схеме нечеткого регулятора «FL_controller.prt».
  • «Массив размерностей выходов» – с помощью данного свойства задаются размерности выходных портов в виде массива, причем размерность массива соответствует количеству выходных контактов в расчетной схеме нечеткого регулятора. После закрытия окна и сохранения свойств у блока «Внешняя DLL» появятся два входных порта и один выходной порт.
  • «Имена загружаемых DLL» – с помощью данного свойства задается путь к сгенерированному на предыдущем шаге файлу с расширением «.dll».
  • «Имена файлов проектов для отладки» – с помощью данного свойства задается имя файла проекта с расчетной схемой нечеткого регулятора, соответствующей загружаемой «DLL», который возможно использовать для отладки схемы. Для наблюдения за процессом моделирования нечеткого регулятора необходимо установить синхронизацию с реальным временем, для этого открыть окно «Параметры проекта» и во вкладке «Синхронизация» активировать параметр «Синхронизировать с реальным временем», и после запуска моделирования совершить двойное нажатие левой кнопкой мыши по блоку «Внешняя DLL», после чего откроется проект, указанный в значении данного свойства.
Остальные свойства блока заданы по умолчанию. При необходимости возможно изменение значений этих свойств:
  • «Тип сортировки» – с помощью данного свойства задается флаг, определяющий порядок расчета блока в общей схеме.
  • «Имена оборудования» – с помощью данного свойства задаются имена оборудования (компонентов), которые подставляются во входные/выходные контакты схемы «DLL».
  • «Создавать по умолчанию не существующие переменные» – при активировании данного свойства будут создаваться переменные в базе данных, которых не существует для рассчитываемого оборудования (компонентов).
  • «Выдавать предупреждения если сигнал не найден» – при активировании данного свойства будут выдаваться предупреждения, если сигнал не найден.
  • «Количество потоков» – с помощью данного свойства задается количество потоков, в которых будут производиться расчеты по данной «DLL».

Рисунок 44. Окно «Свойства» блока «Внешняя DLL».

После подготовки блока «Внешняя DLL» необходимо заменить блок «Субмодель» с подписью «Нечеткий регулятор» на блок «Внешняя DLL» согласно рисунку (Рисунок 45).

Рисунок 45. Рабочая область проекта с замененным блоком «Субмодель» с подписью «Нечеткий регулятор» на блок «Внешняя DLL».

После настройки проекта для построения графиков необходимо запустить процесс моделирования и дождаться окончания расчета. Графики должны выглядеть согласно рисункам (Рисунок 46, Рисунок 47). Результаты работы модели соответствуют ранее полученным результатам (Рисунок 35, Рисунок 38), что подтверждает работоспособность «DLL»-библиотеки нечеткого регулятора в составе системы.

Рисунок 46. Графики целевого и фактического уровня воды в баке.

Рисунок 47. График расхода обратного тока.

Заключение

В ходе данной лабораторной работы была разработана модель системы управления негерметичным баком с регулятором, основанным на системе нечеткого вывода типа Мамдани. Были построены графики зависимости уровня воды в баке от времени и расхода обратного тока от времени, а также произведено сравнение графиков целевого и фактического уровня воды в баке. В результате математического моделирования была проверена корректность работы модели системы управления негерметичным баком на базе нечеткой логики.

Для знакомства с приемами работы генератора кода Си было проведено преобразование нечеткого регулятора во внешнюю динамическую библиотеку «DLL». Контрольное моделирование показало, что нечеткий регулятор в виде динамической библиотеки «DLL», сгенерированной на языке Си, работает аналогично нечеткому регулятору в субмодели.