СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

| сохранено

H Arduino — всем в черновиках Из песочницы

image

    Достаточно давно на мировом рынке и в нашей стране появилась аппаратная платформа Arduino.

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

    Эта история началась почти год назад. На моей новой работе ко мне подошёл мой коллега, и попросил помочь с созданием прошивки для контроллера Arduino. Парень — электрик, золотые руки. Он хотел с помощью контроллера автоматизировать полив теплицы по довольно хитрому алгоритму. Вот тогда мне и пришла в голову идея обеспечить его инструментом, для самостоятельной работы с контроллером. Вот что получилось.

    Цель проекта — перевести программирование Arduino в область доступную для не программистов, сделать разработку устройств на нем возможной для тех, кто не владеет языками программирования.

    В области программирования промышленных контроллеров уже давно используются языки FBD и LAD. У разных производителей реализация этих языков различна, но с моей точки зрения, наиболее близко подошли к идеалу программисты из “Siemens”, создав пакет «TIA-Portal». В разработке программы «FLProg» я многие идеи черпал оттуда. Так же удачные решения подчерпнуты из программного обеспечения “Schneider Electric” — «Zelio Soft».

    FBD (Function Block Diagram) — графический язык программирования стандарта МЭК 61131-3. Программа образуется из списка цепей, выполняемых последовательно сверху вниз. При программировании используются наборы библиотечных блоков. Блок (элемент) — это подпрограмма, функция или функциональный блок (И, ИЛИ, НЕ, триггеры, таймеры, счётчики, блоки обработки аналогового сигнала, математические операции и др.). Каждая отдельная цепь представляет собой выражение, составленное графически из отдельных элементов. К выходу блока подключается следующий блок, образуя цепь. Внутри цепи блоки выполняются строго в порядке их соединения. Результат вычисления цепи записывается во внутреннюю переменную либо подается на выход контроллера.

    Ladder Diagram (LD, LAD, РКС) — язык релейной (лестничной) логики. Синтаксис языка удобен для замены логических схем, выполненных на релейной технике. Ориентирован на инженеров по автоматизации, работающих на промышленных предприятиях. Обеспечивает наглядный интерфейс логики работы контроллера, облегчающий не только задачи собственно программирования и ввода в эксплуатацию, но и быстрый поиск неполадок в подключаемом к контроллеру оборудовании. Программа на языке релейной логики имеет наглядный и интуитивно понятный инженерам-электрикам графический интерфейс, представляющий логические операции, как электрическую цепь с замкнутыми и разомкнутыми контактами. Протекание или отсутствие тока в этой цепи соответствует результату логической операции (истина — если ток течет; ложь — если ток не течет). Основными элементами языка являются контакты, которые можно образно уподобить паре контактов реле или кнопки. Пара контактов отождествляется с логической переменной, а состояние этой пары — со значением переменной. Различаются нормально замкнутые и нормально разомкнутые контактные элементы, которые можно сопоставить с нормально замкнутыми и нормально разомкнутыми кнопками в электрических цепях.

    Программа «FLProg» позволяет работать на обоих языках: и FBD и LAD. При создании нового проекта Вам предложат выбрать язык программирования, в котором вы будете создавать проект и контроллер, на котором этот проект будет реализован.

image

     Проект в «FLProg» представляет собой набор плат, на каждой, из которой собран законченный модуль общей схемы. Для удобства работы каждая плата имеет наименование и комментарии. Так же каждую плату можно свернуть (для экономии места на рабочей зоне, когда работа над ней закончена), и развернуть. Красный индикатор в наименовании платы указывает на то, что в схеме платы есть ошибки.

image

image

     В правой части рабочей зоны расположена библиотека элементов. В схему элементы переносятся простым перетаскиванием. При двойном клике по элементу будет показана информация о нём.

Блоки FBD:

image

Блоки LAD:

image

image

    В верхней части рабочей зоны расположен список Tags (FBD) или установленного оборудования (LAD). Тэги или оборудование переносятся на схему также простым перетаскиванием.

image

image

     После завершением работы над проектом, производится компиляция проекта. После компиляции Вас попросят указать директорию, куда будет сохранен откомпилированный проект, и автоматически откроется программа «Arduino 1.0.5» c загруженным скетчем Вашего проекта. В программе «Arduino 1.0.5» Вам необходимо будет указать номер COM порта, к которому подключен Ваш контроллер, выбрать его тип, и произвести заливку скетча в контроллер.

