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

Лабораторная работа №1.

Цель работы:

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

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

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

Алгоритм управления клапаном включает в себя алгоритм определения сигнала конечного состояния и алгоритм формирования сигнала «Открыть»/ «Закрыть» от кнопки. Дополнительно формируются промежуточные сигналы о процессе открытия или закрытия клапана, а также сигналы неисправности клапана при закрытии и открытии за заданный промежуток времени, в данном примере 7 секунд, что больше времени полного открытия клапана.

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

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

Рисунок 1. Главное окно SimInTech c выделенным меню для создания нового проекта.

Откроется новое окно проекта. Сохранить проект под именем «Valve_1.prt», нажав на кнопку «Сохранить проект».

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

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

Задать подпись блока согласно рисунку (Рисунок 3).

Рисунок 3. Рабочая область проекта с блоком «Субмодель» с подписью «КЛАПАН».

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

  • 3 блока «Константа» из вкладки «Источники»;

  • 2 блока «Операция РАВНО» из вкладки «Логические»;

  • 1 блок «Усилитель», 1 блок «Сравнивающее устройство» и 1 блок «Перемножитель» из вкладки «Операторы»;

  • 1 блок «Кнопка» из вкладки «Ключи»;

  • 1 блок «Интегратор с ограничением» из вкладки «Динамические».

Двойным нажатием левой кнопкой мыши по блоку «Порт входа» необходимо вызвать окно «Порт субмодели» и в поле «Имена портов субмодели» задать название порта «cmd_Открыть» согласно рисунку (Рисунок 4). Нажать левой кнопкой мыши на кнопку «Ok» для сохранения настроек и закрытия окна.

Рисунок 4. Окно «Порт субмодели».

Аналогичным образом для блоков «Порт выхода» задать имена портов «Клапан Открыт», «Положение клапана», «Клапан Закрыт».

Добавить подпись «Ввод ошибки ОС на открытие (ввести 0)» к блоку «Кнопка» и разместить ее над блоком. Для перемещения подписи к блоку необходимо одинарным нажатием левой кнопкой мыши выделить блок, затем навести курсор мыши к красному прямоугольнику в верхней части поля подписи блока до появления курсора «Перемещение» (Рисунок 5).

Рисунок 5. Рабочая область субмодели с измененным положением подписи блока.

Не отпуская левую кнопку мыши, переместить данную подпись. Соединить блоки линиями связи согласно рисунку (Рисунок 6).

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

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

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

Открыть окно «Свойства» блока «Усилитель», в поле «Значение» задать значение свойства «Коэффициент усиления» равным «2» (Рисунок 8).

Рисунок 8. Окно «Свойства» блока «Усилитель».

В рабочей области субмодели над блоком «Усилитель», изменилось значение с «1» на значение «2», которое отображает, что коэффициент усиления сигнала равен «2» (Рисунок 9).

Рисунок 9. Рабочая область субмодели с отображением измененного параметра «Коэффициент усиления» блока «Усилитель».

Открыть окно «Свойства» блока «Констана», выделенного на рисунке (Рисунок 10).

Рисунок 10. Рабочая область субмодели с изменяемым блоком «Константа».

Задать значение свойства «Значения» в поле «Значение» равным «0» (Рисунок 11).

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

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

Разместить на схеме алгоритма управления следующие блоки:
  • 1 блок «Кнопка» из вкладки «Ключи»;
  • 2 блока «Оператор И» и 3 блока «Оператор НЕ» из вкладки «Логические»;
  • 2 блока «Задержка повключению» из вкладки «Задержки и импульсы»;
  • 1 блок «Временной график» из вкладки «Вывод данных» .
Необходимо увеличить количество входных портом для блока «Временной график», для этого необходимо выбрать правой кнопкой мыши блок «Временной график» и открыть контекстное меню. Выбрать пункт «Свойства объекта» и в открывшемся окне «Свойства» задать значение свойства «Количество входных портов» равным «5» (Рисунок 12).

Рисунок 12. Окно «Свойства» блока «Временной график».

В свойствах блоков «Задержка по включению» задать значение свойства «Массив времен подтверждения, сек» равным «7» для подачи сигнала неисправности открытия клапана за 7 секунд (Рисунок 13).

Рисунок 13. Окно «Свойства» блока «Задержка по включению».

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

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

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

Рисунок 15. Главное окно программы с выделенной кнопкой вызова окна примитивов.

В открывшемся окне выбрать «Текст» (Рисунок 16).

Рисунок 16. Главное окно программы с панелью примитивов.

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

Рисунок 17. Окно «Редактирование текста» примитива «Текст».

Разместить примитивы согласно рисунку (Рисунок 18).

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

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

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

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

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

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

Двойным нажатием левой кнопкой мыши по свободному рабочему пространству блока «Субмодель» с подписью «КЛАПАН», выйти из рабочей области субмодели. Нажатием левой кнопкой мыши по кнопке «Пуск» запустить проект на моделирование.

Необходимо изменить отображение выходных графиков, изменив свойства графика блока «Временной график» с подписью «Открытие/закрытие клапана». Для этого необходимо двойным нажатием левой кнопкой мыши по блоку «Временной график» с подписью «Открытие/закрытие клапана» вызвать окно «График». В открывшемся окне «График» вызвать контекстное меню и выбрать пункт «Свойства». Задать свойства графика согласно рисунку (Рисунок 21). На вкладке «Общие» ввести в поле «Заголовок» название графика «График работы системы управления клапаном».

Рисунок 21. Окно «Свойства графика» блока «Временной график».

Выполнить переключения клапана в процессе расчета для исследования работы модели. Для этого необходимо:
  • До 6.5 секунды перевести одинарным нажатием левой кнопкой мыши блок «Кнопка» с подписью «Команда на открытие клапана (1), при (0) сам закрывается» в состояние «1», и внутри блока «Субмодель» с подписью «КЛАПАН» перевести в состояние «1» блок «Кнопка» с подписью «Ввод ошибки ОС на открытие (ввести 0)» для открытия клапана (Рисунок 22) и (Рисунок 23).

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

    Рисунок 23. Рабочая область субмодели с подписью «КЛАПАН» со схемой модели с переключенным состоянием блока «Кнопка».

  • До 14 секунды перевести блок «Кнопка» с подписью «Команда на открытие клапана (1), при (0) сам закрывается» в состояние «0» и внутри блока «Субмодель» с подписью «КЛАПАН» перевести в состояние «1» блок «Кнопка» с подписью «Ввод ошибки ОС на открытие (ввести 0)» для закрытия клапана.
  • После 14 секунды перевести блок «Кнопка» с подписью «Команда на открытие клапана (1), при (0) сам закрывается» в состояние «1» и внутри блока «Субмодель» с подписью «КЛАПАН» перевести в состояние «0» блок «Кнопка» с подписью «Ввод ошибки ОС на открытие (ввести 0)» для открытия клапана.
Открыть двойным нажатием левой кнопкой мыши блок «Временной график» с подписью «Открытие/закрытие клапана». Результаты моделирования с сигналами положения клапана, открытия клапана, закрытия клапана и отказа клапана в открытии представлены на графике (Рисунок 24).

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

Прим.: полученные результаты могут отличаться от приведенных на рисунке, так как время нажатия на блоки «Кнопка» выбирается стохастически.
Сигнал «Положение клапана» от 0 секунды до 6,5 секунды соответствует открытию клапана при отсутствии отказов в его работе, от 6,5 секунды до 14 секунды соответствует закрытию клапана при отсутствии отказов в его работе. После 14 секунды отображается отказ полного открытия клапана, который моделируется блоком «Кнопка» с подписью «Ввод ошибки ОС на открытие (ввести 0)» переключением «1» в «0» в рабочей области блока «Субмодель» клапана (Рисунок 25).

Рисунок 25. Рабочая область субмодели с подписью «КЛАПАН» со схемой модели отказа датчика конечного состояния.

Полученные результаты свидетельствуют, что сигнал на открытие, который поступил на 14 секунде, активирует открытие клапана, но даже на 21 секунде, то есть после 7 секунд от момента получения команды, сигнал о полном открытии клапана не поступил (Рисунок 24). На это алгоритм реагирует выдачей сигнала неисправности.

В главном окне SimInTech выбрать вкладку «Файл» и нажать на кнопку «Сохранить проект как…». Сохранить копию проекта «Valve_1.prt» под именем «Valve_2.prt».

