Содержание лабораторной работы
В данной лабораторной работе будет:
- разработана модель негерметичного бака;
- разработана модель клапана;
- разработана модель нечеткого регулятора как системы нечеткого вывода типа
Мамдани;
- проведено моделирование системы управления негерметичным баком;
- построены графики зависимости уровня воды в баке и расхода обратного тока от
времени;
- произведено сравнение графиков целевого и фактического уровня воды в баке;
- произведено преобразование нечеткого регулятора в вид динамической библиотеки «DLL»
с использованием генератора кода;
- проведено моделирование системы управления негерметичным баком с преобразованным
нечетким регулятором;
- произведено сравнение результатов работы модели системы с преобразованным нечетким
регулятором и исходной модели системы.
Разработка модели негерметичного бака
Для создания нового проекта необходимо выполнить следующие действия:
- В главном окне SimInTech нажать левой кнопкой мыши на кнопку «Файл» и выбрать
пункт «Новый проект».
- В выпадающем меню выбрать пункт «Схема модели общего вида».
- Сохранить проект, оставив имя по умолчанию или указать желаемое имя
проекта.
Разработка моделей негерметичного бака, клапана и нечеткого регулятора
будет производиться в отдельных субмоделях для удобства организации блоков по моделям.
После разработки всех моделей они будут объединены в общую модель системы
управления.
Для разработки модели негерметичного бака необходимо добавить в рабочую область окна проекта блок
«
Субмодель» из вкладки «
Субструктуры» и задать к нему подпись согласно
рисунку (
Рисунок
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):
- ЕСЛИ «разница уровней» = «отрицательная», ТО «команда клапана»
= «открывать быстро»;
- ЕСЛИ«разница уровней» = «близкая к нулю», TO «команда клапана»
= «не изменять»;
- ЕСЛИ «разница уровней» = «положительная», TO «команда клапана»
= «закрывать быстро»;
- ЕСЛИ «разница уровней» = «близкая к нулю» И «скорость изменения
уровня» = «уменьшается», ТО «команда клапана» = «открывать
медленно»;
- ЕСЛИ «разница уровней» = «близкая к нулю» И «скорость изменения
уровня» = «увеличивается», ТО «команда клапана» = «закрывать
медленно».
Рисунок 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. Окно «Параметры проекта» с выделенными параметрами, которые необходимо
изменить.
Закрыть окно «Параметры расчета», при этом внесенные изменения сохраняются.
Запуск моделирования и построение графиков
После настройки проекта для построения графиков необходимо запустить процесс
моделирования и дождаться окончания расчета.
После этого необходимо изменить оформление окон, в которых отображаются графики.
Требуется задать название графиков и осей. Для этого:
- Открыть окно «Свойства графика» блока «Временной график» с подписью
«Графики уровня воды в баке» и на вкладке «График и оси» в поле
«Название графика» задать значение первому графику «График целевого уровня
воды», второму графику «График фактического уровня воды», в колонке
«Ось Y» задать значение свойства «Название оси» равным «Уровень h,
м» (Рисунок
33).
Рисунок 33. Окно «Свойства графика» блока «Временной график» с подписью «Графики уровня
воды в баке» с выделенными свойствами, которые необходимо изменить.
- На вкладке «Общие» ввести в поле «Заголовок» название графика
«Графики уровня воды в баке» (Рисунок 34).
Рисунок 34. Окно «Свойства графика» блока «Временной график» с подписью «Графики уровня
воды в баке», вкладка «Общие».
Для сохранения изменений и закрытия окна необходимо нажать кнопку «
Ok». График
должен выглядеть согласно рисунку (
Рисунок 35).
Рисунок 35. Графики целевого и фактического уровня воды в баке.
График целевого уровня воды действительно представляет собой импульсы с полупериодом 20
секунд, значения которых изменятся с 1.5 м до 0.5 м и обратно. График фактического уровня
воды достаточно плавно стремится к графику целевого уровня. В результате анализа
полученных графиков установлено, что модель работает корректно.
После этого необходимо оформить окно, в котором построен график расхода обратного тока.
Для этого:
- Открыть окно «Свойства графика» блока «Временной график» с подписью
«График расхода обратного тока» и задать на вкладке «Графики и оси»
название оси Y согласно рисунку (Рисунок 36).
Рисунок 36. Окно «Свойства графика» блока «Временной график» с подписью «График расхода
обратного тока» с выделенным свойством, которое необходимо изменить.
- На вкладке «Общие» в поле «Заголовок» изменить название графика на
«График расхода обратного тока» и отключить свойство «Показывать
легенду» (Рисунок
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. График расхода обратного тока.