Я инженер АСУ ТП. Много лет искал Modbus Tester, о котором мечтал — удобный, бесплатный, работающий везде. Не находил. В итоге мы вместе с ИИ-ассистентом сделали его сами — за один день.
Что не устраивало в существующих
Настольные программы глючат и зависают в самый неподходящий момент.
Бесплатные версии режут функционал: то тегов мало, то экспорт только в Pro.
Только Windows — а у меня Linux, у коллеги macOS.
На чужом ноутбуке ничего не поставить — политика безопасности, и ты сидишь без тестера.
Нужные функции разбросаны по пяти разным утилитам.
Что получилось
Веб-тестер, который работает прямо в браузере. Chrome, Edge, Opera. Ничего не устанавливать. Windows, Linux, macOS — одинаково. И главное — не глючит и не зависает. Открыл, подключил USB-RS485, работаешь. Хоть час, хоть сутки. Настройки сохраняются, соединение не отваливается, ничего не надо перезапускать.
Что умеет
Чтение и запись — все функции Modbus: 01, 02, 03, 04, 05, 06, 15, 16. До 125 регистров одной командой. Перед отправкой видно HEX-кадр запроса.
Сканирование Slave ID — находит устройства в линии 1–247 за пару минут. Не надо перебирать вручную.
Brute-force адресов регистров — перебирает диапазон и показывает рабочие адреса. Спасение, когда нет документации.
График в реальном времени — до 100 000 точек на линию, несколько параметров одновременно, свои имена и цвета тегов, автошкала или ручная шкала.
Математика на графике — считает формулы прямо по регистрам: #0 - #1, avg(#0..#4), if(#3 > 100, 1, 0). Перепад давления, среднее по датчикам, пороговые сигналы — без Excel.
Визир с прилипанием — навёл мышь на график, видишь точные значения всех линий в этот момент времени.
Звуковая сигнализация — пищит при обрыве связи. Порог, повтор, тип сигнала — настраивается. Фон страницы меняет цвет: зелёный — связь есть, жёлтый — ошибки, красный — обрыв. Видно издалека.
Мониторинг с HEX-логом — каждый запрос и ответ в HEX, с метками TX/RX и временными штампами.
Экспорт в CSV — скачать или дозаписывать в тот же файл каждые 500 опросов. Данные не потеряются.
Статистика связи — счётчики отправленных, полученных, ошибок. Сразу видно качество линии.
Плюс мелочи: тёмная тема, сохранение тегов и цветов в браузере, автоопрос, калькулятор глубины записи, скрытие линий кликом по легенде.
Честно о минусах
Работает только в Chrome, Edge и Opera — Safari и Firefox пока не поддерживают Web Serial API. Только RTU и ASCII — Modbus TCP в планах.
Но все минусы временные. Плюсы — фундаментальные.
Как сделали
Я не программист. Писал задачу по-русски, ИИ генерировал код, я тестировал на реальном железе и говорил «не работает — вот ошибка». Через пару итераций — работало.
Утро — первое чтение регистра. День — таблица, запись, мониторинг, лог. Вечер — график, имена тегов, звук. Ночь — тесты на датчиках и ПЛК. Основа была готова за один день.
Booz Allen проверила две передовые модели на изолированном стенде, имитирующем предприятие. Без исходного кода и инженерной документации агенты достигли поставленных целей во всех восьми сценариях. В одном испытании от первоначального доступа до систем промышленного управления прошло чуть больше 16 минут; в другом за несколько минут удалось заставить двигаться роботизированную руку.
Это была лабораторная имитация, а не взлом действующего завода. Кроме того, оператор-человек подтверждал каждый эксплойт и действия с физическим эффектом.
Предысторию разработки собственного рантайма, IDE, поддержка 61131-3 смотрите в моем блоге - ссылка в конце статьи.
В целом была идея, разработать отечественный рантайм для ПЛК и IDE к нему, которые были бы шустры, легки и производительны. Пока, как мне кажется, это удается. Скомпилированный бинарник IDE сейчас занимает около 1 мб. Запущенный рантайм, в текущей реализации, занимает около 5 мб ОЗУ и несколько процентов цпу ( до 5%) на Распберри 4, на нескольких одновременно работающих конфигурациях. В общем, понемногу движемся в правильном направлении, товарищи. Сегодня, хотел бы показать дальнейшую эволюцию этой идеи.
Немного про стек разработки. Напомню, что IDE и рантайм для ПЛК у меня разработаны под Линукс. Пишу на C++, собираю под Cmake как под x86-64, так и под ARM. В качестве внутренней коммуникации реализовал свой бинарный протокол, на базе ZeroMQ и FlatBuffers. Транслятор с промышленного языка — ANTLR. Из промышленных протоколов коммуникации, пока поддержка - Modbus. Планирую добавить в дальнейшем OPCUA. IDE — написан на чистом C++ и Qt Рантайм — чистый C++ IDE с рантаймом общаются по собственному бинарному асинхронному протоколу, о котором писал выше.
IDE поддерживает два типа логики IL и ST. Зачем IL спросите вы? Исторически, случилось так, что рантайм начался с этого языка. И это не совсем IL — это полный аналог языка устройства Tesys T. Сами разработчики писали о нем как об structural text языке. Короче, я собирался реализовать рантайм, и чтобы он полностью поддерживал программы, которые были написаны для Tesys. Также мне понравилась как он был реализован. Вот так с тех пор он и остался, и благополучно работает.
Дерево элементов конфигураций ПЛК.
Фокус на элементе логики на IL
Фокус на элементе логики ST
Один элемент конфигурации — это 1 логика своего типа (IL или ST). Он же, отдельный выделенный поток для исполнения данной логики. Каждый поток, работает независимо и в параллель. Сколько элементов — столько и параллельно работающих потоков, исполнителей логики.
Компиляция. Для компиляции ST 61131-3 я написал свой транслятор на базе ANTLR. Перед загрузкой, логика компилируется в IDE и проверяется на ошибки. Успешно или нет логика скомпилирована, информация выводится в панель снизу.
Ошибочная компиляция программы на ST
Компиляция успешна!
Сохранение и открытие. Теперь конфигурации можно открыть и сохранить из IDE. И да, это банальный элемент, но без этого никуда. Что кстати требует довольно приличного времени на проектирование, разработку итд.
Настройки подключения и проверка связи.
Подключаем к ПЛК очень просто. Нужно на вкладке настроек подключения вбить настройки IP адреса и кнопку «Подключиться».
Настройки подключения
Если подключение успешно, в статус панели значок подключения сменит цвет на зеленый. Если связи нет, или был обрыв — иконка сменит цвет на красный.
Есть связь с ПЛК! Кнопка подключения сверху - как кнопка питания.
Связи нет.
Завел кнопку для запроса у работающего ПЛК перечень конфигураций в работе.
Перечень конфигураций в работе на ПЛК.
На ПЛК летит команда, с запросом. Список конфигураций высвечивается в нижней панели.
Три конфигурации - логики активны, и работают в параллель на ПЛК
Набор кнопок, с разным функционалом.
Кнопка отправить все конфигурации на ПЛК
Спокойно, загружаем и выгружаем через IDE с ПЛК конфигурации.
Автозапуск. Загрузив через IDE в рантайм 1 раз конфигурации, которые он благополучно сохранит и при его перезагрузке стартует снова с ними же.
В одной из прошлых статей, писал про разработку программного осциллографа, чтобы писать аварийные события в формате COMTRADE. Это больше для устройств РЗА, конечно, но скажем в устройстве Tesys T осциллографа сильно не хватало. Короче он также может запускаться в составе рантайма, хотя его можно и отключать. В той прошлой статье, я писал про него подробно. У него крутая возможность — с его помощью можно генерировать самые разные осциллограммы, причем можно создавать различные аварийные режимы.
Отладка.
Код на ST 61131-3 у меня в IDE можно отлаживать на «живом» рантайме ПЛК. Завел кнопку Отладка.
Кнопка с жуком - это отладка.
Когда у нас фокус на какой либо конфигурации и мы на связи с ПЛК, после нажатия на Отладку, на ПЛК летит команда — перезапустить поток в специальном отладочном режиме. Это в принципе такой же рабочий режим, все сигналы всё то же самое, что у нормального, но у него имеют некоторые существенные отличия от нормального режима. В общем, поток с логикой перезапускается в отладочный режим и мы можем ставить точки останова.
Отладка переменных - пока всё по нулям
Ставим точку останова, там где программа заходит в участки кода на ST. Может и не зайти, если там есть условия итд. Наблюдаем в окне имена и значения переменных в зоне видимости участка кода программы.
Тут логика активирована сигналом - переменные со значениями.
Нужна помощь в реализации единого выбора параметра из множества. Проектирую интерфейс для конвейер, где есть выбор между двумя скоростями. Как сделать так, чтобы при выборе одного параметра, другой блокировался? Нельзя было сделать множественный выбор.
Панель оператора Omron, среда разработки интерфейса NB-designer.
Почти на любом современном производстве есть ПЛК. Эту штуку нередко называют «Мозгом», но редко объясняют что конкретно она делает.
Что же такое ПЛК? Для начала это программируемый логический контроллер. Представьте оркестр из множества пускателей, двигателей, сервоприводов, конвейерных линий и так далее. Дак вот ПЛК – это дирижер того самого оркестра.
А теперь научное определение, программируемый логический контроллер – это специализированное электронное цифровое устройство, которое предназначено для автоматизации технологических процессов и работы в системах реального времени.
Откуда ПЛК знает что происходит вокруг? Этот контроллер имеет входы и выходы. Входные модули отвечают за получение цифровых и аналоговых сигналов из внешних устройств, таких как датчики температуры, давления или уровня. Выходные модули, в свою очередь, отправляют сигналы на исполнительные устройства.
Рассмотрим как ПЛК принимает решения. Помимо модулей входа и выхода программируемый логический контроллер имеет центральный процессор. ЦП является хранителем памяти, логики и коммуникаций, также это место, где находится созданное разработчиком программное обеспечение. На основе этого ПО и данных, которые были получены от датчиков, ПЛК управляет выходными сигналами, контролируя работу механизмов, устройств и оборудования.
Представьте конвейерную ленту. Оптический датчик видит, что пустая бутылка подъехала по конвейеру на место розлива. Датчик давления проверяет, есть ли углекислый газ в системе. Программа внутри ПЛК получает сигналы от датчиков и сравнивает их с заданным алгоритмом. Если бутылка на месте и давление в норме, контроллер начинает действовать. ПЛК подает сигнал на открытие электромагнитного клапана подачи воды. Включается таймер. Когда время истекает, клапан закрывается, а конвейер делает шаг вперед для подачи следующей бутылки.
ПЛК часто программируют на языке релейных схем (Ladder Diagram), делается это для того, чтобы инженеры на производстве смогли легко разобраться в логике. Для этого им не придется учить сложные языки программирования.
Список основных плюсов ПЛК: гибкость для задач разных сложностей, надежная работа в сложных условиях, простота программирования.
в тот самый момент, когда поняли (на самом деле это был долгий и по большей части безрадостный момент): готовые контроллеры не вывозят наши промышленные условия, готовые алгоритмы "деревянные" и не гнутся под технологию процессов. Тот пост неожиданно для нас попал в горячее, собрал много комментариев и вопросов из ответов на которые и собран этот пост.
Но сначала коротко о том, кто мы и зачем всё это затеяли.
Мы не про «импортозамещение», мы про «своё и лучше»
Инкрустированная "камнями" поверхность. Одна из плат расширения к контроллеру.
Мы не копировали западные образцы. Мы с ними работали и думали: "Что нам не нравится в существующих решениях? Что ломается в поле, о чём молчат производители и чего не хватает?"
И вот что мы насобирали за годы работы на реальных фермах.
1. Ограничения сред разработки. Даже в самых продвинутых универсальных средах есть жёсткие ограничения, не позволяющие полноценно реализовать сложные алгоритмы.
2. Энкодер и модули ввода-вывода. На длинных линиях при управлении пусковыми аппаратами возникают импульсы. Модули ввода-вывода, в том числе те, что должны принимать сигналы с энкодера, от этих помех сходят с ума. Или не видят сигналы с датчиков. В результате - потеря позиции, хаос, остановки, убытки.
3. Сбои. Система требует ручного перезапуска, еще хуже если настройки не сохраняются или требуется перепрошивка, а до неё ещё добежать надо. Это часы простоя, особенно ночью.
4. Закрытые протоколы. Никакой интеграции с другими системами, всё зашито намертво. Вы не можете забрать данные.
5. Разрозненность мировых решений. Существуют отличные алгоритмы - решения мировых лидеров. Но они разрозненны: одна система - для навозоудаления, другая - для микроклимата (и это отдельно шторы, отдельно вентиляторы, отдельно орошение, приточка), третья и четвертая - для КНС и Сепарации, пятая - для дезинфекции доильных аппаратов. Все от разных производителей, с закрытыми протоколами. Между собой не связаны. Не позволяют синхронизировать процессы. И их сложно, а чаще невозможно дополнить, оптимизировать или адаптировать под реконфигурацию исполнительного оборудования.
6. Отсутствие удобного человеко-машинного интерфейса. У большинства решений:
нет веб-интерфейса, где можно было бы посмотреть состояние системы, изменить уставки или перенастроить логику прямо с телефона или ноутбука;
панель оператора, если она есть - недружелюбная, с архаичным меню и/или кривым переводом, которую, к тому же, еще и отдельно надо программировать;
а если и есть ПО для ПК - оно проприетарное, требует установки, весит гигабайты, не работает без "родного" программатора.. и на немецком.
В результате любое изменение в системе — это вызов инженера или программиста, поиск программатора, установка софта и потеря времени. Вместо того чтобы открыть браузер, зайти в настройки и за пару кликов изменить параметры или тут же через встроенный Wi-Fi обновить прошивку, вы тратите часы на поиск нужного кабеля, совместимой версии ПО и человека, который умеет с этим работать и, по опыту, ему ехать до фермы километров 300.
А есть и «альтернативы»:
Мировые лидеры — калибровка выполняется по току, упором в ограничитель. Скрепер просто упирается, ток резко растёт — и система запоминает эту точку как конечную. После 4-5 таких калибровок редуктор ломается или станцию вырывает из креплений.
Потому что при первых запусках, в период приработки ответных плоскостей механизмов к свежему бетонному полу навозных аллей, упор происходит с полным усилием двигателя.
Другие "альтернативы" - вообще без энкодера. Вся логика защиты завязана на одном единственном параметре - токе двигателя. Превысил - значит, препятствие. А если датчик тока вышел из строя или дал ложный сигнал? Или настроили большой ток, чтобы не отвлекаться лишний раз на штатные инциденты? Всё...
...но рано делать поспешные выводы
Мы сделали свой контроллер не чтобы "заменить", а чтобы решить эти проблемы раз и навсегда.
Мы собрали в одном устройствевсе технические и программные функции, которые предлагают западные лидеры для каждой подсистемы (навоз, климат и т.д.) - плюс дополнительный функционал, которого у них нет. Добавили техническую устойчивость к нашим реалиям: гальваническую развязку, широкий диапазон питания, аппаратную самодиагностику, энергонезависимую память с ресурсом 14 триллионов циклов перезаписи и гибкое программное обеспечение.
Как мы чуть не поседели во время локального апокалипсиса
Самая стробоскопическая история, которая лучше любых цифр доказывает, что мы не зря старались.
Однажды летом на одной из площадок в 70 гектаров (к слову, стоимостью более 30 млрд. рбл.) случился электромагнитный ад: штормовой ветер, ливень, проблемы на линии 10 кВ. Трансформаторы заискрили, включились резервные дизель-генераторы, у некоторых оказалась перепутана очередность фаз - случилось все и сразу!
Что произошло с "чужими" контроллерами? Они дружно ушли в защиту и ждали перезапуска. Инженеры под дождём бегали бодрить системы водоподготовки, тепловые пункты, вентиляцию, попутно пробегая мимо наших систем.
А мы - те, кто еще недавно жег оборудование заказчика направо и налево бегали вместе с ними. И когда всё успокоилось, к нашему общему, с заказчиком, изумлению - 100% наших систем отработали штатно. Без ручного перезапуска. Без нашего вмешательства.
Примерно так мы выглядели, когда поняли, что всё работает
Наши "Операторы" - просто пережили всё. Те, что управляли скреперами, заметили, что двигатель крутится не в ту сторону (очередность фаз), и самостоятельно реверсировали контакторы. Там, где сработали тепловые реле (отсутствие одной из фаз), контроллер зафиксировал инцидент и терпеливо ждал сброса, там, где питание пропадало и появлялось – продолжалась работа, не потеряв ни позиции энкодера, ни текущего шага техпроцесса.
Что под капотом
Что внутри и чем это отличается от того, что есть на рынке.
Шкаф (+4 пульта) для управления четырьмя независимыми скреперными приводами навозоудаления
Энкодер и позиционирование У нас не просто "есть энкодер". На любую пару дискретных входов можно подать сигнал энкодера - до 10 кГц (можно увеличить). Этого достаточно, чтобы отслеживать положение скрепера с точностью до миллиметра (длина аллеи 120+ метров). И позиция сохраняется в Backup-регистрах, которые питаются от батарейки. Даже если питание пропадёт, контроллер помнит, где стоит скрепер, куда ехал и что делал.
Восстановление после сбоя 50 мс - загрузка ядра. 200 мс - полный старт с Wi-Fi. Без потери позиции, без ручного перезапуска. Это не просто цифры. Это оптимизированный код. Это скрепер, который не "забывает", где он остановился, и продолжает цикл с того же шага многоступенчатого динамического алгоритма.
Память - три уровня - Backup-регистры (CR2032) - для позиции энкодера и текущего состояния в алгоритме. Чтение - мгновенное. Даже если питание пропадёт, контроллер знает, где стоит скрепер и на каком этапе цикла остановился.
- FRAM - для моточасов и данных, которые перезаписываются постоянно. Ресурс - 14 триллионов циклов. Для сравнения: у обычной EEPROM - 100 тысяч. Если бы мы писали моточасы в EEPROM, он бы умер через пару месяцев. FRAM живёт десятилетиями.
- EEPROM - для настроек и калибровок. Там, где не нужна частая перезапись, EEPROM работает без проблем и не деградирует десятилетиями.
Гальваническая развязка 1500 В RS-485 с развязкой 1500 В - чтобы частотники и длинные линии не сбивали энкодер, не убивали каналы и не дотягивались до ядра. Это не опция. Это стандарт.
Ждём, пока придумают Python. И контрактное производство.
Питание 5-60 В Контроллер работает от любого источника в этом диапазоне. Терпит скачки, от которых теряют сознание платы конкурентов. Встроенная аппаратная защита - диод от переполюсовки и предохранитель. Программный контроль напряжения непрерывно отслеживает питание и при критических отклонениях отключает каналы, защищая оборудование. По значению питания в разрешении миллисекунд мы видим даже срабатывание промежуточного реле.
И ещё один важный момент: у нас на борту "жирная зона питания" с запасом по току. Даже после отключения электроснабжения и после отключения блока питания контроллер продолжает писать логи и регистрировать отказы ещё 2–3 секунды. Эти события помечаются как «отказ питания» и не смешиваются с техпроцессом. Это даёт полную картину: если что-то пошло не так, мы знаем — куда механизмы успели "доехать", посчитать импульсы энкодера, пока он их еще может отправлять.
Для нормальной работы нам не нужны дорогостоящие блоки автоматического ввода резервного питания, дополнительные аккумуляторы и остальные приборы и устройства фильтрации для качества электроснабжения, мы гарантированно "взлетаем" за 50 мс.
Дискретные выходы - 2 А на канал MOSFET с защитой от замыкания и перегрева, контроль температуры.
Аналоговые входы - 12 бит 11-12 каналов, 0-10 В / 0-20 мА, 100 кОм. С калибровочными таблицами - подключайте любые датчики с любой характеристикой.
Аппаратная самодиагностика Мы опрашиваем каждый цифровой канал каждую миллисекунду. Это не просто "подали команду и забыли". После каждой команды на включение или выключение контроллер проверяет, изменилось ли состояние на канале. Подали команду на катушку реле - проверили, есть ли напряжение на канале. Команда есть, напряжения нет - значит, обрыв провода, перегорел предохранитель или сгорела катушка. Команда отключить, а напряжение осталось - значит, контакты реле залипли или MOSFET пробит.
600+ типов событий. Обрыв цепи, короткое замыкание, перегрев MOSFET - знаем за 1 мс. И не просто знаем, а фиксируем в журнале, чтобы вы могли найти причину, а не гадать, что случилось.
Светодиоды на каждый канал, интерфейс, ядро и Wi-Fi - видно даже без интерфейса. И у них разная логика мигания. Заглянул в шкаф, посмотрел на индикацию - и уже понимаешь, что случилось, даже без ноутбука и веб-интерфейса.
REST API + веб-интерфейс Настройка и мониторинг с телефона или ноутбука по Wi-Fi. Открытая интеграция с системами верхнего уровня.
Ловим Wi-Fi через три железобетонных перекрытия
Бутлоадер и защита прошивки Обновление встроенного ПО выполняется через веб-интерфейс - без вскрытия корпуса и программаторов, даже через Wi-Fi.
Но главное - защита от "кирпича". Если по какой-то причине прошивка не загрузилась, контроллер не превращается в бесполезный кусок пластика. После настраиваемого числа неудачных попыток загрузки прошивки он автоматически переключается в бутлоадер.
И всё это - гальваническая развязка, широкий диапазон питания, три уровня памяти, 50 мс восстановления, самодиагностика, опросы каналов 1 мс, светодиоды на каждый канал и компонент, ядро и Wi-Fi, интерфейсы связи, от 66 каналов на "борту" - собрано в одном приборе, модули расширения по 72 канала или 30 ШИМ каналов, масштабирование ПЛК до 32х модулей.
По отдельности эти функции можно найти у разных производителей. Но чтобы всё это работало вместе, без компромиссов, в одном устройстве, с собственной ОСРВ, френдли web-интерфейсом и открытым API - такого на рынке нет.
И мы не просто даём "коробку". Вместе с каждой системой передаём полный комплект документации: пугающе детализированные принципиальные схемы и технически глубоко проработанные, подробные руководства по эксплуатации с пошаговыми инструкциями по настройке всех алгоритмов, чек-листами, короткими справками типа "вопрос-ответ", голоссарий, спецификации с артикулами на все компоненты. И это всё - не для галочки, а чтобы инженер на месте мог разобраться, понять, как устроена система, и быстро решить любую задачу.
Плюс - комплекты ЗИП для быстрой замены "железа" и резервное ПО для восстановления. Всё, чтобы вы не зависели от нас и могли оперативно обслуживать систему сами.
Ваш технологический суверенитет.
Где это всё работает сегодня
Большая мегаферма
Мы не продаём напрямую конечным заказчикам — мы, как производители, работаем через дилеров и интеграторов, которые сами выбирают, с кем им работать. И они выбирают нас. Потому что им удобно с нами. Потому что техподдержка и сервис работает.
Наши «Операторы» уже управляют навозоудалением, микроклиматом, КНС, сепарацией и дезинфекцией на крупнейших фермах России. Более 1000 единиц оборудования в поле.
Мы входим в технологический стек мирового лидера в поставках комплексных решений для мегаферм. Мы не имеем права разглашать название партнёра без его прямого согласия — это условие нашего сотрудничества. Но если вы работаете в отрасли, вы знаете, о ком речь
И у нас есть рекомендательные письма от Росатома. Это не про фермы. Это про уровень требований к контрагентам.
Что дальше
Было ли это божественное вмешательство?
Мы рады, что получили подобный результат и нам приятно рассказать, какие вещи можно делать самостоятельно на уровне мировых лидеров - это оказалось возможно. Нам, конечно, повезло в том, что удалось сразу тестировать системы на огромных предприятиях, хоть такая возможность и появилась не на ровном месте - в прошлом посте я рассказывал, что мы уже долго время занимаемся автоматизацией, было не просто, но обстоятельства сложились благоприятные.
Мы не останавливаемся. У нас есть собственное производство, своя механообработка и SMD-монтаж. С партнёрами мы можем выпускать до 10 000 плат за три недели, и у нас есть складской запас комплектующих, чтобы не ждать поставок.
Мы научились оперативно и эффективно внедрять наш программно-аппаратный комплекс в сложные технологические процессы.
И мы не замыкаемся на одной нише. Мы идём туда, где сложные техпроцессы либо не решаются вовсе, либо решаются через изысканно сложные и дорогие конструкции - мы приходим и делаем проще, надёжнее и эффективнее. Без фантастических бюджетов и нейросетей там, где они не нужны.
Например, в диагностике конвейерных лент на шахтах - там, где пытаются ставить машинное зрение, мы видим более простые и надёжные подходы.
Если хотите узнать, какие отрасли мы сейчас рассматриваем, что рассматриваем изменить в технических характеристиках и ПО, где видим границы применения наших ПАК — пишите в комментарии. Отвечу на всё.
Народ, никто не знает, чьи по итогу ПЛК (программируемый логический контроллер) и ПР (программируемое реле) Овен? Нашел один в один у немцев, даже предлагают свой лейбл под заказ напечатать на корпусе. И среда разработки, проекты от Овен ПР тоже кушает спокойно. Не могу понять, то ли наши так в Германии продают, то ли общий китайский “предок”.