Выделение алгоритма управления клапаном в отдельную подсистему (субмодель)

Открыть проект «Valve_2.prt» и из вкладки «Субструктуры» добавить блок «Субмодель», и задать ему подпись «АЛГОРИТМ УПРАВЛЕНИЯ». Перенести схему алгоритма управления клапаном в новую субмодель, оставив блок «Субмодель» с подписью «КЛАПАН». Для этого необходимо нажать левой кнопкой мыши на свободную область проекта и не отпуская выделить необходимые блоки, вызвать контекстное меню и выбрать пункт «Копировать», или скопировать с использованием сочетания клавиш «Ctrl + C».

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

Открыть двойным нажатием левой кнопкой мыши рабочую область блока «Субмодель» с подписью «АЛГОРИТМ УПРАВЛЕНИЯ» и разместить скопированные блоки, нажатием правой кнопкой на свободное пространство проекта, и выбрав в контекстном меню пункт «Вставить», или вставить с использованием сочетания клавиш «Ctrl + V». Для снятия выделения всех блоков необходимо нажать левой кнопкой мыши на свободное пространство проекта (Рисунок 27).

Рисунок 27. Рабочая область блока «Субмодель» с подписью «АЛГОРИТМ УПРАВЛЕНИЯ».

Выйти из рабочей области блока «АЛГОРИТМ УПРАВЛЕНИЯ». Осуществить двойное нажатие левой кнопкой мыши на блок «Субмодель» с подписью «КЛАПАН» для входа в субмодель. В рабочую область поместить из вкладки «Субструктуры» блок «Порт входа». Заменить блок «Кнопка» на блок «Порт входа», задать имя порта и подпись блока согласно рисунку (Рисунок 28).

Рисунок 28. Рабочая область субмодели с подписью «КЛАПАН» с измененной схемой модели.

Выйти из рабочей области субмодели с подписью «КЛАПАН», выполнив двойное нажатие левой кнопкой мыши на свободное пространство рабочей области проекта. Войти в рабочую область субмодели c подписью «АЛГОРИТМ УПРАВЛЕНИЯ». В рабочую область субмодели поместить:
  • 3 блока «Порт входа» и 1 блок «Порт выхода» из вкладки «Субструктуры».
Двойным нажатием левой кнопкой мыши по блоку «Порт выхода» необходимо вызвать окно «Порт субмодели» и в поле «Имена портов субмодели» перечислить названия портов «OpenAlarm», «OpenRun», «cmdOpen», «CloseRun», «CloseAlarm» согласно рисунку (Рисунок 29).

Рисунок 29. Окно «Порт субмодели».

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

Рисунок 30. Рабочая область субмодели с подписью «АЛГОРИТМ УПРАВЛЕНИЯ» со схемой модели с увеличенным количеством портов выхода.

Двойным нажатием левой кнопкой мыши по блокам «Порт входа» необходимо вызвать окно «Порт субмодели» и в поле «Имена портов субмодели» задать названия портов «cmdOpen», «IsOpen», «IsClose». Разместить блоки в рабочей области проекта, соединить их линиями связи, задать им подписи и удалить не используемые блоки согласно рисунку (Рисунок 31).

Рисунок 31. Рабочая область субмодели с подписью «АЛГОРИТМ УПРАВЛЕНИЯ» со схемой системы управления клапаном.

Выйти из рабочей области субмодели, выполнив двойное нажатие левой кнопкой мыши на свободное пространство рабочей области проекта. Изменить размер блока «Субмодель» с подписью «АЛГОРИТМ УПРАВЛЕНИЯ». В рабочую область окна проекта поместить из вкладки «Ключи» блок «Кнопка»и задать подпись блока «Ввод ошибки ОС на открытие (ввести 0)». В свойствах блока «Временной график» увеличить количество входных портов до «5». Разместить блоки в рабочей области проекта, соединить их линиями связи, задать им подписи и удалить не используемые блоки согласно рисунку (Рисунок 32).

Рисунок 32. Рабочая область проекта с модифицированной системой управления клапаном.

Запустить проект на моделирование. Двойным нажатием левой кнопкой мыши по блоку «Временной график» вызвать окно «График». Нажать правой кнопкой мыши по окну «График» и выбрать пункт «Свойства», изменить свойства согласно рисунку (Рисунок 33).

