Автоматизация процессов в гидравлических системах ч. 2

от автора

Автоматика для гидравлики

Автоматика для гидравлики

Предыстория

Привет, Хабр!

Какое-то время назад я рассказывал, как прикрутил мозги к своему гидравлическому прессу и что из этого получилось. С тех пор много воды (и масла!) утекло, сделал много нового и хочу этим поделиться.

На тот момент было несколько моделей контроллеров, вот флагманская модель

Автоматика для маслопресса с экраном TFT 2''

Автоматика для маслопресса с экраном TFT 2»

На борту 2’’ TFT-экран, розетка, внутри ESP32, ADS1115 и мелочёвка. Можно выбирать культуру для отжима, запускать процесс и наблюдать его на экране. Точка доступа WiFi от ESP32, асинхронный web-сервер, web-socket, все дела.

Для изменения настроек нужно подключиться к точке доступа, которую генерирует контроллер, и менять эти параметры через web-интерфейс. Работает с любого устройства (телефон, десктоп).

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

Первый шаг к улучшению — экранчик побольше, упаковать автоматику в красивый удобный корпус, что и было сделано: отдал на аутсорс доброму человеку проектирование корпуса, и вот что получилось:

Автоматика с WiFI

Автоматика с WiFI

Оптимизировал монтаж печатной платы — разработал новую, чтобы паять дисплей и энкодер навигации прямо на плату с обратной стороны, в итоге минус 12 проводов:

Печатная плата для автоматики с WiFi в сборе

Печатная плата для автоматики с WiFi в сборе

Поработал над интерфейсами — модифицировал некоторые экраны:

Интерфейсы на экране TFT 2.8''

Интерфейсы на экране TFT 2.8»

Ну улучшил и улучшил, всё-таки были некоторые минусы конструкции:

  • Всё ещё сложно в сборке (пара часов, но и тех жалко)

  • Маленький экран (есть пенсионеры среди заказчиков)

  • Механические элементы уменьшают надёжность (особенно копеешный энкодер)

  • Относительно сложный процесс изменения параметров — подключить WiFi, открыть браузер, вбить адрес, что-то там поделать

Я осознанно на тот момент выбрал способ управления параметрами через web-сервер, так как думал, что так дешевле, чем городить сложные интерфейсы на TFT, и отчасти был прав.

Как я переходил на тачскрин и чуть не поседел

«А что если попробовать тачскрин?» — подумал я. Начал копать, смотреть какие HMI существуют в природе. Рискнул и купил аж 7-дюймовый дисплей с ESP32-S3 на борту

Получил, начал разбираться. Ожидание: работает как телефон, легко программировать. Реальность: нет, нет.

Существует множество разновидностей дисплеев на ES32-S3, и все тормозят примерно одинаково. Второй важный момент — далеко не для всех дисплеев есть конфигурация под PlatformIO, а в другой IDE я принципиально не пользуюсь.

Все примеры для этого дисплея были только для Arduino IDE, для других дисплеев ещё для ESP-IDF, но к подвигу изучения «родной» платформы Espressif я был не готов (да и сейчас тоже). Только VS Code, только родной ардуиновский C++

Каким-то образом я наткнулся на дисплеи Crowpanel 5» от Elecrow. Заказал, получил, один добрый человек помог настроить профиль дисплея с драйверами, чтобы завелось на Platformio — каким-то чудом заработали настройки от похожего дисплея.

На борту помимо UART даже какие-то GPIO доступны, хоть и немного. По сути один ) Есть разъём GPIO, но это дубль I2C, который мне тоже нужен для подключения АЦП.

Понеслась череда экспериментов: за основу взял свой базовый алгоритм запуска программ, подсчёта времени и прочего. Однако предстояло хорошо поработать над интерфейсами. Для этого выбрал EEZ Studio — довольно мощное бесплатное ПО для разработки UI под LVGL — классная библиотека со всеми необходимыми компонентами для построения гибких интерфейсов

