PLC.JS — первый по настоящему свободно программируемый контроллер

Мы — небольшая команда инженеров в сфере автоматизации, и у нас есть мечта: чтобы инженерные профессии в сфере АСУ ТП стали престижными и уважаемыми в нашей стране.

Метод, который мы считаем наиболее эффективным в решении данной проблемы, — это снижение порога вхождения ИТ-специалистов в АСУ ТП и их «удержание» в отрасли с помощью популяризации GNU/Linux IIoT-устройств.

Только так, на наш взгляд, отрасль может стать привлекательной для молодых ИТ-шников и выйти на новый уровень.

Как ни странно, с развитием IoT уже появилось довольно много интересных стартапов и устройств в промышленном исполнении (Industrial IoT). Кто-то разработал собственные решения на базе SOM-ов (System-on-a-Module), некоторые и вовсе сделали платы с нуля и успешно поставили на поток собственные девайсы. Это не может не радовать!

Но, к сожалению, у производителей IoT в промышленном исполнении наблюдаются одинаковые проблемы:

  1. Избыточность для задач средней и малой автоматизации и как следствие дороговизна устройств. Поддержка HDMI 2.1, Ethernet 2.5G, NVMe, конечно, здорово, но для небольших задач автоматизации нужны доступные устройства за 10–20 т. р.

  2. Отсутствие поддержки полноценного «GNU/Linux с root-доступом» из коробки. Про сборки с защитой от повреждений и износа microsd даже не говорим. Нужны приемлемые образы с гарантированной работоспособностью, на которые будут легко устанавливаться актуальные программные платформы для решения прикладных задач. Вместо этого обычно предлагаются нестандартные, ознакомительные embedded-сборки сомнительного качетсва.

  3. Третья и, пожалуй, главная проблема — разработчики IIoT устройств продолжают «мыслить в парадигме МЭК 61131–3». Они делают хорошую железку, но программную часть… продвигают вместе со своим «уникальным» инженерным софтом. Обычно это очередной графический дашборд-конфигуратор в стиле IEC. В лучшем случае получается что то вроде «NODE-RED», что для ИТ-шников в конечном итоге мало чем отличается от разработки в МЭК-овских средах.

Мы долго искали IIoT для своих задач, лишённые хотя бы двух первых недостатков, даже обращались к нескольким известным производителям за поддержкой, но к сожалению — либо дорого, либо проблемы с софтом. Так родилась идея создания проекта «PLC.JS», основная суть которого:

  1. Для задач средней и малой автоматизации использовать уже готовые не дорогие одноплатники типа Orange, Raspberry, Banana, RockPi, которыми рынок просто завален;

  2. Не пытаться повторить инженерный софт по лекалам МЭК, а использовать современные среды и инструменты.

Первые шаги

Набросали небольшой чек-лист, что мы хотим получить по железу в итоге:

  • Выбрать пилотный одноплатник.

  • Обеспечить входное питание 24 В постоянного тока, по факту 6–30 В — без этого в АСУ ТП никуда.

  • Добавить аппаратный RTC на микросхеме DS3231SN по I2C — точное время бывает нужно даже для самых простых задач вроде автоматизации вентиляции или освещения в магазине.

  • Добавить интерфейс RS485 на микросхеме ST485BDR/MAX13488 (плата конфигурируется для обеих микросхем), для передачи данных используется UART.

  • Обеспечить небольшую задержку выключения с индикацией на GPIO-ногу после пропадания питания для сохранения retain-данных на флешку. Потому что если у платы плохое питание — не помогут даже правильные настройки системы, ram-диски и readonly-режим. Во время работы ионистор должен заряжаться и находится в заряженном состоянии. После пропадания питания ионистор разряжается через диод на преобразователь L6920DCTR. Сигнал наличия входного питания приходит на GPIO, который можно будет использовать как триггер для безопасного сохранения данных и завершения работы.

  • Поместить плату в стандартный корпус DM4G — устройство должно легко стакаться с любой автоматикой, будь то домашний электрощиток или секционный напольник.

  • Разместить модуль OrangePi так, чтобы были доступны разъемы Ethernet, SD-card и USB-type C. Впихнуть невпихуемое, так сказать.

  • На борту устройства не должно быть входов/выходов, иначе мы попадаем в ловушку — привязываемся к коробочке и потом сложно заменить ее на аналоги при модернизации. На рынке огромное количество готовой и проверенной временем IO-периферии на любой вкус и цвет.

  • Добавить светодиоды индикации чего-либо, а также наличия питания 5 В — для красоты и на перспективу.

  • Стоимость ~15 тыс. руб.

