Как разработать приложение для автоматизации почти не умея программировать. Прийдется выучить IDE…
Или ты дружишь с паяльником, гуру программирования ПЛК, снифишь PDU в modbus. Но компьютер с Windows и SCADA слишком дорог для проекта или не подходит почему-то еще… И хочется запускать программу на одноплатном компьютере Raspberry PI с доступом к ее переферии GPIO, I2C.
Используя готовые компоненты и библиотеки, можно разрабатывать программу используя языки визуального программирования. К счастью программистов и к несчастью пользователей всех таких систем, настает такой момент, когда нужна функциональность, которая не поддерживается «из коробки». Программы не генерируют другие программы для нашего сложного мира лучше чем программисты и у нас пока есть работа. Перечислим как же можно визуально программировать типовые задачи:
Блок-схемы/Дружелюбный русский алгоритмический язык, который обеспечивает наглядность (ДРАКОН)/Р-схемы и т.п. Что я отлично запомнил по программированию в школе и первых курсах института, так это блок-схемы. Рисование блок-схем подходят для занятий студентов, чтобы как и у солдат, все свободное время было занято работой. Еще одно их применение — обучение программированию на листе бумаге. Ну и наконец, кто-то работает и рисует такие диаграммы, чтобы сдать госпроект по ЕСПД/ГОСТ. Посочувствуем им!
CASE инструментарий — сотни их за заоблачные деньги и часто с сомнительной пользой. Особенно много таких систем используется архитекторами ПО и баз данных.
Диаграмма состояний UML из которой с помощью кодогенерации можно получить заготовку или готовую управляющую программу. Эта диаграмма является примером автоматного программирования. И отлично подходит для проектирования компиляторов, многих электронных устройств и любых задач и модулей систем в которых есть сущности со сложным поведением.
Язык релейно-контактной логики. Этот язык должен быть близок инженерам и тем кто программирует ПЛК. Программирование лифта — один из типичных примеров использования.
Среда визуального программирования LabVIEW позволяет делать достаточно сложные системы визуально и тесно связана с аппаратным обеспечением National Instruments. Понравился пример того как в комментариях на хабре реализовали задачу в визуальном редакторе для сравнения сложности с Delphi решением и обзор LabVIEW.
Reactive BlocksВ этой же статье про Reactive Blocks используется модифицированная UML диаграмма деятельности, которая приспособлена под компоненты проекта и из которой генерируется код. Разработчики сделали plugin для Eclipse со своей моделью, анализатором схем и событиями компонент.
Проект доступен бесплатно для open source проектов, с вполне логичным ограничением. Все созданные вами в IDE Building Blocks станут доступными всем под open source лицензией.
Идеология Reactive BlocksЭто визуальное конструирование приложения из готовых существующих кирпичиков — building block, которые скрывают всю сложность взаимодействия с «железом» и облачными сервисами.
Конечно, сложные алгоритмы лучше писать как java код, поэтому графическая диаграмма и код поддерживаются в синхронизированном состоянии автоматически. Это извечная мечта компонентного проектирования, когда компоненты пишут программисты, а используют их пользователи-эксперты в своей области.
Так же как и не стоит делать из диаграммы — спагетти диаграмму из сотни и тысяч элементов. В этом случае можно поддиаграмму оформить в виде точно такого компонента-строительного блока. В случае open source решения, вы публикуете свой блок, чтобы сообщество также могло использовать его в своих проектах.
Есть возможность автоматически упаковать свое приложение в пакет (OSGI bundle) для платформы Eclipse Kura. Тогда возможен перезапуск приложения без перезапуска контейнера, доступна консоль для администрирования, а также множество сервисов этой IoT платформы и вся мощь существующих компонентов и запускать это на Raspberry PI или Beagleboard Black.
Установка Reactive BlocksЕсть вариант скачать специальную сборку eclipse+Reactive Blocks сразу готовую к запуску со страницы для Windows, Mac OS X или Linux. Другой вариант, если у вас есть установленный Eclipse Neon (4.6)/Mars (4.5)/Luna (4.4)/Kepler (4.3) — нужно указать Update-Site и установить плагин.
В любом случае для сборок Linux, основанных на debian, нужно установить пакет libwebkitgtk-1.0 перед запуском среды разработки:
sudo apt install libwebkitgtk-1.0
Для использования в готовой сборке JDK, отличной от доступной в системе по-умолчанию, нужно добавить строчки в файл reactiveblocks.ini:
-vm
PATH_TO_YOUR_JDK/bin/java
Знакомство с Reactive Blocks
Для доступа к серверу компонент пришлось пройти авторизацию и аутентификацию с помощью Google аккаунта.
Написал вопросы по почте и к чести их инженеров и менеджмента, мне устроили мастер-класс один на один по google hangout с видео конференцией, скринкастом IDE и разбором простого примера. Их ведущий разработчик оказался инженером из аэрокосмической отрасли и любит в свободное время заниматься авиамоделирование и проектирует автопилот.
Мне показался очень интересным пример сигнализации на RaspberryPI с использованием акселерометра.
Поигравшись с разными примерами, посмотрев на содержимое Building Blocks под капотом. Особенно интересно было обнаружить там уже знакомую мне библиотеку OpenIMAJ.
Лично для себя я не нашел преимуществ по сравнению с разработкой под Apache Camel с его компонентами rhiot и возможностями визуализации. Про что скоро опубликую пост и даже рабочий пример уже готов! В своей публикации на хабре Управляем автоматом на Groovy/Java. Как ЧПУ станку в домашней мастерской не превратиться в мульт героев «двое из ларца» я использовал Apache Camel для управлением ЧПУ станком.
Встроенные в процессор BeagleBoard Black RPU подходят для real time задач где не место java с ее GC STW паузами.
Для java программистов, в отличии от инженеров по электронике, возникают мысли по практическому использованию Bitreactive IDE в сложных проектах и надо разбираться:
- как происходит одновременная работа над одной диаграммой нескольких человек;
- как происходит рефакторинг проекта с множеством диаграмм;
- зачем было делать свой сервер для хранения компонент, когда уже есть maven совместимые репозитарии;
- как увидеть diff для разных версий диаграммы?
- как разрабатывать тесты и делать mock для компонент. Вроде как есть генерация для jUnit, но надо углубляться в практику тестирование реальных приложений.
Выводы
Вместо изучения языков программирования вам придется выучить его нотацию схем, компоненты и средство разработки. Нужно ли это программисту?
Это решение больше подойдет для инженеров не специалистов в ПО, которые не хотят вникать в тонкости программирования на java, но хотят использовать всю мощь существующих компонент для связи с «облачными» сервисами IoT, мультимедиа и работы с java библиотеками, обернутыми в building block.