Как стать автором
Обновить

ВКПа. Введение, ч.2. Копирование автоматов и начала имитационного моделирования

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.6K

Предисловие

Данный цикл статей - не техническая документация, не подробное описание научных идей. Это краткое, обобщенное описание возможностей среды ВКПа на простом примере. Демонстрация процессов и принципов работы в ней. Идеи - проверенная временем часть. Они описаны в статьях, ссылки на основные из них приведены в  первой части [1]. Без понимания этого материала невозможно разобраться, зачем вообще нужна подобная среда. Ведь, существует и другое автоматное программирование. Но только идеи, положенные в их основу, другие.

Отличие идей - это главное, чем объясняется необходимость среды ВКПа. Другой такой просто нет, как нет по большому счету и таких идей. И,  вообще, без понимания основ теории автоматов невозможно объяснить необходимость данной модели вычислений. Ведь, без автоматов программисты когда-то вполне обходились, а большая часть без них обходится и до сих пор.

Среду ВКПа нужно воспринимать, как программное ядро, реализующее параллельную модель вычислений  и оболочку над ним, которая могла быть вполне другой. И среда позволяет это легко сделать. Имеющаяся оболочка кому-то может показаться весьма неудобной - то же обилие диалогов. Но, во-первых, объективно оценить это можно лишь поработав в ней. А, во-вторых, как показывает опыт, восприятие - больше дело привычки. Для автора она удобна. Здесь многолетняя привычка и больший опыт работы с технологией автоматного программирования. Но и то и другое - основные тренды, влияющие на внешний вид и на функциональность оболочки.

Введение

Продолжим изучение возможностей среды ВКПа, рассмотрев проектирование полноценной системы управления (СУ) гильотиной. В первой части на примере лишь ее части - автомата датчиков был достаточно подробно рассмотрен процесс визуального проектирования автоматов. Теперь уделим основное внимание копированию автоматов и их тестированию.

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

Вид загруженной донорской конфигурации приведен на рис. 1. И это то, что в конечном итоге необходимо нам получить.

Рис. 1. Донорская конфигурация
Рис. 1. Донорская конфигурация

Создание заготовки проекта

Создадим каталог для нового проекта и перенесем в него базовый проект. Пусть имя нового каталога (далее - рабочего) будет ExampleGuillotine.  Напомним, что каталог базы - Sensors2.   Копирование файлов конфигурации базы выполним, например, с помощью Total Commander. Но, заметим, это же можно сделать с помощью самой среды ВКПа, как это было описано в предыдущей статье [1].

Откроем новую конфигурацию, выбрав ее каталог, и удалим автоматы, которые будут замещены одноименными автоматами из донора. Просто так мы с ними перенесем из донора и их настройки. К данным автоматам относятся следующие автоматы автоматного пространства (далее просто пространства) с именем SysDlg:

·         InputCanals,

·         OutputCanals,

·         Result,

·         Schema,

·         TickPlay.

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

Копирование автоматов

После перегрузки проекта выберем из основного меню среды пункт Сервис, а в нем - Копирование/удаление автоматов. С помощью отрывшегося диалога выберем донорскую конфигурацию - GuillotineCtrl(Donor). В результате он примет следующий вид, показанный на рис. 2.

Рис. 2. Диалог копирования автоматов
Рис. 2. Диалог копирования автоматов

В автоматном пространстве InitFsaWorld донора выберем автомат GuillotineCtrl, который реализует алгоритм управления гильотиной (см. рис. 3), и нажмем кнопку создать.  Если в рабочей конфигурации открыто одноименное пространство, то перенесенный автомат сразу же будет отображен в списке. Автомат Sensors2 в рабочей конфигурации уже есть (из базового проекта).

Открываем другие автоматные пространства. В пространстве TimerModels выберем автомат TimerGuillotineCntrl. Из пространства Models - автоматы ButtonsStart и ModelGuillotine (см. рис. 4) Из них первый моделирует работу кнопки управления гильотиной, сбрасывая через какое-то заданное время сигнал запуска гильотины - GuillotineCtrl.bStart. Второй моделирует гильотину,  реагируя на сигналы управления гильотиной и устанавливает с паузой, имитирующей передвижение гильотины, значения локальных переменных автомата Sensors2, соответствующие датчикам гильотины - Sensors2.snsDown и Sensors2.snsUp.

