Конечные автоматы в среде динамического моделирования SimInTech

в 7:41, , рубрики: scada, Графические оболочки, конечные автоматы, математическое моделирование, программирование микроконтроллеров

Введение

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

В настоящее время все необходимые настройки реализованы в специальной библиотеке блоков, которая обеспечивает создание моделей систем в виде конечных автоматов, (представление State Flow) и может быть использована при создании моделей управления.

В данной статье показан пример использования элементов библиотеки «Конечные автоматы» для создания системы управления.

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

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

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

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

В качестве входных воздействии в регулятор задаются:
1) Заданное значение (уставка) температуры, которую необходимо обеспечить.
2) Текущее значение температуры, полученной от датчика температуры.

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

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

Состояние выключен.
Нагрева нет.
Индикатор мигает зеленым цветом с частотой 5 секунд.
Переход между состояниями: из состояния выключен в состояние включен осуществляется в случае совпадения двух условий: контроллер находится в состоянии выключен более 40 сек и температура с датчика ниже заданной уставки.

Состояние включен
Происходит нагрев.
Индикатор нагрева красным моргает с частотой 1 секунду.
Переход из состояния включен в состояние выключен осуществляется в двух случаях:
1) Нагрев осуществлялся в течении 20 секунд.
2) Температура с датчика достигла заданной уставки.

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

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

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

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

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

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

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

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

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

Начальная температура равна 15, коэффициент усиления 1/25 (25 литров нагреваются с заданной скоростью).
Для проверки работы модели нагревателя на вход мы подаем значение с блока «Меандр», выход выводим на график вместе с входом. Схема модели приведена на рисунке 4.

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

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

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

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

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

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

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

Поместите блок на схему вместе с созданным ранее блоком «Модель нагревателя». Поскольку данный блок создан на основе стандартной субмодели SimInTech, то с ним можно работать так же как с субмоделью: добавлять входы и выходы, добавлять сигналы, добавлять свойства, объявлять и использовать внутренние переменные, связывать его с базой данных сигналов.
Войдите внутрь блока «Карта состояний конечного автомата» двойным кликом по нему. Единственное отличие от стандартной субмодели – наличие на внутренней схеме дополнительного блока, «Блок выбор состояний» в левом углу схемы (см. рис. 7)

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавьте блок «Больше» и соедините схему как показано на рисунке 12:
image
Рисунок 12: Сравнение заданной и измеренной температуры

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

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

Осуществите двойной клик по блоку состояние выключен, чтобы осуществить переход к внутренней структуре блока. Схема внутренней первоначальной структуры блока изображена на рисунке 13:

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

Внутренняя структура по умолчанию содержит блок «Выработка условия выполнения» в верхней части схемы. Данный блок получает команду на активацию состояния из структуры верхнего уровня («Блок выбора состояний» ), пользователю не нужно менять данный блок.
Кроме этого, блок содержит два блока «входа-выхода» специального вида:
1) «FROM_STATE» – вход в состояние;
2) «TO_STATE» – выход из состояния;
Данные порты соответствуют входу и выходу в блок на схеме верхнего уровня. Данные блоки расположены на закладках «Конечные автоматы»: блоки «Вход состояния» и «Выход состояния» соответственно.
Схема работы автоматов предусматривает для состояния включен один выход (при совпадении двух условий: выключен в течении 40 секунд и температура меньше заданной), но возврат в состояние возможен по двум условиям: либо работа нагревателя в течении 20 секунд, либо достижение заданной температуры. Добавьте на схему блок «Вход состояния» из закладки «Конечные автоматы» (см. рис. 14):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Перейдем к формированию логики работы в состоянии включен.

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

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

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

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

Общая структура логики работы блока будет выглядеть как показано на рисунке 22:

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

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

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

Перейдем на верхний уровень данной схемы. У блока состояния автомата включен появились два дополнительных порта. И теперь блок содержит:
• один входной порт для перехода в состояние (красного цвета);
• один входной порт для данных (черного цвета);
• два выходных порта для перехода из состояния (красного цвета).
Соедините порты, как показано на рисунке 23:

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

Таким образом, мы подготовили модель управления на основе конечных автоматов к тестированию. На данном этапе выход на индикатор мы подключили к порту включения, чтобы исключить ошибку, связанную с неподключенным входным портом.
Порт индикатора на данной стадии отображает состояния (включен/выключен). Моделирование интервалов и цвета индикатора мы сделаем позже.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пробную версию SimInTech можно скачать с сайта разработчика.

Автор: petuhoff

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js