Рисунок 33. Окно «Свойства графика» блока «Временной график».

В процессе расчета выполнить переключения клапана для исследования работы модели. Для этого необходимо:
  • До 6.5 секунды перевести одинарным нажатием левой кнопкой мыши блок «Кнопка» с подписью «Команда на открытие клапана (1), при (0) сам закрывается» в состояние «1» и перевести в состояние «1» блок «Кнопка» с подписью «Ввод ошибки ОС на открытие (ввести 0)» для открытия клапана (Рисунок 34).

    Рисунок 34. Рабочая область проекта с переключенными состояниями кнопок во время расчета.

  • До 14 секунды перевести одинарным нажатием левой кнопкой мыши блок «Кнопка» с подписью «Команда на открытие клапана (1), при (0) сам закрывается» в состояние «0» для закрытия клапана.
  • После 14 секунды перевести блок «Кнопка» с подписью блоку «Команда на открытие клапана (1), при (0) сам закрывается» в состояние «1» для открытия клапана и перевести в состояние «0» блок «Кнопка» с подписью «Ввод ошибки ОС на открытие (ввести 0)».
Результаты моделирования приведены на рисунке (Рисунок 35). Допустимо отличие полученного результата от приведенного, так как время нажатия на блоки «Кнопка» выбирается стохастически.

Рисунок 35. Окно блока «Временной график» с результатами работы модифицированной модели.

Полученные результаты эксперимента на рисунке (Рисунок 35) соответствуют результатам, полученным на рисунке (Рисунок 24), что подтверждает работоспособность алгоритма управления клапаном в составе системы.

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

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

Двойным нажатием левой кнопкой мыши по субмодели с подписью «АЛГОРИТМ УПРАВЛЕНИЯ» войти в субмодель, затем в главном меню необходимо выбрать пункт «Файл» подпункт «Сохранить страницу как…». Сохранить алгоритм управления в файле нового проекта «Valve_control_1.prt».

Открыть проект «Valve_control_1.prt» и добавить в рабочую область проекта из панели примитивов 5 блоков «Текст», согласно рисунку (Рисунок 36). Таким образом, модель системы управления клапаном имеет 3 порта входа и 5 портов выхода. На против каждого блока «Порт выхода» указано соответствующее ему название порта. Сохранить проект под именем «Valve_control_2.prt».

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

Открыть проект «Valve_control_2.prt». Заменить блоки «Порт входа» и «Порт выхода» на блоки «Входной контакт» и «Выходной контакт» из вкладки «Сигналы» соответственно. В свойствах блоков «Порт входа» и «Порт выхода» в поле «Значение» задать значение свойства «Имя контакта» равными: «input:0», «input:1», «input:2» и «out:0», «out:1», «out:2», «out:3», «out:4» соответственно (Рисунок 37).

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

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

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

Открыть «Параметры проекта», в выпадающем списке вкладки «Генерация кода» в параметре «Имя (имена) алгоритма» в поле «Значение» ввести «cmdValve», в параметре «Текущий компонент» в поле «Значение» ввести «AlgValue» и в параметре «Префикс имени подпрограммы» ввести «s» (Рисунок 39). Сохранить проект.

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

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

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

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

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

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

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

Сохранить копию проекта «Valve_2.prt» под именем «Valve_3.prt». Открыть проект «Valve_3.prt».

Разместить блок «Внешняя DLL» из вкладки «Внешние модели». Открыть «Свойства» блока «Внешняя DLL» в поле «Значение» задать параметры согласно рисунку (Рисунок 42).

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

Заменить блок «Субмодель» с подписью «АЛГОРИТМ УПРАВЛЕНИЯ» на блок «Внешняя DLL» согласно рисунку (Рисунок 43).

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

Запустить проект на моделирование. В процессе расчета выполнить переключения клапана для исследования работы модели. Для этого необходимо:

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

Результаты работы модели представлены на рисунке (Рисунок 44), что соответствует с полученными ранее результатами (Рисунок 24) и подтверждает работоспособность dll-библиотеки алгоритма управления клапаном в составе системы.

Рисунок 44. Окно блока «Временной график» с результатами работы модели системы.

Заключение

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

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

Данная работа позволила освоить в SimInTech базовые приемы: