Лабораторная работа №8 по курсу «Управление в технических системах»
Среда динамического моделирования технических систем SimInTech является инструментом для создания математических моделей любых систем, описание которых может быть представлено в виде систем алгебраических и обыкновенных дифференциальных уравнений.
Для упрощения процесса моделирования сложных разветвленных систем SimInTech позволяет использовать графическую анимацию блоков, которые в зависимости от рассчитанных параметров изменяют свое графическое отображение.
Для увеличения скорости расчета и проверки работоспособности разработанных алгоритмов в качестве бортовых алгоритмов управления SimInTech позволяет преобразовывать расчетные схемы моделей алгоритмов управления во внешние динамические библиотеки «DLL» с использованием автоматической генерации кода Си и использовать эти «DLL» вместо исходных схем моделей алгоритмов управления.
В данной лабораторной работе на первом этапе будет проведено исследование работы анимированных блоков на примере блоков библиотеки «Нечеткая логика». На втором этапе будет разработана модель системы управления на базе нечеткой логики для поддержания заданного уровня воды в негерметичном баке. На третьем этапе нечеткий регулятор будет преобразован в вид динамической библиотеки «DLL» с использованием автоматической генерации кода.
В классической теории автоматического управления управляющее воздействие на систему рассчитывается в зависимости от регулируемой величины, выраженной в численном виде, и система управления производит преобразование входных параметров в управляющие воздействия передаточными функциями.
В данных примерах управляющее воздействие определяется не в численном виде в зависимости от численного значения температуры воды или значения уровня воды в баке, а в виде логического анализа утверждений.
Для построения алгоритмов управления на базе нечеткой логики данные, передаваемые в блок регулирования, основанного на нечеткой логике, должны быть преобразованы. Для этого необходимо входные параметры и выходные воздействия преобразовать в лингвистические переменные. Каждая лингвистическая переменная характеризуется набором термов.
Например, лингвистическая переменная «температура воды» может иметь следующие термы: «холодная», «нормальная», «горячая»; лингвистическая переменная «уровень» – термы: «низкий», «нормальный», «высокий»; а лингвистическая переменная «команда клапана» – «открывать быстро», «открывать медленно», «не изменять», «закрывать быстро», «закрывать медленно».
Каждый терм определяется своей функцией принадлежности μ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.Подобным образом вычисляется степень истинности для каждого правила. Если в правиле несколько условий, соединенных логической операцией, вычисляется степень истинности всех условий. Эта процедура называется агрегацией. Вычисленное значение истинности для всех условий каждого правила применяется к заключениям каждого правила. Этот процесс называется активизацией. Агрегация и активизация образуют нечеткий логический вывод.
Из этого следует, что скорость открытия клапана должна быть между быстрой и медленной.
По полученным степеням истинности для каждого терма выходной переменной рассчитывается ее числовое значение. Эта процедура называется дефазификацией.
Рисунок 1. Структура нечеткой системы с фазификатором и дефазификатором.
Для фазификации и дефазификации необходимо задать функции принадлежности для каждого терма. Пусть уровень воды в баке определяется как расстояние от датчика уровня, расположенного на уровне, который определен как нормальный, до текущего уровня воды с соответствующим знаком: если значение близко к -1, то уровень определяется как «низкий», близко к 0 – «нормальный», близко к 1 – «высокий». Функции принадлежности этих термов будут задаваться как функции принадлежности Гаусса. Пусть команда клапана определяется как скорость открытия/закрытия клапана с соответствующим знаком: если значение близко к -1, то команда определяется как «закрывать быстро», 0 – «не изменять», 1 – «открывать быстро». Функции принадлежности этих термов будут задаваться как треугольные.
Для разработки системы нечеткого вывода необходимо построить нечеткий логический вывод в соответствии с заданным набором правил. Так как в правилах заданы простые условия – нет сложных логических конструкций вида «условие 1» И/ИЛИ «условие 2», то такие нечеткие правила представляются с помощью операции импликации вида Y = X * w, где w – весовой коэффициент, равный в данном случае 1. Соответственно, Y = X, то есть операцию импликации можно опустить и сразу проводить аккумуляцию и дефазификацию.
Рисунок 2. Схема проекта с установленными и соединенными блоками.
Рисунок 3. Окно «Свойства» блока «Линейный источник».
Рисунок 4. Окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса».
Свойство «S-функции на границах» необходимо для проверки выхода входной величины за границу диапазона, так как за границами диапазона функция Гаусса убывает, а следовательно значение функции принадлежности уменьшается, что не всегда допустимо. Например, если температура воды достигнет 100°C, то это должно означать, что вода горячая и необходимо открыть кран холодной воды, но если проверка на выход из диапазона не осуществляется, то в данной точке функция Гаусса может иметь значение равное 0, что будет интерпретироваться как температура воды не является горячей, и впоследствии может привести к неправильным результатам.
Для того, чтобы построить сразу три графика функций принадлежности на одной плоскости, на входы блока «Фазовый портрет» должны подаваться три пары фазовых переменных, то есть две векторные величины, размерностью «3». Для этого необходимо преобразовать скалярный входной сигнал в вектор, состоящий из трех одинаковых элементов, равных входному сигналу, с помощью блока «Размножитель». Для этого необходимо открыть окно «Свойства» блока «Размножитель» и в поле «Формула» задать значение свойства «Коэффициент размножения» равным «3#1».
Перед началом моделирования необходимо открыть окно «Параметры проекта» и на вкладке «Параметры расчета» задать значение параметра «Максимальный шаг» равным «0.1» и значение параметра «Конечное время расчета» равным «20».
После настройки схемы, для построения графиков результатов фазификации, необходимо запустить процесс моделирования и дождаться окончания расчета.
Рисунок 5. Окно «Свойства графика» блока «Фазовый портрет» с выделенными свойством, которое необходимо изменить.
Сохранить изменения и закрыть окно нажатием кнопки «Ok».
Рисунок 6. Графики результатов фазификации Гаусса.
Получены графики гауссовых функций принадлежности, которые показывают, как линейное изменение входной переменной от -1 до 1 приводит к изменению значений трех термов в диапазоне от 0 до 1. В начале, когда входная величина равна -1, терм «низкий» имеет функцию принадлежности равную 1, функции принадлежности термов «нормальный» и «высокий» равны нулю. По мере роста входной величины, значение функции принадлежности терма «низкий» уменьшается, а терма «нормальный» начинает расти: чем ближе к 0, тем ближе значение функции к 1. При приближении входной величины к 1 функция принадлежности терма «высокий» приближается к 1, а термов «низкий» и «нормальный» стремятся к 0. Таким образом, увеличение входной величины от -1 до 1 представлено в виде наглядного процесса перехода от «низкий», через «нормальный», к «высокий».
Помимо фазификации Гаусса возможно использовать блоки треугольной и трапециевидной фазификации или, если функции принадлежности нельзя представить с помощью этих стандартных функций, есть возможность задать пользовательские функции с помощью языка программирования. Пример реализации двусторонней функции принадлежности Гаусса с помощью блока «Язык программирования» приведен в Лабораторной работе №1 Московского Политеха «Исследование функций принадлежности нечетких множеств» в разделе «Задание 4. Построение графика двусторонней функции принадлежности Гаусса».
Рисунок 7. Рабочая область окна проекта при инициализации.
Рисунок 8. Рабочая область окна проекта, поставленного на паузу в момент времени 13.8 секунд, с измененным изображением над блоком «НЛ – Фазификация – Фазификация Гаусса».
Рисунок 9. Окно «Графический редактор» блока «НЛ – Фазификация – Фазификация Гаусса» с выделенной кнопкой «Скрипт».
В открывшемся окне «Скрипт анимации» содержится текст скрипта, выполняющего изменение изображения блока. Например, в скрипте анимации блока «НЛ – Фазификация – Фазификация Гаусса» рассчитываются координаты и задаются новые объекты для отображения – линии сетки координатного пространства, которые рисуются над блоком, а также линии, высота которых изменяется в зависимости от рассчитываемых в процессе моделирования значений функций принадлежности. С помощью изменения скрипта анимации возможно как изменить отображение уже существующих объектов изображения, например, цвет или положение, а также добавить новые объекты.
Рисунок 10. Окно «Скрипт анимации» с выделенной строчкой, которую необходимо изменить.
Рисунок 11. Рабочая область окна проекта с измененным цветом линий уровня.
Необходимо дополнить модель до системы нечеткого вывода путем добавления блока, выполняющего аккумуляцию и дефазификацию. Для этого необходимо в рабочую область окна проекта добавить блок «Треугольная функция» из подменю «Нечеткий вывод» библиотеки «Нечеткая логика» и соединить линией связи согласно рисунку (Рисунок 12).
Рисунок 12. Рабочая область проекта с выделенным блоком «НЛ – Нечеткий вывод – Треугольная функция».
Рисунок 13. Рабочая область проекта с измененным размером блока «НЛ – Нечеткий вывод – Треугольная функция».
Рисунок 14. Окно «Свойства» блока «НЛ – Нечеткий вывод – Треугольная функция».
Рисунок 15. Рабочая область инициализированного проекта.
Далее возможно отслеживать как изменяются фигуры и положение линии либо установив синхронизацию с реальным временем, либо выполняя расчет пошагово, как было показано выше.
Рисунок 16. Рабочая область проекта с изменившемся графическим изображением блока «НЛ – Нечеткий вывод – Треугольная функция» в момент времени 5.1 секунды.
Для просмотра и изменения текста скрипта анимации блока «НЛ – Нечеткий вывод – Треугольная функция» необходимо открыть окно «Скрипт анимации» аналогичными действиями, описанными ранее для блока «НЛ – Фазификация – Фазификация Гаусса».
Рисунок 17. Окно «Скрипт анимации» с выделенной строчкой, которую необходимо изменить.
Рисунок 18. Рабочая область проекта с измененным цветом графического изображения блока «НЛ – Нечеткий вывод – Треугольная функция» в момент времени 5.1 секунды.
В данном задании была рассмотрена анимация блоков на примере блоков библиотеки «Нечеткая логика». Помимо использования стандартных блоков в SimInTech возможно создание собственных блоков и их также возможно сделать анимированными. Пример создания пользовательского анимационного блока и процедура добавления его в новую библиотеку описан в Лабораторной работе №3 SimInTech «Разработка анимационного блока в SimInTech» (раздел «Разработка библиотеки блоков»).
Ознакомление с работой анимированных блоков завершено. Далее, с применением данных блоков, будет разработана модель системы управления негерметичным баком на основе нечеткой логики.
В данной лабораторной работе рассматривается модель системы управления негерметичным баком, которая должна поддерживать уровень воды в баке на заданном уровне.
Рисунок 19. Схематическое представление негерметичного бака.
На рисунке (Рисунок 19) приняты следующие обозначения: «V» – объем бака, м3; «ht» – высота бака, м; «area» – площадь сечения бака; «outarea» – площадь выходного отверстия; «overs» – положение сенсора переполнения от верхнего среза, м; «h» – уровень воды в баке, м; «rate» – расход, поступающий в бак, м3/с; «outrate» – расход утечки, м3/с.
Выходное значение – расход воды, поступающий в бак, «rate», рассчитывается как произведение номинального расхода на значение положения клапана.
Рисунок 20. Схематическое представление системы управления уровнем воды в баке.
Регулятор представляет собой систему нечеткого вывода, которая включает следующие компоненты: фазификатор, механизм вывода, дефазификатор.
Таким образом, если разница между фактическим и целевым уровнем воды в баке отрицательная, то есть фактический уровень ниже целевого, то необходимо увеличить расход воды, поступающей в бак; если разница положительная, то есть фактический уровень превышает целевой, то необходимо ограничить подачу воды в бак; если разница близкая к нулю, то есть фактический уровень соответствует целевому или отличается на малую величину, то изменять положение клапана не надо, но если при этом уровень воды изменяется с некоторой скоростью, то для определения скорости открытия/закрытия клапана необходимо учесть вторую переменную – «скорость изменения уровня».
Итак, если разница уровней близкая к нулю и скорость изменения уровня уменьшается, то необходимо медленно увеличивать поток поступающей в бак воды, а если скорость увеличивается, то необходимо медленно уменьшать поток воды, поступающей в бак.
Функции принадлежности, определяющие нечеткие множества для входных переменных будут задаваться как функции принадлежности Гаусса, для выходной переменной – как треугольные функции принадлежности.
Разработка моделей негерметичного бака, клапана и нечеткого регулятора будет производиться в отдельных субмоделях для удобства организации блоков по моделям. После разработки всех моделей они будут объединены в общую модель системы управления.
Рисунок 21. Рабочая область субмодели со структурной схемой модели негерметичного бака.
Рисунок 22. Окно «Скрипт страницы».
Рисунок 23. Окно «Свойства» блока «Интегратор с ограничением».
Для задания формулы расчета уровня воды необходимо открыть окно «Свойства» блока «Усилитель» с подписью «Уровень в баке» и задать в поле «Формула» свойства «Коэффициент усиления» равным «1/area».
Рисунок 24. Окно редактора блока «Язык программирования».
Рисунок 25. Рабочая область субмодели с измененным размером блока «Язык программирования».
Создание модели бака завершено, далее необходимо выйти из субмодели двойным нажатием левой кнопки мыши по свободному пространству рабочей области субмодели.
Рисунок 26. Рабочая область субмодели с подписью «Клапан» с установленными блоками и заданными названия портов.
Рисунок 27. Окно проекта с измененными размерами блоков «Субмодель» с подписями «Бак» и «Клапан».
Для блоков «Демультиплексор» необходимо задать значение свойства «Массив размерностей входов» равными «[1, 1, 1]» и для блока «Мультиплексор» задать значение свойства «Количество портов» равным «5».
Рисунок 28. Рабочая область субмодели с подписью «Нечеткий регулятор» с блоками, соединенными линиями связи.
Подписи к блокам «Демультиплексор» и «Мультплексор» обозначают соответствие между номерами выходных и входных портов и лингвистических термов. Так, первому выходному порту верхнего блока «Демультиплексор» соответствует лингвистический терм «низкая», а первому входному порту блока «Мультиплексор» – терм «закрывать быстро».
Рисунок 29. Окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса» с подписью «Разница уровней».
Рисунок 30. Окно «Свойства» блока «НЛ – Фазификация – Фазификация Гаусса» с подписью «Скорость изменения уровня».
Рисунок 31. Окно «Свойства» блока «НЛ – Нечеткий вывод – Треугольная функция».
После завершения настройки схемы модели нечеткого регулятора необходимо выйти из субмодели и изменить размер блока с подписью «Нечеткий регулятор» так, чтобы подписи портов не перекрывали друг друга.
Так как требуется построить графики не только фактического уровня воды, но и целевого, и сравнить их, необходимо чтобы эти графики были построены в одном окне. Для этого требуется для одного из блоков «Временной график» задать значение свойства «Количество входных портов» равным «2» .
Рисунок 32. Окно проекта с установленными блоками и заданными подписями.
Рисунок 33. Окно «Свойства» блока «Меандр».
Далее необходимо задать номинальный расход воды, поступающий в бак. Для этого необходимо открыть окно «Свойства» блока «Константа» и задать значение свойства «Значение» равным «0.5».
Рисунок 34. Окно «Параметры проекта» с выделенными параметрами, которые необходимо изменить.
Закрыть окно «Параметры проекта», при этом внесенные изменения сохраняются.
После настройки проекта для построения графиков необходимо запустить процесс моделирования и дождаться окончания расчета.
Рисунок 35. Окно «Свойства графика» блока «Временной график» с подписью «Графики уровня воды в баке» с выделенными свойствами, которые необходимо изменить.
Рисунок 36. Графики целевого и фактического уровня воды в баке.
График целевого уровня воды действительно представляет собой импульсы с полупериодом 20 секунд, значения которых изменятся с 1.5 м до 0.5 м и обратно. График фактического уровня воды достаточно плавно стремится к графику целевого уровня. В результате анализа полученных графиков установлено, что модель работает корректно.
Рисунок 37. Окно «Свойства графика» блока «Временной график» с подписью «График расхода обратного тока» с выделенным свойством, которое необходимо изменить.
Рисунок 38. Окно «Свойства графика» блока «Временной график» с подписью «График расхода обратного тока», вкладка «Общие», с выделенным свойством, которое необходимо изменить.
Сохранить изменения и закрыть окно нажатием кнопки «Ok».
Рисунок 39. График расхода обратного тока.
В результате анализа полученного графика установлено, что график полностью соответствует ожидаемым результатам: переменная «outrate» в момент времени 20 секунд приближенно равна «0.271», что согласуется с теоретическим значением, рассчитанным по формуле для значения уровня воды в тот же момент времени, равного «1.5 м»:
SimInTech позволяет преобразовывать расчетные схемы моделей алгоритмов управления во внешние динамические библиотеки «DLL» с использованием автоматической генерации кода Си. Использование динамических библиотек «DLL» вместо исходных схем моделей алгоритмов управления позволяет существенно увеличить скорость расчета и проводить проверку работоспособности данных алгоритмов в качестве бортовых алгоритмов управления. Данный раздел посвящен преобразованию алгоритма управления клапаном – нечеткого регулятора – в программный код на языке Си и его компиляции в «DLL» с помощью встроенного шаблона, настроенного для создания «DLL»-библиотек под Windows «MinGW».
Внимание: для дальнейшей работы необходимо иметь ключ генерации кода и пакет компиляторов MinGW, который находится на сайте разработчика.
Перед преобразованием нечеткого регулятора во внешнюю динамическую библиотеку «DLL» необходимо сохранить модель нечеткого регулятора в отдельный файл. Для этого двойным нажатием левой кнопкой мыши по блоку «Субмодель» с подписью «Нечеткий регулятор» войти в субмодель, затем в главном окне SimInTech необходимо выбрать пункт «Файл» подпункт «Сохранить страницу как…». Сохранить модель нечеткого регулятора в файле нового проекта под именем «FL_controller.prt».
Рисунок 40. Окно проекта «FL_controller.prt».
Рисунок 41. Окно «Свойства» блока «Порт выхода».
Рисунок 42. Окно «Параметры проекта».
Рисунок 43. Окно настройки «Кодогенератор Си».
В частности, например, для получения кода, выполняющего вычисления с фиксированной точкой, необходимо во вкладке «Настройки» в строке «Директории шаблона кода» выбрать в выпадающем меню строку: «%codetemplates%FixPoint_16_16_MinGW_DLL\».
Рисунок 44. Рабочая область проекта с сообщениями генератора кода для схемы.
Для исследования работы системы управления негерметичным баком с нечетким регулятором в виде «DLL» необходимо сохранить копию проекта с исходной моделью системы «Схема модели общего вида.prt» под именем «Схема модели общего вида_1.prt». Открыть проект «Схема модели общего вида_1.prt».
Рисунок 45. Окно «Свойства» блока «Внешняя DLL».
Рисунок 46. Рабочая область проекта с замененным блоком «Субмодель» с подписью «Нечеткий регулятор» на блок «Внешняя DLL».
Рисунок 47. Графики целевого и фактического уровня воды в баке.
Рисунок 48. График расхода обратного тока.
Рисунок 49. Окно проекта «FL_controller.prt», открытого из блока «Внешняя DLL» в процессе моделирования системы управления, с открытым окном просмотра значения на линии связи.
Рисунок 50. Главное окно SimInTech c выделенным пунктом «Отладочная информация…».
Рисунок 51. Окно «Отладочная информация SimInTech» с выделенной строкой «Максимально возможное ускорение» для системы с регулятором в виде «DLL».
Рисунок 52. Окно «Отладочная информация SimInTech» с выделенной строкой «Максимально возможное ускорение» для системы с регулятором в виде схемы.
В ходе данной лабораторной работы была разработана модель для исследования работы анимированных блоков на примере блоков библиотеки «Нечеткая логика». Также была разработана модель системы управления негерметичным баком с регулятором, основанным на системе нечеткого вывода типа Мамдани. Были построены графики зависимости уровня воды в баке от времени и расхода обратного тока от времени, а также произведено сравнение графиков целевого и фактического уровня воды в баке. В результате математического моделирования была проверена корректность работы модели системы управления негерметичным баком на базе нечеткой логики.
Для знакомства с приемами работы генератора кода Си было проведено преобразование нечеткого регулятора во внешнюю динамическую библиотеку «DLL». Контрольное моделирование показало, что нечеткий регулятор в виде динамической библиотеки «DLL», сгенерированной на языке Си, работает аналогично нечеткому регулятору в субмодели. Сравнение ускорений работы показало, что система с регулятором в виде «DLL» работает в несколько раз быстрее аналогичной системы с регулятором в виде схемы в субмодели.