Рис. 3. Алгоритм управления гильотиной
Рис. 3. Алгоритм управления гильотиной
Рис. 4. Модели кнопки запуска и гильотины
Рис. 4. Модели кнопки запуска и гильотины

Открыв пространство SysDlg, копируем автоматы, удаленные на этапе создания заготовки рабочего проекта - InputCanals, OutputCanals, Result, Schema и TickPlay. Копируем также визуализаторы: для моделей кнопки и гильотины - это визуализатор ViewButtonAndGuillotine, для автоматов управления гильотиной и его таймера - ViewGuillotineCtrl, ViewTimerGuillotineCtrl.

Тестирование конфигурации

Открываем (в пространстве InitFsaWorld) автомат управления гильотиной - GuillotineCtrl и настраиваем его визуализатор.  Аналогично настраиваем визуализатор автомата Sensors2. Для наблюдения за сигналами запускаем осциллограф. Сделать это можно кнопкой Show диалога управления глобальными и локальными переменными среды (см. открытый диалог среды с заголовком DirVariables:FDirVariables (<имя процесса>:<имя автомата>).

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

Рис. 5. Настройка и вызов визуализатора моделей кнопки и гильотины
Рис. 5. Настройка и вызов визуализатора моделей кнопки и гильотины

Для тестирования конфигурации удобно иметь ее вид, который показан на рис. 6 (см. также рис. 1). И уже сразу по виду графов можно сказать, что гильотина находится в верхнем положении. Эту ситуацию отражают состояния автоматов Sensors2 и ModelGuillotine.  

Для запуска гильотины нужно перейти в диалог InputCanals и установить флаг поля GuillotineCtrl.bStart (рис. 7). Это запустит процесс управления гильотиной (см. переход 0->6 автомата GuillotineCtrl на рис. 4). Заметим, этот же сигнал немного погодя будет автоматически сброшен автоматом ButtonStart на переходе 2->1 (см. рис. 4). Далее процесс будет развиваться, что и будут отражать текущие состояния автоматов и диаграммы сигналов осциллографа.

Рис. 6. Вид конфигурации при тестировании
Рис. 6. Вид конфигурации при тестировании

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

Рис. 7. Пуск гильотины
Рис. 7. Пуск гильотины

Тем не менее, уже в рамках текущего проекта можно говорить об имитационном моделировании, т.к. в его рамках созданы пусть простые, но все же модели объектов. Дальше, чтобы расширить возможности тестирования, нужно или усложнять модели, или использовать другие подходы к моделированию. Именно об этом и пойдет речь в статье, посвященной гильотине и ее имитационному моделированию.

Заключение

Отсутствие библиотек визуальных автоматов  - существенная проблема среды ВКПа. Копирование автоматов ее в какой-то мере решает.  В конце концов, можно создавать специализированные проекты-библиотеки, представляющие коллекции автоматов. И с подобными проектами-библиотеками мы еще столкнемся. Фактически донорский проект представляет вариант такой библиотеки.

Перечислим еще раз возможности визуальной отладки автоматов в ВКПа, к которым мы пока лишь прикоснулись, а некоторые даже не попробовали. Например, пошаговый режим - обычное дело.  Но в ВКПа его возможности шире. Так, на любом шаге мы контролируем текущее состояние алгоритма (сиречь - автомата). Это контроль на макро-уровне. Обычные программы об этом могут только мечтать. Кроме того, остановившись в текущем состоянии, мы можем "прыгнуть" в любое другое. Ответьте, в какой программе такое возможно?

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

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

Литература

1. ВКПа. Введение, ч. 1.
Визуальное проектирование автоматов. [Электронный ресурс], Режим  доступа: https://habr.com/ru/articles/794498/ свободный. Яз. рус. (дата обращения 24.02.2024).

Ссылка на видео:

https://youtu.be/ao0_vQGNHvc

Теги:
Хабы:
Всего голосов 5: ↑4 и ↓1+4
Комментарии17

Публикации

Истории

Ближайшие события

Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область