image

    Скачать программу можно на сайте проекта: flprog.ru. Если будет возможность, я планирую развивать проект. В первую очередь увеличить количество блоков, добавить специализированные блоки часов реального времени (этим занимаюсь в текущий момент), специализированных блоков для дисплеев, сервоприводов и других устройств. Так же в ближайшее время планирую прикрутить к программе симулятор. Подглядел неплохую идею у Mitsubishi. В более далеких планах — отказ от Arduino IDE и переход на чистый С. Мне очень интересно мнение уважаемых хаброжителей о целесообразности этого проекта.

    P.S. Прошу не кидать в меня тухлыми помидорами за оформление хаба и сайта. К сожалению я и Его Величество Дизайн живем на разных полюсах этой планеты. Так же прошу извинения за возможные проблемы с сайтом. Он крутится на простеньком домашнем сервачке на Атоме, и в случае хаброэффекта может лечь.

комментарии (42)

+10
mishasamin ,  

Лично я думаю, что Arduino надо программировать нормально, а не на «графическом языке программирования». Смысл Arduino был именно в этом. А иначе надо покупать RCX или NXT, и программировать в RoboLab или LabVIEW и, кстати, они более удобны, чем Arduino с графическим языком программирования.

+1
Zibx ,  

Мне интереснее чем было обусловлено создание того редактора кода что идёт в стандартной поставке arduino.

+3
totuin ,  

Замысел проекта как раз и состоит том что бы работать с Ардуино могли и те люди, которые далеки от языков программирования. Что скажите делать инженеру Пете, который хочет сделать освещение лестницы в своем доме. Он нашёл недорогую железяку которая позволит реализовать его задумку. Изучать С, или идти на поклон к программисту Саше. Я хочу дать ему возможность самому решить эту задачу, используя свои умения. Почему микроконтроллеры должны оставаться вотчиной программистов?

0
+2 –2
dmbreaker ,  

Ну там С примитивный — что там учить-то? При желании необходимый минимум за пару выходных выучить можно.

+1
totuin ,  

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

+5
+6 –1
Int_13h ,  

За 10 лет работы в сфере автоматизации я пришел к следующим неутешительным выводам. Если человек не сталкивался с программированием, то запрограммировать железяку на чем-нибудь из МЭКовских языков для него непосильная задача. Электрик-электронщик понимает, например, схему на релейной логике, но составить программу сложнее «Если I1 и I2, то Q0» не может. Программисты-профессионалы как огня боятся графических языков, поэтому программируют исключительно на STL. А вот если человек не только умеет программировать, но еще и со схемотехникой знаком на уровне «в детстве я сам собрал эппл-2»- пишет на всем и программы такой сложности, что без бутылки потом не разберешься даже марсоход можно запустить.

–4
+2 –6
father_gorry ,  

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

У ардуино сейчас две проблемы: то, что нормальный код можно писать только на C и следующая из него синхронность: всё управление программист как-то должен уместить внутри одного цикла и этим циклом думать. Тем, кто вырос веб-программистом, это тяжело, и мы ждём реализаций Javascript для микроконтроллеров. Но оказывается, есть еще ваш — третий путь. И это хорошо и правильно.

+5
dcoder_mm ,  

Какого одного цикла? Прерывания там запретили?

–6
father_gorry ,   * (был изменён)

Конечно, там есть прерывания. Но многие их не используют, поскольку неудобно или мозги не поворачиваются соответствующим образом. В JS наоборот, setTimer очень удобен.

+2
KawaiDesu ,  

Попробуйте объяснить, как вы видите скриптовой язык с динамической типизацией на микроконтроллерах, где памяти кот наплакал и всего 16 MHz?

+4
father_gorry ,  

Мой кот большой и грустный, он наплачет 84Mhz и 512Kb на Arduino Due. И уже, оказывается, есть Espruino — Javascript для микроконтроллеров.

+3
Ariman ,  

Аргумент «люди не используют прерывания, поскольку неудобно, давайте вместо С писать на JavaScript, потому что там есть таймеры», мягко говоря, абсурдный.
Если нужна абстракция от прерываний и многозадачность, достаточно любой ОС, коих для микроконтроллеров просто великое множество.
FreeRTOS та же. Контроллер не навязывает никаких ограничений на организацию прошивки, и уж тем более, этого не делает ардуина.

0
father_gorry ,  

По запросу FreeRTOS на этом сайте можно найти пост №129105, и описываемое в нём «введение» выглядит гораздо страшнее введения в Arduino. Нет, этого не достаточно для начального освоения. Как художник, я к этому не притронусь.

+1
Ariman ,   * (был изменён)

Ну так это профессиональная ОСРВ. Есть и более легковесные и простые. К тому же, чем это от ардуины отличается для тех, кто не хочет лезть внутрь? Можно просто взять уже портированный под свой кристалл код, бездумно заинклудить его и радоваться. Тогда никаких разбирательств с архитектурой не будет.

+1
father_gorry ,  

А зачем вы предлагаете профессиональное решение там, где нужно простое и любительское?

+2
KawaiDesu ,  

Но зачем?

0
father_gorry ,   * (был изменён)

Если помните, Ардуино взлетело потому, что делалось для художников, а не инженеров. Этот проект еще удобнее для нас.

0
Prometheus ,  

По дизайну ПО, я бы советовал присмотреться к «World Machine» (world-machine.com).

Там другое использование программы — генерация ландшафта. Но очень даже ничего продуманны цепочки логических блоков — i.imgur.com/gk0K9.jpg

в простейшем варианте логический блок имеет вход, выход.
i.imgur.com/AV1Dz.jpg

+1
gorbln ,  

Забавная ситуация. Ардуину в своё время сделали, чтобы люди, далёкие от железок, могли сделать, чтобы их программа «моргала светодиодиком». А теперь вы делаете ещё один уровень абстракции — чтобы, люди, которые даже не умеют программировать, могли поморгать светодиодиком. Даже не знаю, к чему это приведёт, но с интересом наблюдаю.

0
Jey ,  

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

+2
totuin ,  

Я наверное повторюсь, но основная идея проекта вообще отказаться от программирования в данной ситуации, то есть человек делает то что он умеет- просто рисует схему. Ему не надо думать как программисту. И не надо уметь программировать. Он творит в той области где он силен.

0
Jey ,  

Это очень интересно. На самом деле. Просто мне, как программисту, сложно воспринимать построение алгоритма в таком виде. Возможно, это в самом деле другой тип мышление и ваш метод будет лучше «ложиться» на мышление инженера.

+1
Jey ,  

Вот кстати альтернативный вариант www.gasolin.idv.tw/public/blockly/demos/blocklyduino/index.html
Тоже визуальное программирование, только используется Google Blockly — я такой же метод использовал в MajorDoMo, чтобы люди могли писать сценарии не зная PHP, но в итоге пришёл к вышеприведённому выводу.

+2
totuin ,  

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

+2
+3 –1
Ariman ,  

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

Аналогичная ситуация с ПЛИС. Ну не могут многие инженеры «старой закалки» осилить VHDL или Verilog. В итоге вместо адекватного описания структуры ПЛИС в нии творятся просто адские вещи — километровые экраны таких вот картиночек, составленных из базовых логических элементов, как в древних учебниках.
И что-нибудь там поменять — дело долгое и тяжелое.

Это надо искоренять всеми силами, а не потворствовать.

+1
+3 –2
totuin ,   * (был изменён)

Этот комментарий как раз показывает разницу в мышлении инженера и программиста. Вас пугают листы схем, но любой электрик, или наладчик легко прочитают принципиальную схему релейной автоматики защиты дизельгенератора на 10 листах. А от понятного Вам читабельного кода, с кучей странных слов они ужаснутся. Обслуживают и могут разрабатывать устройства с тем уровнем автоматизации который может обеспечить Ардуино как раз они. С Вашей точки зрения пользователи Windows должны искоренять всеми силами пользователей Linux потому что они пишут огромные простыни непонятных скриптов вместо понятных и простых кликов мышью.
Моё мнение не надо никого принуждать заниматься не своим делом. Кто может — пускай пишет на С. Благо редакторов много. Ну а кто лучше разбирается в принципиальных схемах — пускай разрабатывает их.

+4
Ariman ,   * (был изменён)

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

