Этот маленький комп неспроста так быстро и широко разошёлся по всему белу свету. Маленький, достаточно шустрый, непрожорливый (потянет даже зарядка от мобильника) девайс за недорого. К тому же, слыхать, уже в наличии клоны за ещё более недорого. Я, старый автоматизатор, знаю цену таким вещам. Вот прям сейчас, далеко ходить не надо, на столе валяется процессор Beckhoff cx9020:
Это тоже по сути своей комп примерно такого же размера как малина (если не считать конструктив), CPU ARM 600мГц, 512мБ RAM, в общем похож на старую версию R-PI. Он давно валяется и никто не помнит почём его брали. В инете у всех все цены по запросу, как сговорились. Вот [здесь](http://www.dom-intel.ru/magazin/oborudovanie/kontrollery/bec...) не постеснялись обозначить цену на похожий, но более слабый комп: без малого 110 косарей просят на момент написания поста!
Ладно, к чёрту Beckhoff, есть у меня где-то наш аналог - питерский [fastwel]l(http://www.fastwel.ru/products/fastwel-io/programmiruemye-ko...). Не поленился, нашел, вот он:
Тут тоже arm на 600мГц, памяти сколько не помню, а эзернета вообще нет, не говоря про wifi. Но всё равно будем считать где-то рядом с малинкой. В районе 40 тыр, если мне гастрит не изменяет, стоили они год назад (уточнил - 41726 с ндс). Плюс срок поставки примерно месяц, т.к. в питере только магазин, а производят их сами понимаете где. Вот так то.
Можно поискать и найти у нашего, к примеру овена, ПЛК в разы дешевле, но я искал с соизмеримыми с малиной параметрами, поэтому прочее не в счёт.
К чему я это? Я, повторюсь, спец по автоматике, поэтому смотрю на малину как на ПЛК - программируемый логический контроллер. И поэтому искал похожее на рынке ПЛК. Если оценивать малину как медиаплейер, то, возможно, на рынке медиа-девайсов она будет не так выгодна, не знаю ибо не меломан.
Итак, ПЛК - это тот ракурс, в котором мне хотелось бы посмотреть на сей сабж в свете его технико-экономических достоинств.
Что можно сотворить из маленького шустрого ПЛК не сразу окинешь взглядом. Тут, как говорится, редкая птица до середины долетит. Можно очертить только сферически - хобби-конструирование (роботы, самолётики и тп) ну и всякая разная домашняя автоматизация. Промышленную не рассматриваю, т.к. могут полететь помидоры, зачем мне это (я хоть и сравнивал по ценам с бэкхоффом, но прекрасно понимаю, что малину как она есть в шкаф промобъекта никто не поставит, 'не положено' как в армии говорят).
А раз домашняя, то малина в двойном плюсе и вот почему. Первый плюс - малую цену - мы уже видели.
Второй плюс. Обладая высокой производительностью, мы получаем доступ к классу средств разработки для дорогих и 'настоящих' ПЛК. Я имею в виду языки программирования стандарта МЭК 61131-3 :
На картинке выше среда разработки CODESYS, в которой можно кодить как раз на таких языках.
С++ или МЭК?
Чем языки МЭК лучше С++ или питона, спросят многие. Ну, если программа простая, просто ножками подёргать для курсовой, то ничем не лучше. Но сложная программа (читай - прикладная, т.к. любой практически ценный труд неизбежно обрастает сложностями) требует от разработчика продвинутых навыков и хороших средств отладки. Матёрый программер справится и на gcc, кто бы спорил. Но если человек хочет за неделю вкурить теорию и через две уже что-то получить на выходе, то подобные инструменты ему, как говорится, доктор прописал. Т.е. если есть некий порог вхождения, то для МЭК он заметно ниже.
Это можно почувствовать на таком примере. Допустим, вы приобрели малину и захотели создать простейшую C-программку, мигающую светодиодом:
#include <gpio.h>
int main(void) {
bool led;
gpio_init(/*здесь должны быть данные инициализации ножек GPIO*/);
while(1) {
gpio_write_do(1 ,led);
led = !led;
usleep(100);
}
return 0;
}
Этот код 10 раз в секунду изменяет состояние 1-го пина GPIO. Если вы никогда не программировали на С, то тут мало что понятно. А что писать в строке gpioInit вместо комментария непонятно вообще никому, кто не ознакомился со спецификой библиотеки поддержки GPIO.
Теперь вот как это может выглядеть на мэковской FBD-диаграмме:
Ну вот, совсем другое дело. Тут три функциональных блока:
- gpio_init настраивает режимы входов-выходов GPIO;
- blink генерит мигающий (1/0) сигнал;
- gpio_do итак понятно что делает;
Всё-таки в визуальном программировании что-то есть, особенно если учесть то, что среда разработки сама позаботится о компиляции и загрузке программы в ПЛК, а хелп (подсказку) по используемым функциональным блокам (тот же gpio_init) можно получить двойным кликом тут же, не отходя от кассы. А в процессе работы это окно открывается под отладчиком и значения всех переменных видны. А кроме FBD (язык блочных диаграмм) в МЭК-овской среде можно использовать похожий на Паскаль ST (структуированный текст) и/или SFC (язык последовательных диаграмм, на котором можно делать ну очень сложные и ветвистые проги). И это ещё не все языки МЭК...
В общем, МЭК или не МЭК решайте сами.
МЭК для малины
МЭК 61131-3 он конечно один, но реализаций много. Некоторые производящие ПЛК фирмы даже разработали свои среды для программирования своих изделий. Как правило там всё ограничивается FBD. Но это к слову, т.к. для малины варианта всего 2 - либо используем CodeSys, либо что-то другое.
1. CodeSys (cds)
Фирма S3 разработала МЭК-совместимую среду программирования, по навороченности соизмеримую с MS Visual Studio. Но, в отличии от MS, раздаёт её БЕСПЛАТНО. Хотя, это как сказать бесплатно, сам-то компилятор (интегрированная среда разработки - IDE) бесплатный, зато ПЛК платные. Производители ПЛК, если хотят сделать свой продукт программируемым в CodeSys, платят денежку S3. И, разумеется, закладывают эту денюжку с стоимость ПЛК. Но в случае с малиной схема другая. Тут уже сами S3 сделали таргет (target - среда исполнения программ на уровне ПЛК) для малины и раздают его за небесплатно (по-моему, 50 евро цена вопроса). Т.е. имея в руках малину запустить в ней CodeSys-ную прогу не получится, если перед этим не запустить на малине codesys-таргет.
На самом деле тут всё довольно просто делается, вот [здесь](http://www.asutp-volgograd.com/blog/raspberry-pi-codesys-int...) популярно об этом рассказано.
2. Что-то другое это ISaGRAF
Сразу признаюсь, статья заказная. Сам себе заказал с целью ознакомить малиноводов именно с этим вариантом. Был (и есть) такой продукт ISaGRAF. Эта среда программирования ПЛК во многом аналогична CodeSys-у, до недавнего времени этот продукт даже доминировал на рынке, но в последнее время чаша весов CodeSys, по-моему имху, перевесила. Суть в том, что разработчики ISaGRAF, строго говоря, не брали денег с производителей ПЛК за доступ к себе и вся тайная кухня для портирования таргета у них, в отличии от CDS, открыта (по крайней мере до версий 3.Х). Зато IDE (пользовательская среда разработки) платная.
В настоящее время ISaGRAFы доразвивались до 6 версии и, если не ошибаюсь, восприняли схожую с CDS стратегию на 'бесплатную' IDE.
Не одну собаку съемши на изаграфе, могу посоветовать поюзать всё-таки изаграф в его 3 версии, т.к. последующая гигантомания версий 5 и 6 (4 кривая и не в счёт) простому любителю малины вроде как ни к чему.
Схема работы по данному варианту следующая:
- [качаем](http://homeasutp.ru/viewtopic.php?id=9) таргет;
- пишем его SD-карточку и вставляем в малину (записать образ на SD можно [программой Win32DiskManager](https://sourceforge.net/projects/win32diskimager) );
- покупаем изаграф 3.5 и работаем, либо [скачиваем](http://homeasutp.ru/viewtopic.php?id=9) оценочную версию и тоже вполне себе работаем;
- быстрый старт описан [здесь](http://homeasutp.ru/viewtopic.php?id=3);
Можно написать не только прогу для малины, но и сделать доступ через веб с кнопками, индикаторами и трендами. Т.е. малина работает как сервер apache (он там и есть), а вы можете обратиться к ней по ip (через wifi или провод) и увидеть что происходит в вашей суперсистеме в браузере компа, планшета или (если зрение позволит) мобильника. Графика векторная (svg)! И не только видеть, но и управлять:
Правда для этого придётся задействовать javascript.
Плюс данного варианта ёщё в том, что этот таргет не боится случайного отключения. Эта проблема решена за счёт выбора ОС, там и там линукс, но в первом случае (CodeSys) это Raspbian, а в случае ISaGRAF это TinyCore, который целиком сидит в RAM и обращений к SD не требует.
Подключение малины к 'чем-нибудь поуправлять'.
Вот тут может быть большая засада если нет достаточных познаний в схемотехнике.
Есть разъём GPIO, на который можно выдавать управляющие сигналы или снимать состояния сигналов входных. В штатном варианте это только дискретка, т.е. выдать/принять логический ноль (0 вольт) или единицу (3,5 вольт). Аналоговых сигналов как таковых на нём нет, разве что в качестве аналоговых выходов использовать 2 выходных канала ШИМ с RC-фильтром. Сигналы маломощные, выходят они прямо с ножек процессора без какой-либо защиты и гальваноразвязки. Так в серьёзных ПЛК не делают, по этому я и упоминал про то, что нельзя малину сразу в промшкаф.
Если малина встроена в робот, машинку или беспилотник, то вопросов нет. Но если подключить к GPIO другие устройства со своими цепями питания или даже провод длиной несколько метров, то разница потенциалов или наводки с проводов могут запросто выжечь проц. В таких случаях подключать сигналы к GPIO нужно используя развязку по подобной схеме:
А что делать, если нужно опросить аналоговые сигнале, например сопротивления датчиков температуры? Или если требуемое количество сигналов превышает 27 дискретных входов/выходов разъёма GPIO? Тогда самое время освоить шину АСУТП всех времён и народов modbus, благо это всего два провода интерфейса RS485. Про modbus очень много есть в сети, применительно к малине могу только дать ссылку на такие вот свистушки:
Этот порт 485-го интерфейса можно заказать на [aliexpress](https://ru.aliexpress.com/item/Free-Shipping-USB-to-RS485-48...) по цене ниже $1. Т.е. сама малина по rs485, а значит и по modbus работать не сможет, для подключения к modbus нужно вставить в USB указанный адаптер. Далее подключаем двумя проводами малину к modbus-совместимым устройствам ввода вывода. Таких устройств на одной линии может висеть много, главное чтобы все они поддерживали работу на одной и той же скорости передачи данных. Самые асутп-шные скорости это 9600 и 19200 бит в секунду. Но если к одной скорости прийти не удаётся (например одни девайсы понимают только 9600, а другие только 38400), то придётся организовывать 2 сегмента modbus и закупить 2 usb/rs485 порта.
Вот типичный представитель самой демократичной на данный момент [линейки](http://icpdas.ru/) устройств ввода-вывода для modbus:
Хотя, если порыться на китайской барахолке, то наверняка можно найти ещё более демократичные клоны.
Чем хорош модбас - по двум проводам можно контролировать серьёзные количества сигналов, что немаловажно для умнодомашних приложений.
Ну и в качестве тоста на посошок. Использовать малину в качестве ПЛК нужно и можно, но осторожно, если использовать GPIO.
Тем более весь высокотехнологичный инструмент есть, нужно только помнить о его наличии).