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

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

Внутренняя структура блока будет состоять из двух состояний on и оff. Соберите схему, как показано на рисунке (см Рисунок 1)

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

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

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

Внутренняя структура логики работы в состоянии "Включен" представлена на рисунке (Рисунок 3).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Закройте окно нажатием на кнопку «Закрыть и применить» в верхней части окна редактирования.

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

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

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

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

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

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

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

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

Выводы

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

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