Язык описания аппаратуры для того и придумали, чтобы упростить процесс, уменьшить вероятность ошибки и сделать поддержку более простой. Вместо этого лезут недоинженеры, которые не способны его освоить, со своими «мы так 20 лет уже делаем и будет еще 20 так делать». И чем хлопать в ладоши, глядя на то, как какой-нибудь Петрович после бутылки водки может вспомнить номер контакта в 100-листовой схеме, лучше подумать немножко и понять, что:
1) Петрович не вечен и рано или поздно возникнет очень серьезная проблема, когда новый работник не будет знать эти 100 листов, хотя бы потому, что, в отличие от Петровича он не провел на предприятии 60 лет.
2) Что новые инструменты позволят внести изменения без этих самых 60 лет на предприятии, а также существенно сократить время на их внедрение
3) Что отказываясь от современных инструментов инженер с каждым годом становится все более и более профнепригоден — как пример, все те же любители картиночек, не способные осилить контроллеры и поэтому пихающие огромные избыточные плис, при этом вынося часть логики (!!!) в аналоговую часть — просто потому что не понимают, что можно поставить DSP и все обработать в цифре, а очередная «картиночная» прошивка в ПЛИС просто не лезет.

0
zx83 ,  

В корне в Вами не согласен! В вашей интерпретации повышение квалификации — это изучение еще одного языка программирования! Так не должно быть! Человек не должен подстраиваться под машу! Машина должна подстраиваться под человека, в данном случае язык программирования. Я принципиально не хочу учить С, но это не значит что я плохой специалист. Я решаю проблему удобными для меня средствами.

А теперь представьте, Вас кинули на проект «Управление генератором» написанный в «С». Сколько Вам потребуется времени разобраться в нем и внести КОРРЕКТНЫЕ изменения? Час? Сутки? Я думаю не меньше суток. А теперь представьте, что «С» Ваш не профильный язык и вы о нем вспоминаете раз в месяц, на таких случайных проектах. Сколько в этом случае потребуется дней, чтобы скорректировать работу генератора? А теперь представьте программу «Управление генератором» на наглядном языке FBD. Пусть на 100 листовой схеме, но логически понятной. Не нужно помнить о синтаксисе, процедурах и т.п. Достаточно одного взгляда, и программист понимает как это работает и время на корректировку программы уменьшается до несколько часов.

Что по вашему «Современные инструменты»? Навороченные и мало понятные языки программирования?
По моему, современные инструменты — это те, с которыми может справиться школьник, инструменты сделанные для людей, а не для машин.

+1
Ariman ,   * (был изменён)

То, что вы сейчас говорите, аналогично следующему: «я не хочу разбираться в каких-то там стандартах на схемы и буду рисовать как мне удобно, и не важно как их потом будут читать. Вот мне удобно изображать резисторы кружочками, транзисторы треугольничками, а конденсаторы — волнистыми линиями. Это не значит, что я плохой специалист, я просто решаю проблему удобными для меня средствами».

Это НЕ решение проблемы. Это кривая замена, которая по всем параметрам проигрывает правильному решению.
Избыточность решения, из-за непонимания современных средств? Есть — вместо компактного решения избыточные огромные ПЛИС с огромной же прошивкой, в которую не вмещается часть логики. Плохая поддерживаемость? Есть. Вместо кода (с контролем версий, кстати!) — огромные схемы, в которых путаются сами авторы и в которые внесение изменения занимает на порядок больше времени, чем следует. Трудности при передаче проекта другим специалистам? Есть. Потому что другие специалисты охреневают от этой реализации, в которой логика так размазана, а схемы настолько громоздкие, что кажутся чьей-то шуткой.

Современные инструменты — позволяют решить задачу оптимально. И пока вы привели в качестве контраргумента только свои хотелки «я принципиально не хочу учить, я решаю как мне удобно», а результат — откровенно проигрывающий по всем объективным параметрам проект. Вот ТАК быть не должно.

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

И где, кстати, я говорил про «изучение еще одного языка программирования»? Я говорил не про то, что «надо пойти и взять молоток с ручкой другой формы», а то, что пора бы, наконец, отложить молотки в сторону, плюнув на то, что уже 50 лет только ими и работаешь, и взять пилу, если задача «распилить деревяшку».

0
Lerk ,  

