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

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

Вложенные структуры конечных автоматов. Реализация обмена данными с конечными автоматами

Конечные автоматы SimInTech сформированы на базе стандартных субмоделей, которые поддерживают неограниченную глубину вложенности, мы можем разместить на схеме внутри конечного автомата еще одну или несколько карт состояний и получить параллельно-работающий набор конечных автоматов. Поместите на схему внутри модели «Контроллер нагревателя» новый блок «Карта состояний конечного автомата» – это будет автомат, определяющий цвет и частоту мигания индикации нагревателя. Внутренняя структура блока будет состоять из двух состояний on и оff.

Соберите схему, как показано на рис. 30


Рисунок 30. Внутренняя структура автомата индикатора.

В качестве активного состояния выберете состояние on. Выделите блок и нажмите на него правой кнопкой мыши. В выпадающем меню выберите пункт «Свойства». Появится окно редактирования свойств, в котором нужно выбрать да в единственном свойстве «По умолчанию» Да (см. рис 31.)

image

Рисунок 31. Настройка начального активного состояния.

Внутренняя структура логики работы в состоянии включен представлена на рис. 32.

image

Рисунок 32. Логика работы в состоянии On

После включения состояния таймер вырабатывает сигнал 0 (false) в течение заданного времени. Это сигнал блоком «оператор НЕ» превращается в 1 (true) и передается на выход Оn. Пока не истечет время, заданное в блоке «Выдержка состояния», на выходе из блока состояния On будет 1. Как только время закончится, выход блока «Выдержка состояния» станет равен 1 (true), произойдет срабатывание перехода, одновременно сигнал на выходе станет On — 0 (false) и не будет меняться, пока состояние неактивно. Таким образом, можно использовать это выход в качестве индикации состояния включен.

Поднимитесь на один уровень схемы выше и поставьте на схему блок «Выходной порт» из закладки «Субструкутры». Этот порт будет передавать наружу сигнал работы индикатора. Соберите схему, как показано на рис. 33.

image

Рисунок 33 Схема авт��мата индикации.

Войдите в состояние off и наберите простую схему, как показано на рис. 34

image

Рисунок 34. Схема работы в состоянии off.

После включения состояния включается таймер и через указанный в настройках интервал времени происходит выход из состояния.

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

image

Рисунок 35. Схема контроллера нагревателя с вложенным автоматом индикатора.

Если сейчас запустить общую схему на расчет, то индикатор будет переключаться между 0 и 1 с интервалом, заданным в таймере состояний автомата индикатора ( см. рис. 32 и 34). По умолчанию это время равно 1 секунде и график «Индикация» на общей схеме (см. рис. 8) будет представлять из себя меандр с интервалом 1 сек, как на рисунке 36:

image

Рисунок 36. График работы автомата индикации.

Чтобы интервал автомата индикации зависел от состояния контроллера (1 секунда при нагреве и 5 секунд в выключенном состоянии), необходимо в него передать данные из параллельно работающего автомата состояния. Для этого существует несколько способов. Поскольку автоматы состояния реализованы с использованием обычных субмодел��й могут быть использованы все методы передачи данных. В нашем примере мы используем один из них – сигналы модели.

Перейдите внутрь субмодели «Контроллер нагревателя». Схема на экране должна выглядеть как на рис. 35. В главном меню главного окна SimInTech выберите пункт «Сервис» подменю «Сигналы» (см рис. 37)

image

Рисунок 37. Вызов настройки сигналов проекта.

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

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

image

Рисунок 38. Добавление сигнала проекта.

Данный сигнал может быть использован для любых целей в проекте. Мы будем использовать его для задания интервала индикации в разных состояниях.

Перейдите в автомат индикации и в таймерах состояния для состояний on и off вместо значения по умолчанию 1 поставьте имя сигнала flash_time. (см. рис. 39)

image

Рисунок 39. Задание выдержки состояния индикации через имя сигнала.

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

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

image

Рисунок 40. Схема состояния выключен с заданием времени индикатора.

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

Войдите в редактор блока «Язык программирования» двойным кликом и прис��ойте значение входа (u) переменной flash_time, как показано на рис. 41.

image

Рисунок 41. Задание интервала индикации в языке программирования.

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

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

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

image

Рисунок 42. Задание интервала индикации для состояния включен в языке программирования.

Если сейчас запустить расчет, то график «Индикация» покажет нам, что автомат индикации меняет интервал переключения в зависимости от состояния контроллера нагревателя. В выключенном состоянии интервал равен 5 секундам, во включенном состоянии – 1 сек. (см рис. 43)

image

Рисунок 43. График работы индикатора с разным периодом.

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

Например, для изменения расчета цвета индикатора можно доработать схему контроллера так, чтобы, кроме включения и выключения индикатора (0,1) на выход, подавалось также значение цвета индикатора (0 – выключен, 1 – включен зеленый, 2 – выключен красный). Схема вычисления цвета приведена на рисунке 44.
image

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

Если вы собрали все схемы, как описано в данном тексте, то графики работы модели будут похожи на приведенные ниже (см. рис. 45):

image

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

На графике индикации работы нагревателя (верхний график рисунка 45), видно, что в выключенном состоянии с периодом 5 секунд выход на индикатор меняет значение 0 — 1 (выключен-зеленый), а во включенном состоянии это выход с периодом 1 секунда меняет значение 0 — 2 (выключен красный). Обратите внимание что в приведенном примере на схемах комбинируются два подхода к созданию алгоритмов управления логика «конечных автоматов» и стандартная функционально-блочная схема алгоритма и все прекрасно работает совместно.

Выв��ды


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

В примере приведены основные приемы работы при использовании логики «конечных автоматов» в SimInTech. Скачать версию SimInTech c блоками конечных автоматов можно здесь.

В заключительной части 3 мы покажем как генерировать код Си из схемы в SimInTech. Часть 3 здесь..