Реализация

Очевидно, сама суть и конструктив стоковых плат прототипирования этому мешают. Основные их минусы: отсутствие корпуса, питание 5В от USB, а также отсутствие общепромышленных интерфейсов связи.

Сперва определились с одноплатником. Было несколько вариантов, но остановились на Orange Pi R1 LTS. Эта версия на RockChip RK3328 имеет небольшой размер и не распухла от переизбытка интерфейсов. Есть два Ethernet-порта и небольшая GPIO-гребёнка. Цена такого одноплатника невысокая.

Общий вид платы Orange R1+ LTS

Общий вид платы Orange R1+ LTS

Потом разработали плату питания одноплатника.

От питания 220 В на первых порах решили отказаться, так как нужно сертифицировать устройство, работающее в сетях 220 В переменного тока. Но на будущее уже решили, что будем использовать китайский преобразователь типа Hi-link HLK-PM01 или подобный от MeanWell. Для первой версии контроллера было решено запитывать контроллер от сети 24 В постоянного тока, которая в 99% случаев есть в шкафах диспетчеризации и автоматики. В принципе понижающий DC-DC преобразователь с AliExpress нам поможет. Но его нужно впаять по-человечески в плату, а также обеспечить подключение питания не через USB Type-C, а посредством двух проводов, по-взрослому, вкручивая их в клеммник.

Далее нужно было определиться с интерфейсами связи и опциями. Выбор пал на RTC и на RS485. На что-то большее просто не хватит пинов GPIO. Микросхему реального времени выбрали DS3231SN, она хоть и дорогая, но у неё хорошая точность (при 2 ppm — 0,1728 сек в день) и имеется специальный вход для батареи, обеспечивающей независимое питание часов на довольно длительный срок. Вместо батареи установили миниатюрный Li-Po аккумулятор 30 мА/ч. Микросхема RTC общается с процессорной платой по интерфейсу I2C.

Интерфейс RS-485 построен на недорогой микросхеме ST485BDR от ST. Основной критерий — питание 5 В. Управление потоком сделано через дополнительный канал GPIO. Но спроектировали плату так, чтобы была возможность установить микросхему MAX13488 со встроенным управлением направлением передачи. Тогда останется одна ножка GPIO в резерве.  Конфигурируется перемычками RJ1-RJ3.

UART - RS485. Версия - MAX13488

UART — RS485. Версия — MAX13488

Теперь про ионистор. По нашим расчётам ёмкости 2,5 Ф должно хватить на 5 секунд, что должно хватить для сохранения всяких Retain-данных, бэкапов и логов в случае пропадания питания. Не стали использовать существующие микросхемы ИБП (например, MAX38888 от Analog Devices), так как дорого и не дождёшься в нынешних реалиях. После Step-Down преобразователя использовали DC-DC Step-UP преобразователь L6920DC. Он работает в режиме байпаса, когда на входе 5 В и поддерживает на выходе 5 В, пока конденсатор на входе разряжается через диод 2D4. Резистор R1 нужен для ограничения тока заряда, иначе «лопнет» диод 2D3 или уйдет в защиту преобразователь MP1584EN.

Super Capacitor - DC-DC L6920

Super Capacitor — DC-DC L6920

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

Фото нескольких попыток в корпусе

Фото нескольких попыток в корпусе

Фото вариантов базовых плат

Фото вариантов базовых плат

Была попытка использовать нестандартную модель корпуса (модель разработана, к литью не подготовлена), но такой путь уж очень дорогой и только для крупных серий продукта. Мы пошли по более предсказуемому и менее опасному пути — использовали готовые китайские корпуса из АБС. Такие продаются на Алике и ЧиД.

