Конечные автоматы

Введение

SimInTech является средой для создания математических моделей любых систем, уравнения динамики которых можно представить в виде входо-выходных соотношений, или (что тоже самое) в виде нотации, называемой DataFlow. Для реализации концепции конечных автоматов в среде SimInTech уже довольно длительное время существовал блок условного выполнения субмодели, который обеспечивал остановку и запуск расчета (моделирования) части модели по условию, приходящему извне в субмодель. Такой подход, в принципе, обеспечивает возможность разделить общую модель на «состояния», и в каждый момент времени рассчитывать только те субмодели, условия выполнения которых установлены в логическую 1.

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

Постановка задачи

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

При включенном нагревателе мощность нагрева постоянна и нагревает 1 литр воды на 1 градус за секунду. При выключенном нагревателе потери постоянны и таковы, что охлаждают 1 литр воды на 0,1 градуса за секунду. Объём воды принимается равным 25 литрам.

Алгоритм работы автомата поддержания температуры выглядит следующим образом:

В качестве входных воздействии в регулятор задаются:

Описание модели в терминах конечных автоматов

Работу конечных автоматов контроллера нагревателя можно описать следующим образом:

Автомат имеет два состояния: включен (1) и выключен (2).

В начальный момент времени состояние – выключен.

Состояние выключен (1):

Состояние включен (2):

Схема, реализующая данный алгоритм, изображена на рисунке (Рисунок 1):

Рисунок 1. Схема работы конечного автомата

Реализация работы конечного автомата в SimInTech

Создание модели объекта

Модель нагревателя будет создаваться с использованием стандартных средств моделирования SimInTech и представляет собой субмодель, на вход которой подаётся признак включения нагревателя, а именно: 0 – выключен, 1 – включен; на выходе модели нагревателя будет рассчитываться температура воды.

Поместите на схему блок «Субмодель» из закладки «Субструктуры» и соберите модель как представлено на рисунке (Рисунок 2).

Рисунок 2. Модель нагревателя

На вход в блок подается переменная – признак работы нагревателя. Данная переменная инвертируется и подается на ключ типа «A3», в зависимости от этой переменной, ключ передает на выход значения скорости нагрева и остывания, полученные с блоков типа «Константа»: 1 – нагрев, либо -0.1 – охлаждение. Выход блока ключа «A3», интегрируется стандартным интегратором, таким образом формируются значения температуры. Параметры блока интегратора приведены на рисунке (Рисунок 3).

Рисунок 3. Параметры интегратора

Начальная температура 15, коэффициент усиления 1/25 (25 литров нагреваются с заданной скоростью).

Для проверки работы модели нагревателя, мы на вход подаем значение с блока «Меандр», выход выводим на график вместе с входом. Схема модели приведена на рисунке (Рисунок 4).

Рисунок 4. Общая схема для проверки модели нагревателя

Результат моделирования показан на рисунке (Рисунок 5). В периоды времени, когда значение меандра равно 1 (имитация включенного нагревателя), модель за счет интегратора накапливает температуру со скоростью нагрева, а в периоды, когда значения меандра равны 0, (имитация выключенного нагревателя) температура снижается со скоростью охлаждения.

Рисунок 5. График работы модели нагревателя

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

Создание блока управления нагревателем на базе конечных автоматов.

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

Рисунок 6. Закладка «Конечные автоматы», блок «Карата состояний конечного автомата»

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

Войдите внутрь блока «Карта состояний конечного автомата» двойным кликом на нем. Единственное отличие от стандартной субмодели – это наличие «Блока выбора состояний» в левом верхнем углу схемы (см. Рисунок 7).

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

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

Поместите на схему два блока «Порт входа» и два блока «Порт выхода» из закладки «Субструкутры» и измените их названия как показано на рисунке (Рисунок 7).

Рисунок 7. Подготовленный к обмену данными блок «Карта состояний конечного автомата»

На данном этапе можно выйти из блока двойным кликом по пустому месту схемы и на верхнем уровне у блока «Карта состояний конечного автомата», появятся порты входа и выхода для соединения на общей схеме. Соедините схему и подпишите блоки, как показано на рисунке (Рисунок 8):

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

Блок "контроллер нагревателя" получает заданную температуру и температуру из модели нагревателя и выдает команду (признак) включен – выключен в модель нагревателя и сигнал для индикации своего состояния.

Таким образом, блоки «Карата состояния конечных автоматов» (State Flow), может работать в SimInTech вместе с стандартными блоками схемы (Datа Flow). Для внешней схемы контроллер нагревателя является обычной субмоделью на каждом шаге времени (интегрирования) обрабатывающим входы и вычисляющим выходы. Перейдем в блок контроллера и создадим карту состояния.

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

Рисунок 9. Блок «Состояние автомата»

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

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

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

Рисунок 11. Настройка свойств первого активного состояния в карте.

Прежде чем перейти к созданию логики работы автоматов и переходов между состояниями, добавим на схему логически блок «Больше» и проведем сравнение заданной температуры с температурой полученной из модели - таким образом мы получим новую логическую переменную, которая принимает значение 1 когда температура меньше уставки и 0, когда температура больше или равна уставке.

Добавьте блок «больше» и соедините схему, как показано на рисунке (Рисунок 12):

Рисунок 12. Сравнение заданной и измеренной температуры.

Обратите внимание, что SimInTech не дает соединить выход блока «Больше» со входом блока «Состояние автомата», поскольку в первом случае линия обеспечивает передачу значения между блоками, а во втором - переход из состояния в состояние.

Создание логики работы состояния

Осуществите двойной клик по блоку состояния «выключен», внутренняя структура блока по умолчанию изображена на рисунке (Рисунок 13):