Интерфейсы к автоматике, созданы в EEZ Studio

Интерфейсы к автоматике, созданы в EEZ Studio

Вот тут-то и раскрылось предполагаемое удобство работы с системой. Никаких тебе WiFi, всё доступно для редактирования на месте, «как на смартфоне» 

Вся система должна была состоять из:

  • сам дисплей

  • ADS1115 для чтения давления и передачи по I2C на микроконтроллер дисплея

  • Плата питания 

  • твердотельное реле для управления маслостанцией (подключается к единственному GPIO дисплея)

  • Пищалка, сигнализирующая о старте и окончания программы. Использую модуль пассивного зуммера, ему для управления нужен GPIO, а его в запасе нет!

Что ж, собрал интерфейсы, некоторое время потратил на их интеграцию с кодом. 

И вроде всё завелось и как-то работало, но тут я упёрся в ограничение микроконтроллера — ESP32-S3 часто крашился и перезагружался из-за переполнения памяти из-за LVGL.

Путём неимоверных усилий и Copilot (Claude Sonnet тоже) я таки отладил программу — всё хорошо работало и не валилось. Добавил очистку памяти перед каждой перерисовкой дисплея и другие хаки.

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

Мастер и раб: развязываем дисплей и мозги ради стабильности

Решил кардинально переделать структуру проекта — вынес основную логику и управление LVGL на отдельный контроллер ESP32-C3 Zero. Мне понравился формат этой платы — небольшая, достаточно пинов, есть WiFi если нужно.

Собрал макет, переписал почти полностью проект под мастер-слейв: ESP32 общается с HMI по UART. Добавил ещё больше оптимизации, система работает стабильно! Сделал новый корпус, нарисовал новую печатную плату и вот что получилось:

Автоматика для маслопресса на тачскрине 5''

Автоматика для маслопресса на тачскрине 5»

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

Преимущества новой конструкции:

  • ESP32-C3 занимается только логикой управления, а HMI-дисплей — только отрисовкой. Они общаются по UART, не мешая друг другу

  • Удобное управление на тачскрине (больше не нужен WiFi), контроллер полностью автономный, интерфейс понятен пенсионерам

  • Проще в сборке, нечему ломаться

Новый формат

Существуют производства масел, где задействовано несколько прессов, и в зависимости от конфигурации либо одна маслостанция, управляющая несколькими прессами, либо отдельная маслостанция на каждый пресс. Есть такие комплексы от 6 до 12 прессов. Бывает больше, но это довольно редкая история.

Так вот со мной связывались владельцы таких комплексов, вот как примерно проходил разговор:

— У меня 6 прессов, 6 маслостанций. Сколько стоит хорошая автоматика на 1 станцию?

— 40 тысяч рублей

— До свидания!

Или вот так:

— У меня 1 большая маслостанция и 6 прессов, можно придумать автоматику для такой конфигурации?

— Извините, не умею

— До свидания.

Иллюстрация ко 2-му разговору — схематичное изображение комплекса с одной маслостанцией

Одна маслостанция на несколько прессов

Одна маслостанция на несколько прессов

Как это работает: 

  1. Оператор закладывает в бочонки прессов разные культуры

  2. Включает маслостанцию

  3. Рукояткой распределителя 1-го пресса подаёт давление до определённого уровня, переводит рукоятку в нейтраль

  4. Тоже самое с остальными рукоятками

Мощности маслостанции не хватает для одновременной подачи давления в несколько гидроцилиндров. Можно, но давление будет нагнетаться медленнее, и сложнее контролировать необходимое усилие, так как для каждой культуры на старте оно своё. Например, подсолнечное масло начинает капать при 20 бар, а чёрный тмин при 200 бар.
В общем, управление таким комплексом требует опыта, сноровки, аккуратности и довольно много времени.

Почему я не умел автоматизировать такие комплексы? Потому что не пробовал.