Трассировка печатной платы не сложная, нужно было сделать максимально дешево.

Вариант трассировки

Вариант трассировки

Выбор фабрики, на которой будут изготовлены печатные платы, пал на «Резонит». Один раз заказывали на AliExpress через посредников — не понравились сроки. Но производство в Китае не отметаем. Заказывать серию есть смысл. Возможно, даже с поверхностным монтажом, не приценивались.

Создали 3D-модель корпуса в Inventor по чертежам, чтобы примерять платы и видеть объёмную картину. Было два варианта размещения плат в корпусе. Первый — когда плата Orange крепится четырьмя саморезами на дистанционной панели, которая, в свою очередь, фиксируется на втором этаже корпуса.

Версия платы с адаптером

Версия платы с адаптером

Этот дистанционный держатель мы тоже смоделировали в Инвенторе и распечатали на 3D-принтере. Дешево и сердито. Вышло неплохо, но Orange очень уж близко приближался к плате питания, и было неудобно вставлять Ethernet-разъем. На рисунке видно (самый левый корпус). Решили переделать. К межплатному соединителю на 13-контактном хедере пришли только со второй попытки. В первых версиях было на проводах и разъемах с шагом 2 мм.

Теперь Orange крепится на стойках ~20 мм. Стойки печатаем на 3D-принтере, но подойдут и покупные стандартные с внутренней резьбой M2.5 на концах.

Плата без адаптера, на стойках

Плата без адаптера, на стойках

А модель в Altium выглядит так.

MultiBoardModel в Altium

MultiBoardModel в Altium

Полная модель в Inventor.

Модель в Inventor

Модель в Inventor

Фото что получилось.

Фото платы без Orange

Фото платы без Orange

Фото готовой сборки (без клеммы RS485)

Фото готовой сборки (без клеммы RS485)

Фото готовой сборки, вид на ионистор

Фото готовой сборки, вид на ионистор

Резюме

Таким образом, мы получили:

  1. Недорогое серийное IIoT-устройство (себестоимость до 15 тыс. руб.), которое подходит для задач средней и малой автоматизации.

  2. Самое главное — базовый одноплатник не имеет никаких конструктивных и программных модификаций, его легко заменить или обновить ОС от оригинального вендора.

На подходе вторая модификация «PLC.JS Orange PI CM4 edition» — по сути, всё то же самое,  только за основу была взята другая, более интересная плата. Постепенно планируем расширять линейку устройств таким же образом и под другие популярные одноплатники.

Проект на Orange CM4

Проект на Orange CM4

Если вас заинтересуют устройства PLC.JS, начало первых продаж планируем на август 2024, после завершения испытаний.

Все конструкторские исходники будут выложены на сайте www.plcjs.ru после завершения тестирования. Мы будем рады, если наши наработки мотивируют производителей IIoT разрабатывать более универсальные и доступные устройства!

Перспектива

В следующих статьях расскажем о реализации программной части и применении устройств на реальных объектах автоматизации.

Задачу минимум для программной части видим так:

  1. Open Source для базового ПО. Насчет платформы для размещения пока думаем (скорее всего это будет GitFlic).

  2. Проект базового ПО не должен быть привязан к конкретной коробочке. Это должен быть классический Node.js проект, который легко деплоится на любой другой IoT не только нашего производства.

  3. Реализация 100% нативной разработки и отладки прикладного инженерного ПО в современных IDE (ориентируемся на VSCode).

  4. Поддержка самых популярных промышленных модулей ввода-вывода от известных производителей (в виде программных классов). Разработчик прикладного инженерного ПО не должен тратить время на сопряжение IoT и модулей ввода-вывода.

  5. Реализация всех базовых примитивов АСУ ТП: клок-таймер, ПИД-регулятор, мотор, клапан и т.д. (в виде программных классов). Это поможет новичкам в АСУ ТП быстро освоить все базовые примитивы отрасли.

  6. Реализация ModbusTCP Server — программная часть должна «из коробки» поддерживать любые современные HMI-панели и SCADA-системы.

© Habrahabr.ru