Предисловие
Данный цикл статей - не техническая документация, не подробное описание научных идей. Это краткое, обобщенное описание возможностей среды ВКПа на простом примере. Демонстрация процессов и принципов работы в ней. Идеи - проверенная временем часть. Они описаны в статьях, ссылки на основные из них приведены в первой части [1]. Без понимания этого материала невозможно разобраться, зачем вообще нужна подобная среда. Ведь, существует и другое автоматное программирование. Но только идеи, положенные в их основу, другие.
Отличие идей - это главное, чем объясняется необходимость среды ВКПа. Другой такой просто нет, как нет по большому счету и таких идей. И, вообще, без понимания основ теории автоматов невозможно объяснить необходимость данной модели вычислений. Ведь, без автоматов программисты когда-то вполне обходились, а большая часть без них обходится и до сих пор.
Среду ВКПа нужно воспринимать, как программное ядро, реализующее параллельную модель вычислений и оболочку над ним, которая могла быть вполне другой. И среда позволяет это легко сделать. Имеющаяся оболочка кому-то может показаться весьма неудобной - то же обилие диалогов. Но, во-первых, объективно оценить это можно лишь поработав в ней. А, во-вторых, как показывает опыт, восприятие - больше дело привычки. Для автора она удобна. Здесь многолетняя привычка и больший опыт работы с технологией автоматного программирования. Но и то и другое - основные тренды, влияющие на внешний вид и на функциональность оболочки.
Введение
Продолжим изучение возможностей среды ВКПа, рассмотрев проектирование полноценной системы управления (СУ) гильотиной. В первой части на примере лишь ее части - автомата датчиков был достаточно подробно рассмотрен процесс визуального проектирования автоматов. Теперь уделим основное внимание копированию автоматов и их тестированию.
Для демонстрации выбранных приемов создадим конфигурацию, из которой будем заимствовать автоматы, а в качестве основы нового проекта воспользуемся предыдущим. Назовем его базовым (или просто - базой). В конфигурации, которую мы будем называть донорской (или просто донором), к автоматам, которые будем копировать, относятся - сам автомат управления гильотиной, таймер для него, модели двух объектов - кнопки управления гильотиной и модели самой гильотины, визуализаторы для каждого автомата и настроенный осциллограф.
Вид загруженной донорской конфигурации приведен на рис. 1. И это то, что в конечном итоге необходимо нам получить.
Создание заготовки проекта
Создадим каталог для нового проекта и перенесем в него базовый проект. Пусть имя нового каталога (далее - рабочего) будет ExampleGuillotine. Напомним, что каталог базы - Sensors2. Копирование файлов конфигурации базы выполним, например, с помощью Total Commander. Но, заметим, это же можно сделать с помощью самой среды ВКПа, как это было описано в предыдущей статье [1].
Откроем новую конфигурацию, выбрав ее каталог, и удалим автоматы, которые будут замещены одноименными автоматами из донора. Просто так мы с ними перенесем из донора и их настройки. К данным автоматам относятся следующие автоматы автоматного пространства (далее просто пространства) с именем SysDlg:
· InputCanals,
· OutputCanals,
· Result,
· Schema,
· TickPlay.
Для удобства запуска проекта запомним текущий каталог и уберем флаг для вывода диалога выбора конфигурации. После этого, чтобы зафиксировать изменения в проекте, рабочую конфигурацию можно перезапустить.
Копирование автоматов
После перегрузки проекта выберем из основного меню среды пункт Сервис, а в нем - Копирование/удаление автоматов. С помощью отрывшегося диалога выберем донорскую конфигурацию - GuillotineCtrl(Donor). В результате он примет следующий вид, показанный на рис. 2.
В автоматном пространстве InitFsaWorld донора выберем автомат GuillotineCtrl, который реализует алгоритм управления гильотиной (см. рис. 3), и нажмем кнопку создать. Если в рабочей конфигурации открыто одноименное пространство, то перенесенный автомат сразу же будет отображен в списке. Автомат Sensors2 в рабочей конфигурации уже есть (из базового проекта).
Открываем другие автоматные пространства. В пространстве TimerModels выберем автомат TimerGuillotineCntrl. Из пространства Models - автоматы ButtonsStart и ModelGuillotine (см. рис. 4) Из них первый моделирует работу кнопки управления гильотиной, сбрасывая через какое-то заданное время сигнал запуска гильотины - GuillotineCtrl.bStart. Второй моделирует гильотину, реагируя на сигналы управления гильотиной и устанавливает с паузой, имитирующей передвижение гильотины, значения локальных переменных автомата Sensors2, соответствующие датчикам гильотины - Sensors2.snsDown и Sensors2.snsUp.
Открыв пространство SysDlg, копируем автоматы, удаленные на этапе создания заготовки рабочего проекта - InputCanals, OutputCanals, Result, Schema и TickPlay. Копируем также визуализаторы: для моделей кнопки и гильотины - это визуализатор ViewButtonAndGuillotine, для автоматов управления гильотиной и его таймера - ViewGuillotineCtrl, ViewTimerGuillotineCtrl.
Тестирование конфигурации
Открываем (в пространстве InitFsaWorld) автомат управления гильотиной - GuillotineCtrl и настраиваем его визуализатор. Аналогично настраиваем визуализатор автомата Sensors2. Для наблюдения за сигналами запускаем осциллограф. Сделать это можно кнопкой Show диалога управления глобальными и локальными переменными среды (см. открытый диалог среды с заголовком DirVariables:FDirVariables (<имя процесса>:<имя автомата>).
Для наблюдения за работой моделей кнопки и гильотины открываем их визуализатор. В целях демонстрации другого варианта воспользуемся так называемую картинкой - Схема приложения. Как это сделать, включая путь настройки и запуска визуализатора для моделей кнопки и гильотины, вызвав картинку, показано стрелками на рис. 5.
Для тестирования конфигурации удобно иметь ее вид, который показан на рис. 6 (см. также рис. 1). И уже сразу по виду графов можно сказать, что гильотина находится в верхнем положении. Эту ситуацию отражают состояния автоматов Sensors2 и ModelGuillotine.
Для запуска гильотины нужно перейти в диалог InputCanals и установить флаг поля GuillotineCtrl.bStart (рис. 7). Это запустит процесс управления гильотиной (см. переход 0->6 автомата GuillotineCtrl на рис. 4). Заметим, этот же сигнал немного погодя будет автоматически сброшен автоматом ButtonStart на переходе 2->1 (см. рис. 4). Далее процесс будет развиваться, что и будут отражать текущие состояния автоматов и диаграммы сигналов осциллографа.
Далее через диалог входных каналов можно изменить значение таймеров и посмотреть, как это повлияет на работу приложения. О расширении возможностей тестирования за рамками данного диалога мы поговорим в следующей статье, создав имитационную модель гильотины.
Тем не менее, уже в рамках текущего проекта можно говорить об имитационном моделировании, т.к. в его рамках созданы пусть простые, но все же модели объектов. Дальше, чтобы расширить возможности тестирования, нужно или усложнять модели, или использовать другие подходы к моделированию. Именно об этом и пойдет речь в статье, посвященной гильотине и ее имитационному моделированию.
Заключение
Отсутствие библиотек визуальных автоматов - существенная проблема среды ВКПа. Копирование автоматов ее в какой-то мере решает. В конце концов, можно создавать специализированные проекты-библиотеки, представляющие коллекции автоматов. И с подобными проектами-библиотеками мы еще столкнемся. Фактически донорский проект представляет вариант такой библиотеки.
Перечислим еще раз возможности визуальной отладки автоматов в ВКПа, к которым мы пока лишь прикоснулись, а некоторые даже не попробовали. Например, пошаговый режим - обычное дело. Но в ВКПа его возможности шире. Так, на любом шаге мы контролируем текущее состояние алгоритма (сиречь - автомата). Это контроль на макро-уровне. Обычные программы об этом могут только мечтать. Кроме того, остановившись в текущем состоянии, мы можем "прыгнуть" в любое другое. Ответьте, в какой программе такое возможно?
В рамках FAutomaton нет проблем "на лету" изменить, добавить предикаты/действия, условия переходов и перечень исполняемых при этом действий, т.е. изменить таблицу переходов автомата. Таким образом, мы можем "лепить" алгоритм и нам за это почти ни чего не будет. Вы знаете подобные программные технологии, кроме автоматной?
Процесс отладки - это, конечно, захватывающий процесс. Но он может быть не только интереснее, но и эффективнее. Далее нас больше будет интересовать графика и имитационное моделирование. Это позволит сделать процесс разработки еще более наглядным и значительно расширить возможности отладки.
Литература
1. ВКПа. Введение, ч. 1.
Визуальное проектирование автоматов. [Электронный ресурс], Режим доступа: https://habr.com/ru/articles/794498/ свободный. Яз. рус. (дата обращения 24.02.2024).
Ссылка на видео: