Графическое программирование конечных автоматов для Arduino. Часть 1 |
||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2023-08-22 15:29 Краткая история разработки Представление программного кода в виде конечного автомата подкупает надежностью и предсказуемостью результатов. Действительно, Finite-state machine всегда находится только в одном состоянии, что значительно облегчает поиск ошибок. Но вот ее код весьма объемен и его невозможно сходу охватить взглядом. Поэтому фреймворки, помогающие создавать только код, не пользуются широкой популярностью. Другое дело, графическое представление конечного автомата, например, Stateflow в Matlab. Но Matlab это дорого и тяжеловесно, тем более что упор там сделан на классические автоматы, а программирование - скорее приятное дополнение. Куда больше понравился продукт от Quantum Leaps. Это именно то, что хотелось бы видеть у себя в лаборатории! Но конские цены полностью отбивают всё желание. Выход нашелся: работы Анатолия Шалыто - под общим названием "Автоматное программирование". Очень много полезной теории, но наибольший интерес представляла его ранняя разработка, а именно программа трансляции рисунка Microsoft Visio в код на языке Си. Это было именно то, что нужно. Увы Анатолий Абрамович углубился в академическую деятельность (всецело одобряю), и полезная программа оказалась заброшена. Пришлось повторять уже сделанное, используя концепцию Автоматного программирования в качестве стартовой точки. В результате получился программный комплекс V2S, в котором конечные автоматы представлены графически, а упор сделан именно на программирование. За время эксплуатации, V2S позволила разработать эффективный код в ряде коммерческих проектов. Из самых крупных - система контроля высева пропашных культур "Топаз" на базе микроконтроллера STM32F412. Фрагмент конечного автомата системы "Топаз"Немного о требованиях V2S. Самым быстрым путем реализации графической подсистемы V2S оказалось использование Microsoft Visio 2016, разработчики которого изрядно поработали над средствами автоматизации графических примитивов. Плюс, встроенный в документ VBA (Visual Basic for Aplication), на котором в итоге и написан V2S. Это достоинство (полная открытость кода) и недостаток одновременно: например, необходимо разрешение на запуск макросов в среде Microsoft Visio, что для некоторых представляет проблему в плане личностного неприятия. На GitHub можно скачать свежую версию программы V2S. Это два файла: Auto.vssx, содержит прототипы графических объектов и файл графического документа Microsoft Visio aClockArduino.vsdm (имя не принципиально). Документ можно переименовать по своему вкусу, но нужно учитывать, что после трансляции имя файла принимается в качестве имени глобальной переменной. То есть, только латиница. Оба скачанных файла сохраняем в папку вашего проекта Arduino.Начинаем графическое программирование открытием документа Microsoft Visio. На вопрос о разрешении запуска макросов следует ответить положительно, в дальнейшем этот документ будет занесен в список доверенных, а запрос безопасности перестанет появляться. Но если запрос не появился вообще, возможно в настройках центра безопасности макросы отключены "без уведомления". Тогда следует восстановить настройки по умолчанию. Настройка центра управления безопасностью Visio по умолчаниюАвтомат измерения температуры (пример). Графически, конечный автомат измерения температуры DS18x20 представляет собой прямоугольник. Три текстовых поля по углам: Temperature - имя автомата (латиница), внизу пояснения к автомату (будут размещены в комментариях) и справа вверху - поле изменения цвета. Цвет внутренних элементов измениться только после трансляции (если Вы считаете, что удобнее менять сразу, напишите отзыв - в следующих версиях пожелания будут учтены). Автомат имеет два состояния (иначе называемых вершины), с номерами 10 и 20 соответственно. Каждое состояние включает три текстовых поля, сверху вниз: "Имя автомата" (любой текст, будет размещен в комментариях Си), "Код In" (запускается при входе в состояние) и "Код Out" (запускается при окончательном выходе из состояния). В полях In-Out может быть размещен программный код на языке Си, с учетом экономии места на рисунке, предпочтение обычно отдается вызову функций - так получается нагляднее. Но это правило - не догма, в качестве примера: автомат отправки сообщение через модем (из проекта Топаз) содержит визуально крупные куски кода, но это только улучшило понимание программы. Фрагмент автомата отправки сообщений через модем Вершины объединены переходами, то есть дугами со стрелками на конце. На желтом текстовом поле, поверх линии, записано условие перехода. Это любые комбинации переменных и функций, синтаксис которых позволяет записать их внутрь Трансляция из графики в код. Для начала, следует вызвать рабочее меню трансляции, кликнув правой кнопкой мыши на свободном от графических элементов поле документа. Первая строка меню запустит трансляцию. Меню запуска транслятораСпустя некоторое время, успешность трансляции подтверждает всплывающее сообщение. Всплывающий бокс результатов трансляцииВ папке размещение проекта появятся два новых файла: aClockArduino.cpp и aClockArduino.h (имя соответствует графическому документу Visio). IDE Arduino или Visual Studio Code (последний очень рекомендую для реальной работы) автоматически подтянут эти файлы в проект. И будут делать так в дальнейшем, при каждом запуске трансляции. Откроем файлы на просмотр, прямо из IDE. Как и ожидалось, внутри длинный код. На самом деле, открывать их приходится только при отладке, если же все получается гладко, достаточно графического представления. Тем не менее, большинство важных операций результирующего Си кода снабжено комментариями на выбранном вами языке. Код Temperature() В теории, код обслуживания вершины состоит из трех секций: обработки процедуры входа в состояние, обработки переходов и обработки выхода из состояния. Секция обработки входа представлена функцией in_Temperature(), обработки переходов - функцией conn_Temperature(), а последней секции out_Temperature() нет вовсе, так как поля "Код Out" состояний автомата не заполнены. Функция in_Temperature() в основе классическая switch-case. Номера при Case соответствуют номерам вершин исходного рисунка (именно поэтому номера должны быть уникальны в пределах автомата). В код, помимо пользовательских функций, внесенных в поля "Код In", транслятор добавил вызов функций управления временем задержки Функция обработки входа в вершину Больший интерес представляет функция переходов. В switch-case выполняется проверка функции обнуление таймера Конечный автомат измерения температуры, вместе с прочими автоматами, изображенными в документе Visio, размещены в функции Текстовый блок рекомендаций по интеграции в проект Arduino Текстовое поле подсказки автоматически заполняется при каждой трансляции и содержит актуальные имена функций, их легко можно скопировать для вставки в проект Arduino. Дальнейшие действия потребуют подключения пользовательских функций (например, той же Блок HEADERПомимо текстового поля HEADER, к вашим услугам текстовое поле VARIABLE, куда можно быстро, по мере создания графического кода, размещать переменные (используя стандартные нотации языка Си). А текстовый блок конфигурации, например, позволяет выбрать язык комментариев и даже определиться с IDE результирующего кода - вторым вариантом доступен Keil uVision. Блок конфигурации документаЗаключение. V2S содержит еще много полезных функций, облегчающих жизнь разработчика. Если программа вызовет интерес и окажется полезна сообществу, то их обзор и примеры применения появятся в следующих статьях. Фотографии часов-метеостанции, чьи конечные автоматы рассмотрены в статье. Этот хобби-проект еще в промежуточной фазе, поэтому прошу быть снисходительным к внешнему виду. Фотографии часов-метеостанцииЕсли конструкция и автоматное программирование часов-метеостанции вызвали ваш интерес и, по вашему мнению, заслуживают отдельной статьи, напишите об этом в комментарии. Источник: habr.com Комментарии: |
|