В первая часть мы показали, как создать в SimInTech алгоритм на основе «конечных автоматов» и использовать его совместно с «классическими» алгоритмами в виде функциональных блок-схем.
Во второй части мы покажем, как создавать вложенные и параллельные конечные автоматы и обмениваться данными между ними.
Вложенные структуры конечных автоматов.
Реализация обмена данными с конечными автоматами
Конечные автоматы SimInTech формируются на основе стандартных подмоделей, поддерживающих неограниченную глубину вложенности; мы можем поместить одну или несколько карт состояний в схему внутри конечного автомата и получить параллельно работающий набор конечных автоматов.
Разместите на схеме внутри модели «Контроллер нагревателя» новый блок «Карта состояний конечного автомата» — это будет автомат, определяющий цвет и частоту мигания индикации нагревателя.
Внутренняя структура блока будет состоять из двух состояний: включено и выключено.
Соберите схему, как показано на рис.
тридцать.
Рисунок 30. Внутреннее устройство индикаторной машины.
Выберите включенное состояние в качестве активного состояния.
Выберите блок и щелкните по нему правой кнопкой мыши.
В раскрывающемся меню выберите «Свойства».
Появится окно редактирования свойств, в котором нужно в единственном свойстве «По умолчанию» выбрать «Да» (см.
рис.
31).
Рисунок 31. Установка исходного активного состояния.
Внутренняя структура логики работы во включенном состоянии представлена на рис.
32.
Рисунок 32. Логика работы во включенном состоянии
После включения состояния таймер формирует сигнал 0 (ложь) в течение заданного времени.
Этот сигнал преобразуется в 1 (истина) блоком «Оператор НЕ» и передается на выход Вкл.
Пока время, указанное в блоке «Задержка состояния», не истечет, на выходе блока «Включенное состояние» будет 1. Как только время закончится, выход блока «Задержка состояния» станет равным 1 (истина), переход сработает, и при этом выходной сигнал станет Вкл.
- 0 (ложь) и не изменится, пока состояние неактивно.
Таким образом, вы можете использовать этот выход в качестве индикации включенного состояния.
Поднимитесь на один уровень схемы вверх и поместите на схему блок «Выходной порт» из вкладки «Подструктуры».
Этот порт будет передавать сигнал работы индикатора наружу.
Соберите схему, как показано на рис.
33.
Рис.
33. Принципиальная схема устройства отображения.
Войдите в выключенное состояние и введите простую схему, как показано на рис.
34.
Рисунок 34. Схема работы в выключенном состоянии.
После включения состояния запускается таймер и через интервал времени, указанный в настройках, происходит выход из состояния.
Поднимитесь на два уровня вверх и соедините появившийся выход подмодели «Индикаторная машина» с выходом «Светодиод» на схеме контроллера, как показано на рисунке 35.
Рисунок 35. Схема контроллера отопителя со встроенным индикаторным выключателем.
Если теперь запустить общую схему для расчета, то индикатор будет переключаться между 0 и 1 с интервалом, указанным в таймере состояния индикаторной машины (см.
рис.
32 и 34).
По умолчанию это время составляет 1 секунду и график «Индикация» на общей схеме (см.
рис.
8) будет представлять собой меандр с интервалом в 1 секунду, как на рис.
36:
Рисунок 36. График работы дисплейной машины.
Чтобы интервал работы машины индикации зависел от состояния контроллера (1 секунда при нагреве и 5 секунд при выключении), необходимо передать на него данные из параллельно работающего автомата.
Есть несколько способов сделать это.
Поскольку конечные автоматы реализуются с использованием обычных подмоделей, можно использовать все методы передачи данных.
В нашем примере мы используем один из них — модельные сигналы.
Зайдите внутрь подмодели контроллера нагревателя.
Схема на экране должна выглядеть как на рис.
35. В главном меню главного окна SimInTech выберите подменю «Сервис» «Сигналы» (см.
рис.
37).
Рисунок 37. Вызов настроек сигналов проекта.
Будет вызвано окно настройки списка сигналов.
В этом окне вы можете установить сигналы проекта, к которым имеют доступ все блоки, используемые в проекте.
Создайте новый сигнал (кнопка «добавить» внизу окна), задайте имя flash_time. Установите режим «Всенаправленный»; это позволит вам читать и записывать этот сигнал в любом месте проекта (см.
рис.
38)
Рисунок 38. Добавление сигнала проекта.
Этот сигнал можно использовать для любых целей в проекте.
Мы будем использовать его для установки интервала отображения в разных состояниях.
Подойдите к дисплею и в таймерах состояний для состояний включения и выключения замените значение по умолчанию 1 на имя сигнала flash_time. (см.
рис.
39)
Рисунок 39. Настройка задержки состояния дисплея по названию сигнала.
Теперь, когда время пребывания в состояниях индикатора задается сигналом, мы можем изменять это значение в разных состояниях контроллера, тем самым изменяя интервал индикации.
Перейдите на карту состояний «Контроллер обогревателя», и состояние выключено.
Поместите на диаграмму блок «Константа» из вкладки «Источники» и блок «Язык программирования» из вкладки «Динамический».
Соедините их, как показано на рис.
40.
Рис.
40. Диаграмма выключенного состояния с настройкой времени индикатора.
Установите для свойств константы значение 5 (интервал 5 секунд при выключении).
В общем случае вместо константы может быть схема расчета интервала любой сложности и любой глубины вложенности.
Войдите в редактор блока «Язык программирования» двойным щелчком мыши и присвойте входное значение (u) переменной flash_time, как показано на рис.
41.
Рисунок 41. Настройка интервала отображения на языке программирования.
Этот текст присваивает сигналу flash_time значение, полученное со входа в блок «Язык программирования».
Чтобы принять изменения, нажмите кнопку «Закрыть и применить» в верхней части окна.
(см.
рис.
41).
Вы можете отказаться от использования блоков и задать интервал работы индикатора непосредственно в тексте программы.
Давайте сделаем это для включенного состояния.
Переключитесь во включенное состояние и поместите на схему блок «Язык программирования» из вкладки «Динамический».
Войдите в редактор блоков двойным щелчком мыши и введите текст в окне редактирования, как показано на рисунке 42. Закройте окно, нажав кнопку «Закрыть и применить» в верхней части окна редактирования.
Рисунок 42. Настройка интервала отображения включенного состояния на языке программирования .
Если запустить расчет сейчас, то график «Индикация» покажет нам, что автоматическая индикация меняет интервал переключения в зависимости от состояния контроллера отопителя.
В выключенном состоянии интервал составляет 5 секунд, во включенном – 1 секунда.
(см.
рис.
43)
Рисунок 43. График индикатора с разными периодами.
Как уже было описано выше, в SimInTech логика конечных автоматов реализована на основе стандартных подмоделей, поэтому на схемах с этими блоками можно свободно использовать стандартную логику построения моделей.
Например, чтобы изменить расчет цвета индикатора, можно изменить схему контроллера так, чтобы помимо включения и выключения индикатора (0,1) на выход подавалось еще и значение цвета индикатора (0 - выкл.
, 1 — горит зеленый, 2 — красный выключен).
Схема расчета цвета представлена на рисунке 44.
Рисунок 44. Схема работы контроллера отопителя с расчетом цвета индикатора
Если вы собрали все схемы, как описано в этом тексте, то графики работы модели будут аналогичны показанным ниже (см.
рис.
45):
Рис.
45. Результаты моделирования модели нагревателя с контроллером, построенным на основе конечных автоматов.
На графике индикации работы отопителя (верхний график рисунка 45) видно, что в выключенном состоянии с периодом 5 секунд вывод на индикатор меняет значение 0 - 1 (не горит зеленым), а в во включенном состоянии этот выход с периодом в 1 секунду меняет значение 0 - 2 (красный выключен).
Обратите внимание, что в примере, приведенном на схемах, сочетаются два подхода к созданию алгоритмов управления: логика «конечных автоматов» и стандартная функциональная структурная схема алгоритма, и все прекрасно работает вместе.
выводы
Среда динамического моделирования технических систем SimInTech содержит инструменты для создания модели систем управления на основе конечных автоматов (state flow).Эту логику можно использовать совместно со стандартной логикой функциональных блок-схем (потоков данных), при этом инструменты разработки и создания диаграмм полностью совместимы друг с другом.
В примере показаны основные приемы работы при использовании логики «конечного автомата» в SimInTech. Вы можете скачать версию SimInTech с блоками конечных автоматов.
Здесь .
В заключительной части 3 мы покажем, как сгенерировать код C из схемы в SimInTech. Часть 3 здесь.
Теги: #математическое моделирование #разработка программного обеспечения #программирование контроллеров #Анализ и проектирование систем #Графические оболочки #Функциональное программирование #Промышленное программирование #scada
-
Обзор Руководства Shokz
19 Dec, 24