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

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

Введение

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

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

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

В данной лабораторной работе на первом этапе будет проведено исследование работы анимированных блоков на примере блоков библиотеки «Нечеткая логика». На втором этапе будет разработана модель системы управления на базе нечеткой логики для поддержания заданного уровня воды в негерметичном баке. На третьем этапе нечеткий регулятор будет преобразован в вид динамической библиотеки «DLL» с использованием автоматической генерации кода.

Цель работы:

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

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

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

Нечеткая логика — это принцип построения алгоритмов управления на базе системы логических правил, аналогичных классической логике. При данном подходе управляющие воздействие рассчитывается на основе набора правил вида:
  1. ЕСЛИ «входной параметр» = «A», ТО «управляющее воздействие» = «B»;
  2. ЕСЛИ «входной параметр 1» = «А1» И/ИЛИ «входной параметр 2» = «A2», ТО «управляющее воздействие» = «B»;
где «A», «А1», «A2» и «B» – значения, которые могут принимать входные параметры и управляющее воздействие соответственно.
Например, для регулирования температуры воды в смесителе набор правил может быть представлен в следующем виде:
  1. ЕСЛИ «температура воды» = «горячая», ТО «команда» = «открыть кран холодной воды»;
  2. ЕСЛИ «температура воды» = «холодная», ТО «команда» = «открыть кран горячей воды»;
  3. ЕСЛИ «температура воды» = «холодная» И «кран горячей воды» = «открыт полностью», ТО «команда» = «закрыть кран холодной воды»;
  4. ЕСЛИ «температура воды» = «горячая» И «кран холодной воды» = «открыт полностью», ТО «команда» = «закрыть кран горячей воды».
Или, например, для регулирования уровня воды в баке с помощью клапана набор правил может иметь вид:
  1. ЕСЛИ «уровень» = «высокий», TO «команда клапана» = «закрывать быстро»;
  2. ЕСЛИ «уровень» = «нормальный», TO «команда клапана» = «не изменять»;
  3. ЕСЛИ «уровень» = «низкий», ТО «команда клапана» = «открывать быстро»;
  4. ЕСЛИ «уровень» = «нормальный» И «скорость изменения уровня» = «уменьшается», ТО «команда клапана» = «открывать медленно»;
  5. ЕСЛИ «уровень» = «нормальный» И «скорость изменения уровня» = «увеличивается», ТО «команда клапана» = «закрывать медленно».

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

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

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

Каждый терм определяется своей функцией принадлежности μi(x), которая может принимать значения от 0 до 1. Для каждого значения входной переменной x вычисляются значения μi(x) для каждого терма. Эта процедура преобразования точного множества входных величин в нечеткое множество, определяемое с помощью значений функций принадлежности μi(x), называется фазификацией.

После проведения фазификации применяется набор правил. Результатом применения правила является величина, называемая степенью истинности, принимающая значение от 0 до 1. Например, пусть для следующего правила:

входная величина, обозначающая уровень, h, задана в метрах. Если значение уровня является низким (μlow(h) = 1, где μlow(h) – функция принадлежности для терма «низкий»), или уровень не низкий (μlow(h) = 0), то степень истинности правила принимает значение 1 или 0, аналогично классической логике. Нечеткая логика применяется в случае, если функция принадлежности принимает значение от 0 до 1, то есть если 0 < μlow(h) < 1. Так, μlow(h) = 0.5 означает, что уровень не низкий и не высокий, соответственно скорость открытия клапана должна быть между быстрой и медленной. В данном правиле степень истинности заключения «открывать быстро» равна 0.5.

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

Заключения из каждого правила объединяются для каждой лингвистической переменной. Этот процесс называется аккумуляцией. Например, в результате нечеткого логического вывода получены следующие значения степеней истинности для лингвистической переменной «команда клапана»:
  • μоткрывать быстро = 0.5,
  • μоткрывать медленно = 0.3,
  • μне изменять = 0,
  • μзакрывать быстро = 0,
  • μзакрывать медленно = 0.

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

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

Таким образом, в общем случае система нечеткого логического вывода включает следующие этапы:
  1. Приведение к нечеткости, или фазификация.
  2. Нечеткий логический вывод: агрегация и активизация.
  3. Аккумуляция.
  4. Приведение к четкости, или дефазификация.
Описанная система нечеткого вывода называется системой типа Мамдани, ее структура представлена на рисунке (Рисунок 1).

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

Задание 1. Исследование работы анимированных блоков

Содержание задания

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

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

Для разработки системы нечеткого вывода необходимо построить нечеткий логический вывод в соответствии с заданным набором правил. Так как в правилах заданы простые условия – нет сложных логических конструкций вида «условие 1» И/ИЛИ «условие 2», то такие нечеткие правила представляются с помощью операции импликации вида Y = X * w, где w – весовой коэффициент, равный в данном случае 1. Соответственно, Y = X, то есть операцию импликации можно опустить и сразу проводить аккумуляцию и дефазификацию.

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

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

Для создания нового проекта необходимо:
  1. В главном окне SimInTech нажать левой кнопкой мыши на кнопку «Файл» и выбрать пункт «Новый проект».
  2. В выпадающем меню выбрать пункт «Схема модели общего вида».
  3. Сохранить проект, оставив имя по умолчанию или указать желаемое имя проекта.
Для разработки модели фазификации необходимо добавить в рабочую область окна проекта следующие блоки:
  • 1 блок «Линейный источник» из вкладки «Источники» – с помощью данного блока будут формироваться значения входной переменной x;
  • 1 блок «Размножитель» из вкладки «Векторные» – с помощью данного блока скалярный сигнал будет преобразован в вектор необходимой размерности;
  • 1 блок «Фазификация Гаусса» из подменю «Фазификация» вкладки «Нечеткая логика» – с помощью данного блока будут вычисляться значения функций принадлежности входной переменной x для каждого терма;
  • 1 блок «Фазовый портрет» из вкладки «Вывод данных» – с помощью данного блока будет производиться графическое отображение результатов работы фазификации Гаусса.
Разместить блоки на схеме и соединить линиями связи согласно рисунку (Рисунок 2).

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

После этого необходимо задать свойства блокам на схеме. Значение входной переменной должно изменять от -1 до 1. Необходимо открыть окно «Свойства» блока «Линейный источник» и задать значения свойств согласно рисунку (Рисунок 3).

Рисунок 3. Окно «Свойства» блока «Линейный источник».

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

Рисунок 4. Окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса».

Свойство «S-функции на границах» необходимо для проверки выхода входной величины за границу диапазона, так как за границами диапазона функция Гаусса убывает, а следовательно значение функции принадлежности уменьшается, что не всегда допустимо. Например, если температура воды достигнет 100°C, то это должно означать, что вода горячая и необходимо открыть кран холодной воды, но если проверка на выход из диапазона не осуществляется, то в данной точке функция Гаусса может иметь значение равное 0, что будет интерпретироваться как температура воды не является горячей, и впоследствии может привести к неправильным результатам.

Для того, чтобы построить сразу три графика функций принадлежности на одной плоскости, на входы блока «Фазовый портрет» должны подаваться три пары фазовых переменных, то есть две векторные величины, размерностью «3». Для этого необходимо преобразовать скалярный входной сигнал в вектор, состоящий из трех одинаковых элементов, равных входному сигналу, с помощью блока «Размножитель». Для этого необходимо открыть окно «Свойства» блока «Размножитель» и в поле «Формула» задать значение свойства «Коэффициент размножения» равным «3#1».

Перед началом моделирования необходимо открыть окно «Параметры проекта» и на вкладке «Параметры расчета» задать значение параметра «Максимальный шаг» равным «0.1» и значение параметра «Конечное время расчета» равным «20».

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

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

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

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

  2. На вкладке «Общие» в поле «Заголовок» изменить название графика на «Уровень».

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

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

Рисунок 6. Графики результатов фазификации Гаусса.

Получены графики гауссовых функций принадлежности, которые показывают, как линейное изменение входной переменной от -1 до 1 приводит к изменению значений трех термов в диапазоне от 0 до 1. В начале, когда входная величина равна -1, терм «низкий» имеет функцию принадлежности равную 1, функции принадлежности термов «нормальный» и «высокий» равны нулю. По мере роста входной величины, значение функции принадлежности терма «низкий» уменьшается, а терма «нормальный» начинает расти: чем ближе к 0, тем ближе значение функции к 1. При приближении входной величины к 1 функция принадлежности терма «высокий» приближается к 1, а термов «низкий» и «нормальный» стремятся к 0. Таким образом, увеличение входной величины от -1 до 1 представлено в виде наглядного процесса перехода от «низкий», через «нормальный», к «высокий».

Помимо фазификации Гаусса возможно использовать блоки треугольной и трапециевидной фазификации или, если функции принадлежности нельзя представить с помощью этих стандартных функций, есть возможность задать пользовательские функции с помощью языка программирования. Пример реализации двусторонней функции принадлежности Гаусса с помощью блока «Язык программирования» приведен в Лабораторной работе №1 Московского Политеха «Исследование функций принадлежности нечетких множеств» в разделе «Задание 4. Построение графика двусторонней функции принадлежности Гаусса».

Исследование работы анимированного блока «Фазификация Гаусса»

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

Рисунок 7. Рабочая область окна проекта при инициализации.

После этого для отслеживания изменений изображения на координатном пространстве над блоком возможно совершать шаги с помощью кнопки «Сделать шаг», либо, запустив процесс моделирования нажатием кнопки «Пуск», ставить расчет на паузу с мощью кнопки «Пауза» в необходимый момент времени, а затем возобновлять расчет нажатием кнопки «Пуск». С увеличением времени изменяется изображение: по мере увеличения или уменьшения значения функции принадлежности каждого из термов, высота синих вертикальных линий, соответствующих термам, увеличивается или уменьшается соответственно. Например, в момент времени 13.8 секунд, значение функции принадлежности для второго терма («нормальный») приблизительно равно 0.5, а терма «высокий» близко к нулю, согласно рисунку (Рисунок 8).

Рисунок 8. Рабочая область окна проекта, поставленного на паузу в момент времени 13.8 секунд, с измененным изображением над блоком «НЛ – Фазификация – Фазификация Гаусса».

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

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

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

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

Рисунок 10. Окно «Скрипт анимации» с выделенной строчкой, которую необходимо изменить.

Необходимо проверить корректность отображения линий после изменения скрипта. Запустить проект на расчет, нажатием на кнопку «Пуск». Изображение над блоком «НЛ – Фазификация – Фазификация Гаусса» изменится – отображаемые линии уровня окрасятся в зеленый цвет (Рисунок 11).

Рисунок 11. Рабочая область окна проекта с измененным цветом линий уровня.

Дополнение модели и исследование работы анимированного блока «Треугольная функция»

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

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

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

Захватить край блока одинарным нажатием левой кнопкой мыши и потянуть в сторону для изменения размера блока «НЛ – Нечеткий вывод – Треугольная функция» согласно рисунку (Рисунок 13).

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

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

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

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

Рисунок 15. Рабочая область инициализированного проекта.

Далее возможно отслеживать как изменяются фигуры и положение линии либо установив синхронизацию с реальным временем, либо выполняя расчет пошагово, как было показано выше.

Например, в момент времени 5.1 секунды (Рисунок 16) значения, полученные в результате аккумуляции, отображаются в виде треугольников, заполненных приблизительно на четверть высоты, а значение выходного сигнала (красная линия) находится между ними, что можно интерпретировать как положение клапана необходимо изменять, при этом скорость закрытия клапана должна быть не быстрой.

Рисунок 16. Рабочая область проекта с изменившемся графическим изображением блока «НЛ – Нечеткий вывод – Треугольная функция» в момент времени 5.1 секунды.

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

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

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

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

Рисунок 18. Рабочая область проекта с измененным цветом графического изображения блока «НЛ – Нечеткий вывод – Треугольная функция» в момент времени 5.1 секунды.

В данном задании была рассмотрена анимация блоков на примере блоков библиотеки «Нечеткая логика». Помимо использования стандартных блоков в SimInTech возможно создание собственных блоков и их также возможно сделать анимированными. Пример создания пользовательского анимационного блока и процедура добавления его в новую библиотеку описан в Лабораторной работе №3 SimInTech «Разработка анимационного блока в SimInTech» (раздел «Разработка библиотеки блоков»).

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

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

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

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

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

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

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

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

Уравнения динамики негерметичного бака:
где g = 9.81 м/с2 – ускорение свободного падения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выполнение задания

Содержание задания

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

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

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

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

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

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

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

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

Далее необходимо реализовать модель наполнения бака водой и утечки воды из бака. Заполненный объем бака будет определяться с помощью блока «Интегратор с ограничением». Необходимо открыть окно «Свойства» блока «Интегратор с ограничением» и задать формулы свойствам согласно рисунку (Рисунок 23).

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

Для задания формулы расчета уровня воды необходимо открыть окно «Свойства» блока «Усилитель» с подписью «Уровень в баке» и задать в поле «Формула» свойства «Коэффициент усиления» равным «1/area».

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

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

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

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

Создание модели бака завершено, далее необходимо выйти из субмодели двойным нажатием левой кнопки мыши по свободному пространству рабочей области субмодели.

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

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

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

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

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

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

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

Для блоков «Демультиплексор» необходимо задать значение свойства «Массив размерностей входов» равными «[1, 1, 1]» и для блока «Мультиплексор» задать значение свойства «Количество портов» равным «5».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Расположить блоки на схеме, соединить линиями связи и задать подписи согласно рисунку (Рисунок 32).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Задание 3. Преобразование системы управления негерметичным баком в систему с нечетким регулятором в виде «DLL»

Содержание задания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для наблюдения за процессом моделирования нечеткого регулятора необходимо установить синхронизацию с реальным временем. После запуска моделирования необходимо совершить двойное нажатие левой кнопкой мыши по блоку «Внешняя DLL», в результате чего откроется проект, указанный в значении свойства «Имена файлов проектов для отладки» блока «Внешняя DLL», который содержит расчетную схему нечеткого регулятора, соответствующую загруженной «DLL». При этом на вызываемой схеме, аналогично обычной схеме, отображается анимация блоков, возможен просмотр значений на линиях связи посредством двойного нажатия левой кнопкой мыши на необходимую линию связи (Рисунок 49). Если имена файлов не заданы, то просмотр схемы таким способом невозможен.

Рисунок 49. Окно проекта «FL_controller.prt», открытого из блока «Внешняя DLL» в процессе моделирования системы управления, с открытым окном просмотра значения на линии связи.

Для сравнения скорости расчета с регулятором в виде схемы в субмодели и в виде скомпилированного кода необходимо в текущем проекте отключить параметр «Синхронизировать с реальным временем». После чего необходимо запустить процесс моделирования и дождаться окончания расчета. В главном окне SimInTech выбрать пункт «Расчет» подпункт «Отладочная информация…» (Рисунок 50).

Рисунок 50. Главное окно SimInTech c выделенным пунктом «Отладочная информация…».

В открывшемся окне «Отладочная информация SimInTech» во вкладке «Производительность» в строке «Максимально возможное ускорение» отображается во сколько раз быстрее реального времени был произведен расчет (Рисунок 51).

Рисунок 51. Окно «Отладочная информация SimInTech» с выделенной строкой «Максимально возможное ускорение» для системы с регулятором в виде «DLL».

После этого необходимо открыть проект «Схема модели общего вида.prt», созданный в предыдущем задании, и запустить его на расчет. После окончания расчета открыть окно «Отладочная информация SimInTech» (Рисунок 52). Значение в строке «Максимально возможное ускорение» практически в 3.5 раза меньше значение ускорения, полученного для системы с регулятором в виде «DLL», то есть расчет производится медленнее, что подтверждает эффективность использования динамических библиотек для ускорения расчета.

Рисунок 52. Окно «Отладочная информация SimInTech» с выделенной строкой «Максимально возможное ускорение» для системы с регулятором в виде схемы.

Заключение

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

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