«Язык описания аппаратуры для того и придумали, чтобы упростить процесс, уменьшить вероятность ошибки и сделать поддержку более простой. Вместо этого лезут недоинженеры, которые не способны его освоить, со своими «мы так 20 лет уже делаем и будет еще 20 так делать».»
Вы бы не горячились, а то смешно выглядит. Вы никогда на ПЛИСе не добьетесь той компактности, быстроты и экономичности по потреблению схемы, которую сможет сделать хороший инженер-схемотехник на кастомном кристалле. Более того, схемотехник, который еще и шарит в аналоговой схемотехнике — клад для любого предприятия.

Если вы не шарите в схемотехнике на уровне логических вентилей, то транзисторный Вас повергает в ужас? Про топологию можно не вспоминать?

PS. Ну а по теме: wiring и так тормозной до жути язык программирования. Делать над ним надстройку аля LabView это извращение. Наиболее популярные ардуины на 168ой атмеге и так не шибко шустрые(даже если на asm'e кодить), а уж с таким программированием… только на пару светодиодов и хватит.

+1
Ariman ,   * (был изменён)

Какой, к черту, кастомный кристалл? Какой транзисторный уровень?
Они берут ПЛИС, берут стандартную XILINXовскую среду, и рисуют ту же схемку, что можно описать в VHDL, но в графическом виде. Откуда экономичность, откуда компактность? Как генерил XILINXовский софт внутреннюю топологию, так и генерит, только исходные данные вместо строгих и удобочитаемых превращаются в адскую мешанину.

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

0
totuin ,  

В современных системах промышленного программирования языки FBD и LAD являются основными. Практически все системы АСУ написаны на них. Есть подготовленные инженеры которые работают с ними. Вы предлагаете их всех уволить за профнепригодность, поскольку они не знают текстовых языков программирования. Языки программирования — это не современный инструмент, а просто еще один из инструментов, и в своей рабочей практике тому же инженеру АСУП его применить просто негде, да и не нужен он. Такие гиганты в производстве контроллеров как Сименс и др. практически отказались от языка STL в пользу FBD и LAD

+1
Ariman ,  

Я предлагаю уволить не их, а тех кто использует неправильно выбранные инструменты по причине «я не хочу осваивать ничего другого» в ущерб итоговому результату.

+1
LumberJack ,  

Пусть Ardublock здесь полежит. Вкратце, это тоже самое, но на java и встраивается в стандартный ардуиновский IDE.

+1
aterentiev ,  

Спасибо большое за FBD! Коллеги инженеры-PLC-шники благодарны будут. У программы есть английский интерфейс?

0
totuin ,  

Благодарю Вас, коллега PLC-шник. К сожалению я не настолько хорошо знаю английский язык, что бы сделать перевод всего интерфейса. Технически с локализацией проблем нет. Нужна только помощь в правильном переводе. Если кто — то сможет с этим помочь, я буду только рад реализовать локализацию

0
aterentiev ,  

На днях посмотрю программу, может сам помогу. Обещать пока не буду.

0
totuin ,  

Заранее спасибо

0
serafims ,  

Боюсь, это тупиковая ветвь. Допустим, я повар. Мне нужен мульти таймер с лампочками. Я умею готовить блюда, и думаю о пропорциях и температуре. Как это мне поможет сделать таймер?

+1
totuin ,  

Вам предложат супер-нож с помощью которого вы из колбасы вырежете таймер и он будет работать так как надо. Как то так

+1
grossws ,  

Когда работал в области HVAC (вентиляционная автоматика) досталась мне схема на FBD (оно бывает не только МЭКовское, если что), с трудом влезавшая в используемый контроллер. Разрабатывалось это хорошим инженером, а не программистом. Поэтому все прелести были в наличии: дырявые абстракции, размазанная и неочевидная логика, огромная схема. Благо предыдущий разработчик (инженер) выделял блоки, что несколько понизило градус безумия.

Что мне в FBD крайне не нравится — отсутствие возможности использовать VCS, что приводит к куче файлов вида программа-<базовая версия>-для-<заказчик>-<объект заказчика>-от-<дата последнего пересохранения под новым именем>.xxx

0
0x433 ,  

FBD постепенно выбирается из своей ниши. Сначала CANNY 7, теперь Arduino. Похоже спрос на такие инструменты увеличивается.