Рисунок 13. Внутренняя структура блока «Состояние автомата»

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

Кроме этого, блок содержит два блока входа-выхода специального вида:

  1. «FROM_STATE» - вход в состояние;
  2. «TO_STATE» - выход из состояния;

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

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

Рисунок 14. Закладка «Конечные автоматы» блок «Вход состояния»

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

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

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

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

Измените название порта «Вход» на «Cold». Здесь будет переменная сравнения измеренной температуры с заданной, а название порта «Выход» на «On/Off» - здесь мы будем считывать признак включения и выключения нагревателя.

Общая схема, подготовленная к созданию логики состояния, представлена на рисунке (Рисунок 17).

Рисунок 17. Блок «Состояние автомата», подготовленный к созданию логики

В выключенном состоянии автомат должен находится в течение 40 секунд и если через данный промежуток времени температура воды меньше заданной (вход Cold=1), необходимо перейти в состояние "включен". Для формирования задержки используем блок «Блок выдержки состояния» (см. Рисунок 18).

Рисунок 18. Закладка «Конечные автоматы», блок «Выдержка состояния»

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

Сигнал окончания выдержки объединяется с внешним сигналом (Сold) через логически блок «и». Если они совпадают (время выключения закончилось и температура ниже уставки), то мы формируем команду выхода из состояния и одновременно подаем на выход сигнал о включении нагревателя. Общая схема логики работы представлена на рисунке (Рисунок 19).

Рисунок 19. Логика работы в состоянии «выключен»

При формировании выхода из блока состояния необходимо учитывать, что блок в активном состоянии постоянно рассчитывает и формирует значение выходных сигналов (в нашем случае это выход Оn/Off), при завершении работы состояния и выхода из него, на линии остается последнее работающее значение, в нашем случае на выходе из состояния будет сформирована 1 и она останется до тех пор пока состояние не будет снова активно.

После завершения создания логики состояния "выключен", поднимемся на уровень выше, путем двойного клика по пустому месту схемы (см. Рисунок 20).

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

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

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

Рисунок 21. Блок Выход состояния

Для формирования условия выхода необходимо передать в блок значение сравнения температуры, для этого мы добавим на схему блок «Порт выхода» из закладки «Субструктуры» (см. Рисунок 16).

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

Общая структура логики работы блока будет выглядеть, как показано на рисунке (Рисунок 22).

Рисунок 22. Структура работы в состоянии «включен»

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

Одновременно анализируется значение полученное по входу с данными. На это порт мы подадим результат сравнения заданной температуры с измеренной, если результат равен 1 (истина) температура в бойлере ниже заданной и нужно продолжать нагрев. Если значение равно 0 (ложь), то нужно завершать нагрев. Блок «оператор НЕ» обеспечивает инверсию входа, и выработку команды на переход из состояния «включен» по второму выходу (см. Рисунок 22).

Перейдем на верхний уровень данной схемы. У блока состояния автомата «включен» появлялись два дополнительных порта. И теперь блок содержит:

Соедините порты как показано на рисунке (Рисунок 23):

Рисунок 23. Логика работы конечного автомата в сборе

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

Порт индикатора на данной стадии мы подключили к порту сигнала включения/выключения, моделирование интервалов и цвета индикатора мы сделаем позже.

Вызовите настройки расчета, нажав на кнопку «Параметры расчета» (см. Рисунок 24).

Рисунок 24. Кнопка «Параметры расчета»

На закладке «Параметры расчета», установите «Конечное время расчета» 700 секунд. (см. Рисунок 25)

Рисунок 25. Параметры расчета

На закладке «Синхронизация» установите галочку «Синхронизировать с реальным временем» и «Коэффициент ускорения» - 100 (см. Рисунок 26).

Рисунок 26. Параметры расчета. Синхронизация.

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

Запустите модель на расчет нажав на кнопку Старт. (см. Рисунок 27).

Рисунок 27. Запуск на расчет модели

Если вы всё собрали согласно инструкции, то получили модель водонагревателя, управляемую регулятором на базе логики «конечных автоматов». На схеме контроллера во время моделирования можно наблюдать переключение из состояния в состояние, зеленым цветом отображается активное в настоящий момент состояние (см. Рисунок 28).

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

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

Рисунок 29. Режим работы нагревателя

Рисунок 30. Температура нагревателя

На графике температуры (см. Рисунок 30) видно, что в начальный момент температура 15 градусов и снижается со скоростью охлаждения. После нахождения в состоянии «выключен» в течении 40 секунд происходит переход в состояние «включен» (см. Рисунок 29). В данном состоянии происходит нагрев со скоростью заданной в модели нагревателя (см. Рисунок 30). После отработки в течении 10 секунд, происходит переход в состояние «выключен» (см. Рисунок 29). Данные циклы повторяются до тех пор пока температура не достигнет уставки в 20 градусов, после этого цикл включения сокращается, поскольку переход из состояния «включен» в состояние «выключен» осуществляется по достижению уставки по температуре - это видно на графике "Режим работы" после 500 секунды расчета (см. Рисунок 29).

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

Обратите внимание, что сигнал включения и выключения (On/Off) мы формируем в блоке «выключен», поскольку данное состояние является активным по умолчанию. Его выходы на старте определены, при переключении из состояния мы меняем выход (см. Рисунок 19) и он остается в состоянии включен (1) все время пока состояние не активно. Поскольку в данном конечном автомате всего два состояния, мы можем это значение подать на выход из карты. В случае если у нас состояний больше двух, выход из субмодели должен определяться или рассчитываться в каждом состоянии, иначе возможна ситуация использования переменных которые не определены, из-за не активного состояния.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выводы

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

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