Появилась программа, предназначенная для программирования Arduino людьми не владеющими никакими языками программирования. Проект создается на языках FBD, или LAD, широко известных в промышленном программировании. На языке FBD и LAD, программа создается путём рисованиея схемы в графическом редакторе, с последующей автоматической компиляцией в скетч Ардино. Программа бесплатна, и работает на операционной системе Windows. Сайт программы - flprog.ru
Кроссплатформенность? Исходники? Судя по используемым библиотекам сделано на базе OSS, но закрыто и ограничено форточками...
Написано на смолтолке. Возможен перенос на линукс и мак. Исходников нет, но программа бесплатна. Проект в развитии, это первый релиз
А за какое вознаграждение авторы согласились бы перелицензировать программу под одну из лицензий OSI (GPL, BSD, MIT, etc. на выбор) и продолжать ее развитие на условиях этой лицензии? Ну и перенести все на тот же гитхаб скажем...
Очень интересная программа. Завтра попробую вкратце с ней разобраться. Если у Вас есть простые примеры работы с портами и условиями, скиньте пожалуйста ссылки.
Закрутился на работе. Пробежался по ней, но с ходу не очень понял принцип. А так как человек которому планировал поставить сейчас занят, отложил изучение данной программы. Удачи в Вашем проекте.
Мне именно так и поставили задачу, когда просили найти программу. Не найдя такой. Остановился на этой, так как человек умеет работать с Siemens Logo, там тоже можно программировать блок схемами.
Вышла новая версия программы. Добавлены блоки управления сервомоторами, шаговыми двигателями, часы реального времени, дисплей. Так же реализована работа со строками. Скачать можно на сайте программы flprog.ru. Там же в разделе "Документация" доступны видеоуроки и примеры проектов написанных в программе
Язык SmallTalk. Он в принципе самодостаточен. На нем же написан и сайт. Только пускач написан на дельфях, и то в связи с некоторыми особенностями запуска приложений на SmallTalk. Картинки редактирую в паинте. Вполне хватает. Иконки из бесплатных библиотек, ну и некоторые специфичные от Сименса. Надеюсь они не будут на меня в претензиях.)))
А исходники проекта так свет никогда и не увидят? Когда-то разбирался немного со smalltalk... не помню с какой реализацией, Squeak что ли, но там все распространялось в виде образа базы объектов. У вас так же устроено?
Пока нет, если я сам не справлюсь с проектом, то возможно и передам в какие ни будь руки, которым доверяю. Это же как ребенок, и я не готов пока работать над проектом совместно с кем - то. Да и как я уже писал, язык очень специфичен, и например тот же githab не имеет репозитория кода для SmallTalk - а. В определенной узкой команде совместно еще работать можно, если поднять свой репозиторий, договориться о правилах ведения кода, правилах мержа и о многом еще. А если поднять общественный репозиторий версий, и разрешить всем там работать, проект умрет в течении нескольких итераций. Я восемь лет работаю на этом языке, и мы пробовали разные варианты ведения работы в команде. Открытый код у нас не получился.
Да не, хотя бы релизы в readonly, чтобы можно было адаптировать/делать сборки под свою платформу, совершенно не обязательно собственно процесс разработки наружу выставлять. Понятно, что групповая разработка это совершенно отдельная проблема.
Вы немного не понимаете специфику работы смолтолка. Есть виртуальная машина. Это тот самый ексешник который запускается (у меня flp.exe). Есть так называемый образ. Образов два вида. Один - это образ разработчика. Он содержит в себе всю среду разработки, все классы , дебагер, в общем все в чем разарбатывается проект. В процессе работы все изменения кода регулярно публикуются в хранилище версий. Это база данных где весь код раскидан по миллиону таблиц и хранится вся история проекта. При необходимости создать релиз, запускается образ второго типа, так называемый runtime образ. Туда из хранилища кода загружается необходимая версия проекта, он там сжимается, выгружаются ненужные пакеты и классы и он становится совершенно не доступен для редактирования. И вот он уже отдается пользователю. Нет промежуточных результатов.
Образы всегда представляют собой платформо-зависимый бинарник или возможна выгрузка объектов в некоторый неисполняемый файл БД ? Т.е. возможно ли разделить проект на платформо-независимую базу объектов и платформо-зависимую виртуальную машину?
Именно так. Образы платформо - независимые. для применения в других ОС достаточно поменять файл виртуальной машины. И они есть для линуксы, мака и солярис. Но есть небольшая тонкость. Если в программе используются вызовы API то на другой ОС будут падения в этом месте. Часть стандартных функций реализованы с переключением на разные апи в зависимости от используемой ОС. Но если стандартнных функций не хватает, то я пишу собственные вызовы библиотек. Тут естественно вызовы библиотек других ос не прописываются. В моей программе пока два таких места. Это запуск Arduino IDE с передачей ей файла скетча, и работа с cоm портом. Самое смешное что в в базовой поставке есть классы которые дают этот функционал для линукса, но не сделаны обертки для винды. поэтому их пришлось писать самому. Переключение между вызовами можно сделать, но нужно время и эксперименты в целевых ОС. Для линукса я как уже писал буду это делать после создания симулятора. Для мака пока в туманном будущем (когда заработаю на мак ))))) ). Если Вам хочется попробовать поэкспериментировать, то я могу Вам отправить файлы виртуальной машины, рунтайм образ, и инструкции для запуска. А Вы мне расскажете где были падения, и пришлете файлик error.log. Там сохраняется дамп ошибок с параметрами. Кстати очень мощный инструмент отладки. Но это завтра. Для контактов, моя почта support@flprog.ru
totuin, существует ли в FLProg человекочитаемое текстовое представление проекта, которое можно использовать для обмена фрагментами схем посредством, например, чата или форума? Насколько я понял из ваших демо-роликов, вполне возможно выгружать проект в тот же XML или JSON и потом загружать его обратно в объекты и визуализировать.
Сам файл проекта. Этим файлом можно обмениваться. Планируется выгрузка проекта в виде картинки png, для обеспечения возможности печати. С принтером пока не разобрался, да и времени не хватает. Сам проект, это достаточно сложная объектная структура, с сложными внутренними связями. При открытии проекта важно восстановить идентичность объектов, а так же неповторяемость инстансов. Это когда один и тот инстанс объекта находится в переменных разных объектов. При открытии сохраненного проекта важно восстановить это состояние. Насколько я знаю парсеризация объектной структуры в XML не позволяет этого сделать без дополнительных танцев с бубном. Применяемый мной парсер в sixx поддерживает эту функциональность по умолчанию. И вообще я не очень понимаю что Вы подразумеваете под человекочитаемое представление. Тот же XML то же читается с трудом. Да и sixx на него очень пожож. Вот пример внутреннего содержания файла проекта: <sixx.object sixx.id="0" sixx.type="Project" sixx.env="Arduino" > <sixx.object sixx.id="1" sixx.name="programm" sixx.type="FBDProgramm" sixx.env="Arduino" > <sixx.object sixx.id="2" sixx.name="networks" sixx.type="OrderedCollection" sixx.env="Core" > <sixx.object sixx.id="3" sixx.type="FBDNetWork" sixx.env="Arduino" > <sixx.object sixx.id="4" sixx.name="label" sixx.type="NetworkLabel" sixx.env="Arduino" > <sixx.object sixx.id="5" sixx.name="comment" sixx.type="String" sixx.env="Core" ></sixx.object> <sixx.object sixx.id="6" sixx.name="name" sixx.type="String" sixx.env="Core" ></sixx.object> <sixx.object sixx.name="isCollapse" sixx.type="False" sixx.env="Core" /> </sixx.object> <sixx.object sixx.id="7" sixx.name="blocks" sixx.type="OrderedCollection" sixx.env="Core" ></sixx.object> </sixx.object> </sixx.object> <sixx.object sixx.name="project" sixx.idref="0" /> <sixx.object sixx.id="8" sixx.name="variables" sixx.type="OrderedCollection" sixx.env="Core" ></sixx.object> </sixx.object> <sixx.object sixx.id="9" sixx.name="inputs" sixx.type="OrderedCollection" sixx.env="Core" ></sixx.object> <sixx.object sixx.id="10" sixx.name="outputs" sixx.type="OrderedCollection" sixx.env="Core" ></sixx.object> <sixx.object sixx.id="11" sixx.name="globalVariable" sixx.type="OrderedCollection" sixx.env="Core" ></sixx.object> <sixx.object sixx.name="isFBD" sixx.type="True" sixx.env="Core" /> <sixx.object sixx.id="12" sixx.name="controllerDescription" sixx.type="ArduinoDescriptor" sixx.env="Arduino" > <sixx.object sixx.id="13" sixx.name="name" sixx.type="String" sixx.env="Core" >Arduino Uno</sixx.object> <sixx.object sixx.id="14" sixx.name="pins" sixx.type="OrderedCollection" sixx.env="Core" > <sixx.object sixx.id="15" sixx.type="ArduinoDigitalInputOutputDescription" sixx.env="Arduino" > <sixx.object sixx.id="16" sixx.name="number" sixx.type="SmallInteger" sixx.env="Core" >0</sixx.object> <sixx.object sixx.id="17" sixx.name="positionPoint" sixx.type="Point" sixx.env="Core"