Условно можно поставить любую мою автоматику и она будет работать, но запускать/отключать она будет только эту одну маслостанцию, а распределять давление всё равно нужно вручную распределителем. Ну или загружать во все бочонки одинаковую культуру и давить везде одинаково. Но такой способ тоже не всегда подходит.

Таких комплексов в своё время было продано довольно много, и почти все управляют процессом вручную. Есть, конечно, полуавтоматы на релюшках, есть отдельные умельцы, которые смогли сделать что-то близкое к полной автоматизации.

Есть запрос — будет предложение! 

Итак, для автоматизации такого гидравлического комплекса прежде всего нужен электромагнитный распределитель, ведь автоматика умеет только замыкать контакты, и не умеет двигать рукоятки )

Такие распределители существуют:

Распределитель электромагнитный (изображение взято с сайта a1gidro.ru)

Распределитель электромагнитный (изображение взято с сайта a1gidro.ru)

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

Связался с человеком, у которого есть такой комплекс с 6 прессами, есть электромагнитный распределитель, есть какая-то автоматика на ПЛК, и есть желание сделать красоту, собрал требования по алгоритму.

Алгоритм непростой и сильно отличается от одиночной маслостанции с прессом:ё

  • в один момент может подаваться давление только в один пресс (работает только один электромагнит)

  • Маслостанция работает не постоянно: перед подачей давления запускается, работает несколько секунд, электромагнит подаёт давление в какой-то гидроцилиндр, датчик давления фиксирует предел в диапазоне и контроллер выключает подачу давления

  • Если в этот момент другие пресса «требуют» давление, то становятся в очередь, и получают давление только по окончанию подачи в предыдущий

  • Требуется ручное управление: поднять/опустить шток для выпрессовки, для «дожатия» давления на максимальных значениях

  • Ручное управление не должно конфликтовать с автоматическим режимом, тоже есть пожелания к алгоритму (как ручной режим работает в зависимости от статуса процесса)

  • Аварийный режим должен отслеживаться на каждом гидроцилиндре, и в случае срабатыванию отключать всю систему

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

  • Все эти параметры должны настраиваться )

Собрал я по-быстрому новый прототип, переписал ПО под управление несколькими станциями.

Использовал привычный дисплей Crowpanel 5» с LVGL и уже ESP32-Devkit, потому что нужно больше пинов. Крутилки — имитация датчиков давления, светодиоды — электромагнитов.

Прототип автоматики для 6 прессов

Прототип автоматики для 6 прессов

Всё вроде работало, но меня не устраивал риск тормозов или падения микроконтроллера с этим LVGL, ведь тут по UART идёт большой поток данных. 115 кбит — оптимальная скорость передачи по этому интерфейсу, повышение скорости может повлечь потерю данных и «шумы» на линии.

Тонкий клиент

Начал копать, какое решение можно придумать, близкое к промышленному исполнению. На ПЛК с релейным языком переходить не готов — совсем другая вселенная и контроллеры с HMI дороже, а тут бюджет важен, одини гидрораспределитель на 6 потоков стоит 70 тыс + автоматика.

В итоге остановился на дисплеях Nextion — считаются промышленным стандартом

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

Nextion Editor: квест по прохождению промышленного стандарта

К минусам особенностям Nextion можно отнести устаревший редактор интерфейсов Nextion Editor, он только для Windows (пришлось сдувать пыль со старого ноутбука) и давно не обновляется. Этот редактор — единственный способ загрузить файл с UI на дисплей через flash-карту.

Вот кусочек интерфейса Nextion Editor:

Почти все интерактивные компоненты имеют события, которые при клике отправляются в мастер-систему, которая что-то с ними делает. Вот, например, у кнопки скролла прописано:

prints "EDIT_SCROLL_DOWN",0printh 0A

Или вот код обработки кнопки «ОК» на странице редактирования текста

prints "KBD_SAVE",0printh 0Aprinth 43 45printh 0A

Строго без пробела перед нулём, строго printh 0A в конце, иначе дебаггер не пропустит )

В Nextion есть свой встроенный язык программирования с довольно странным синтаксисом и убогим дебагом. В LVGL быстрая прокрутка значений по кнопке организуется готовой функцией, а тут надо разместить на странице компонент с таймером и прописать код:

 // Обработка удержания кнопокif(edtHoldBtn==1){  // row1MaxInc  if(row1MaxV.val<=9989)  {    row1MaxV.val+=10    prints "EDIT_VALUE:0,0,",0    covx row1MaxV.val,tmpTxt.txt,0,0    prints tmpTxt.txt,0    printh 0A  }}else if(edtHoldBtn==2){  // row1MaxDec  if(row1MaxV.val>=11)  {    row1MaxV.val-=10    prints "EDIT_VALUE:0,0,",0    covx row1MaxV.val,tmpTxt.txt,0,0    prints tmpTxt.txt,0    printh 0A  }

И так для каждой кнопки, а их на странице 18 )

Мастер-систему я оставил на ESP32, так как базовый алгоритм уже был готов, нужно было обеспечить отправку команд на отрисовку элементов UI. Думал, это будет несложно ))

Добавил 2-й АЦП и расширитель портов, так как пинов ESP уже не хватало, а нужно их много:

  • 6 реле для опускания штока вниз

  • 6 реле для поднятия штока

  • Ручное опускание штока 6 шт

  • Ручное поднятие штока 6 шт

Для ручного управления решил использовать трёхпозиционные джойстики без фиксации.

Я опущу здесь две недели непрерывной работы над рабочим прототипом, было интересно и довольно сложно.

Весь дизайн сначала создавал в Nextion Editor, но потом решил идти правильным путём — нарисовал все компоненты в Figma:

Я не дизайнер, но люблю чтобы всё было по красоте:

Сначала прототип на промокашке, потом отдельные компоненты

элементы управления

элементы управления

Потом собрал экраны, получилось аж 16 штук. Не пугайтесь, 16 экранов — это не 16 кнопочных меню, а скорее 16 состояний, которые делают управление комплексом из 6 прессов интуитивно понятным:

интерфейсы экранов автоматики на 6 прессов

интерфейсы экранов автоматики на 6 прессов

К сожалению, нельзя вот так просто взять и импортировать дизайн из Figma в редактор Nextion, нужно создавать экраны, расставлять компоненты, указывать вручную размеры и координаты, загружать подготовленные изображения и выбирать их в качестве фона. 

Столкнулся с неожиданностями — в редакторе нельзя нарисовать прямоугольник или круг, нет удобной прокрутки текста (типа стандартного барабана в LVGL). Для всего этого использовал доступные хаки — обходился имеющимися компонентами. Например, в качестве фонового прямоугольника использовал прогрессбар нужного размера с прогрессом 100%, для цветного круглого индикатора — Radio button в одном состоянии.

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

Что в итоге получилось:

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

  • Экран выбора культуры

  • Экран запуска, экран процесса с красивым манометром

  • Экраны редактирования и создания культур

  • Экран кастомной клавиатуры, где каждая кнопка создавалась и позиционировалась с любовью (особенно буква «Ё»)

  • Системные настройки 3 экрана

  • Восстановление заводских настроек

  • Другие служебные экраны

Как обновлять ПО если что

Отдельно хочется рассказать про обновление прошивки. Так как система состоит из мастера и HMI, то обновить прошивку можно только по отдельности, и должна быть возможность делать это удалённо, так как моя автоматику покупают по всей стране, и в моменте может понадобится что-то доработать или поправить баг.

Мне удалось реализовать обновление по воздуху и мастера, и дисплея. Пользователь на специальной странице запускает процесс обновления — по кнопке контроллер создаёт точку доступа WiFi, и загрузив web-страницу, можно выбрать что обновлять.

Мастер обновляется считанные секунды, дисплей — 2 минуты примерно. 

OTA обновление прошивки контроллера

OTA обновление прошивки контроллера

Что ж, пора двигаться к опытному экземпляру! По-быстрому развёл печатную плату (дальше сравните с новой) в Sprint Layout, и пока ждал, занялся корпусом.

Первая версия платы для "Маслобот Мультипресс" в Sprint Layout. Работала, но навела на мысли о переходе на EasyEDA.

Первая версия платы для «Маслобот Мультипресс» в Sprint Layout. Работала, но навела на мысли о переходе на EasyEDA.

Как я делал корпус

«Такой корпус уже не напечатать», подумал я — тут 6 джойстиков, большой экран (в рабочем исполнении будет уже 7’’), блок питания 12В для слаботочки, блок питания 24В для электромагнитов, автомат ампер на 6, аварийный грибок-выключатель, твердотельное реле или магнитный пускатель (для маслостанций на 380В), сама плата с обвязкой в своей коробочке, силовые шины.

Корпус 40х30х17 должен подойти, прикинул я.

Быстро (ну как смог) сделал модель стандартного продающегося на Озоне корпуса во Fusion 360, расположил все компоненты внутри — ну вроде всё помещается. Странно, но в реальности корпус получился точно таким же )

Пока всё это проектировал, собрал в своём ТГ-канале группу владельцев комплексов с несколькими прессами, и нашёлся один реальный заказчик. Ура! Можно заказывать запчасти.

Первые проблемы

Прототип я собирал и тестировал на 1-2 прессах, а максимально планировал управление 6 прессами. С увеличением потока данных, передаваемых по UART, начал ловить тормоза интерфейса. Это даже не тормоза, просто кнопки срабатывали не с 1-го и иногда даже не со 2-го раза.
Долго разбирался в чём дело, оказалось по UART довольно часто ходит «мусор», и сначала  ставил костыли по очистке этого мусора, потом мне это дело надоело, я хочу чтобы всё работало стабильно и чётко, как автомат Калашникова!

Что ж, пора делать по-взрослому, DeepSeek посоветовал переходить на RS-485 (Modbus), якобы тогда точно не будет мусора в UART и всё будет работать чётко.

До этого с Modbus не работал, самое время ставить эксперименты.

Начал выбирать готовые модули — для мастера взял красненький, так как питание у него 3.3В и такой же уровень согласования с RX/TX (UART), для дисплея синенький. 

модули RS-485

модули RS-485

Чуть допилил проект под Modbus, запустил — не получилось то, чего ожидал. Не буду грузить подробностями, оказалось, красненький модуль автоматически переключает приём/передачу, а для моего проекта это не годится, пришлось ставить на мастер такой же синенький модуль с внешним управлением — на этом модуле есть выводы DE/RE, которые объединяются в один и кидаются на GPIO ESP32, тогда полный контроль и всё работает как надо.

В общем с переходом на Modbus экран реально теперь работает круто, все кнопки срабатывают с 1-го нажатия, никакого мусора в данных. Ну и теперь можно экран отнести от щита с контроллером хоть на сотню метров, всё будет чётко работать, этот интерфейс для этого и создавался.

Приехали запчасти и электрический щит, начал проектировать технологические вырезы — сначала врезал дисплей, потом остальное.

Проектирую корпус

Проектирую корпус

За пару дней и ночей собрал конструкцию

Автоматика в сборе

Автоматика в сборе

Новый дисплей 7’’ оказался с динамиком, поковырял доку — может воспроизводить звуки! Записал несколько, теперь при включении здоровается, комментирует запуск процесса, остановку и аварию.

Схемотехника

Собранной платы недостаточно для обеспечения полного функционала — в ней нет расширителя портов и Mosfet-ключей для управления электромагнитами (а их 12 штук).
Расширитель MCP23017 я прикрутил рядышком, также присобачил MAX485 (для Modbus).

Крупным планом печатную плату не выкладываю, не хочу позориться )

Отдельно разместились модули Mosfet для управления электромагнитами. Покупал я их на Алиэкспресс, и два из трёх были бракованные, ну и пришлось допиливать, чтобы оптопара срабатывала от 3.3В. Вот мой отзыв на Али:

бракованные Mosfet-модули

бракованные Mosfet-модули

Пока ехали запчасти, освоил EasyEda, и по ходу отрисовки схемы и новой печатной платы начал изучать, какая должна быль фильтрация по питанию, от ВЧ/НЧ помех, какой модуль «шумит», а на какой достаточно поставить у ног 0.1 мкФ. У
жаснулся, сколько всего ещё нужно добавить для стабильной работы, у меня так было всё по-минимуму. Работает сейчас как и задумано, но для пущей стабильности много чего переработал.

Долго делал и переделывал, и пришёл вот к такому результату:

Новая печатная плата

Новая печатная плата

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

Впервые буду использовать smd-монтаж

smd-монтаж

smd-монтаж

Что есть на платах:

— ESP32, 2xADS1115
— Микросхема MAX485 с обвязкой вместо готового модуля, поставил ещё гнездо RJ-45 для соединения дисплея
— Оптопара для повышения 3.3В до 12 для надёжного срабатывания твердотельного реле
— AMS1117 с обвязкой для питания АЦП и расширителя портов
— LM2596 для питания всей схемы и дисплея в том числе

Заморочился с фильтрацией для стабильности и уменьшения шумов, вот, например, резисторный делитель и RC-фильтр перед каждым из 6 входов АЦП:

RC-фильтр для АЦП

RC-фильтр для АЦП

Продолжаю избавляться от модулей — задизайнил силовой модуль с расширителем портов MCP23017 и Mosfet с обвязкой. Получилось довольно эротично — цифровая и и силовая платы соединяются 4-мя проводами, а не 12-ю от платы к готовым модулям с Али

Силовой модуль

Силовой модуль

К силовой плате подключается отдельный БП на 24В, который даёт 4.5А для электромагнитов распределителя (им достаточно 2.5А), а также сами электромагниты.

Управление Mosfet-ом довольно простое, по классической схеме. Использую IRLZ44N — подходит для моих целей по всем параметрам, даже с избытком. Обязательно мощный диод для защиты от всплесков индуктивной нагрузки, ну и параллельно нагрузке цепочка для индикации подачи напряжения на нагрузку.

Схема включения Mosfet

Схема включения Mosfet

Не счесть, сколько раз я переделывал схему и печатную плату после этого, но кажется, остановился на этой версии. Кстати, EasyEda отвратительно трассирует платы, просто какой-то ленивый кот — подсовывает переходные via там, где они не нужны, ну и многое другое, приходится потом много доделывать руками. Силовой модуль так вообще полностью ручная трассировка.

Вот это всё ручная разводка/доводка — я люблю чтобы красиво было и снаружи и внутри, даже если это никто никогда и не увидит.

трассировка печатной платы

трассировка печатной платы

Что в итоге

  1. Перешёл на тачскрин с интуитивным управлением без WiFi

  2. Разработал архитектуру «Мультипресс» для управления целым цехом

  3. Освоил EasyEDA для создания собственных печатных плат (почти) промышленного уровня

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

За кадром осталось очень много рутины, испытаний и экспериментов.

Наверняка кто-то может сделать лучше, но ведь я только учусь )

Буду рад услышать советы и рекомендации!

Группа по автоматике для гидравлики: t.me/oilpress_auto, сайт с автоматикой: maslobot.ru

P.S. Пока готовил статью, завершил работу над новой моделью — контроллер управления несколькими маслостанциями с одного экрана, но это уже другая история )

ссылка на оригинал статьи https://habr.com/ru/articles/1035360/