Фото Евгения Стерликова
Кружковым движением уже несколько лет осуществляется проект по развитию управления инфраструктурой и инженерными системами одной удалённой площадки,на базе платформы «умного дома». Проект реализуется силами как наставников так и школьников и студентов.
Эта история давно просится быть рассказанной. Возможно, эта статья и станет началом пространного цикла.
Но начать хочется, как водится, с конца, с одного эпизода 2025 года. Очередное запланированное усовершенствование системы неожиданно превратилось в ретроспективу эволюции интерфейсов передачи данных, современного состояния этой области и философии ее развития.
Эта история давно просится быть рассказанной. Возможно, эта статья и станет началом пространного цикла.
Но начать хочется, как водится, с конца, с одного эпизода 2025 года. Очередное запланированное усовершенствование системы неожиданно превратилось в ретроспективу эволюции интерфейсов передачи данных, современного состояния этой области и философии ее развития.
Проблема
Началось всё от несовершенства. Сердцем энергетической системы в данном проекте является дизельная генераторная установка промышленного уровня. Но все фактическое взаимодействие ее с «умной средой» (кроме того, что она вырабатывает энергию, потребляемую в том числе этой самой средой) сводилось к простейшему чтению статуса «электричество пошло, ток на выходе такой-то», причем от посредника – многофункционального инвертора «МАП Dominator». В саму же генераторную установку поступает ровно один сигнал через «сухой контакт» (фактически провод, передающий 1\0 – однобитный сигнал), который расшифровывается как «включись\выключись».
Установка промышленного уровня на такого рода сигнал реагирует целым комплексом действий: по проверке систем, прогреву двигателя и его компонентов и т.п. В летний период, когда кемпинг испытывает основную нагрузку, генератор, как правило, включается часто и без проблем, в крайнем случае на площадке всегда есть кто-то из обслуживающего персонала, чтобы устранить нештатные ситуации. Но в сложных условиях межсезонья, наступает погода с низкими температурами, включения генератора могут переходить на (много)недельные циклы, и на площадке в какие-то моменты могут вообще отсутствовать технически компетентные сотрудники. Вот тогда-то и выясняется, что управляющий сигнал скорее означает «включись, пожалуйста, если сможешь». А если не сможет, то разобраться, в чем причина, переключить из возникшего статуса «Стоп» обратно в «Авто», осуществить повторные попытки включения, можно будет только вручную на месте.
Но плюсом промышленной установки является то, что весь этот сложный функционал, конечно же, управляется электронным контроллером, который предполагает какие-то средства коммуникации и управления. В данном случае это был Datakom D-300, и инструкция раскрывала самые заманчивые возможности. Внешняя коммуникация обещалась по протоколу Modbus, который позволяет как многочисленную диагностику и статусы подсистем, так и управляющие команды, в т.ч. «эмуляцию нажатий клавиш панели управления контроллером», что давало надежду на диагностику и решение большинства проблем удаленно.
История
«Мозгом» информационной системы является Raspberry Pi 4 с развёрнутым на ней Home Assistant. Это очень гибкая и мощная система, которая позволяет подключать практически что угодно, если это соответствует хоть какому-то мало-мальски известному стандарту. Инструкция контроллера из встроенных предлагала вариант подключения с использованием Modbus по интерфейсу RS-232. За 60 с небольшим лет своего существования он пережил пик своей распространённости (ещё в 2000-х можно было встретить персональные компьютеры или ноутбуки, штатно оснащённые им), породить вокруг себя массу легенд и путаницы с названиями. И всё еще продолжает быть актуальным в промышленности и автоматизации. Пользуясь случаем, наведём здесь историческую точность.
Строго говоря, RS-232 это стандарт (так и пишется — «Recommended Standard») по подключению устройств для асинхронной последовательной (serial) проводной передачи данных между двумя устройствами. Он предписывает используемые уровни электрического сигнала (с достаточно большой амплитудой, +\- 15В, что позволяет дальность передачи до 15м в неидеальных условиях), разъёмы для такого подключения, и принцип кодирования собственно бит для передачи.
Строго говоря, RS-232 это стандарт (так и пишется — «Recommended Standard») по подключению устройств для асинхронной последовательной (serial) проводной передачи данных между двумя устройствами. Он предписывает используемые уровни электрического сигнала (с достаточно большой амплитудой, +\- 15В, что позволяет дальность передачи до 15м в неидеальных условиях), разъёмы для такого подключения, и принцип кодирования собственно бит для передачи.
Разъёмы предполагались из семейства D-sub, или полностью D-subminiature. D в честь металлической рамки, форма которой кому-то напомнила эту английскую букву, а вот subminiature (сверхминиатюрный).
Времена зари компьютерной техники были романтичными, и здоровенная планка контактов так на 25 могла казаться сверхминиатюрной.
Собственно разъём DB-25 и рекомендовался в качестве основного стандарта.
Внимательный читатель может понимать, что для последовательной передачи достаточно всего трех проводников: «земли» (Ground), «передачи» («TX» — принятое ещё в азбуке Морзе сокращение для «Transmit») и приёма («RX» — аналогично для «Recieve»). Остальные же 22 использовались... не все. Но была масса служебных: «вызов», «готовность к приему», «определение качества сигнала» и т.п. признаки аналоговой эпохи, которая стремительно становилось цифровой. Поэтому со временем реальным стандартом стал второй вариант, самый маленький из линейки — DE-9 (вторая буква именовала алфавитный порядок разъёма в этой линейке). Но интуиция видевших до этого DB-25 подсказала, что маленький вариант должен называться DB-9, и этот вариант практически вытеснил официальный (до сих пор если попробовать покупать такой разъем или кабель с ним, большинство предложений будет про DB-9). И, собственно, последовательные порты персональных компьютеров, реализованные по стандарту RS-232 с лёгкой руки IBM стали называться COM (от «communication»).
Времена зари компьютерной техники были романтичными, и здоровенная планка контактов так на 25 могла казаться сверхминиатюрной.
Собственно разъём DB-25 и рекомендовался в качестве основного стандарта.
Внимательный читатель может понимать, что для последовательной передачи достаточно всего трех проводников: «земли» (Ground), «передачи» («TX» — принятое ещё в азбуке Морзе сокращение для «Transmit») и приёма («RX» — аналогично для «Recieve»). Остальные же 22 использовались... не все. Но была масса служебных: «вызов», «готовность к приему», «определение качества сигнала» и т.п. признаки аналоговой эпохи, которая стремительно становилось цифровой. Поэтому со временем реальным стандартом стал второй вариант, самый маленький из линейки — DE-9 (вторая буква именовала алфавитный порядок разъёма в этой линейке). Но интуиция видевших до этого DB-25 подсказала, что маленький вариант должен называться DB-9, и этот вариант практически вытеснил официальный (до сих пор если попробовать покупать такой разъем или кабель с ним, большинство предложений будет про DB-9). И, собственно, последовательные порты персональных компьютеров, реализованные по стандарту RS-232 с лёгкой руки IBM стали называться COM (от «communication»).
Еще более внимательный читатель может подумать, что описания «как передать бит» недостаточно для полноценной передачи данных, и хотя это уже за пределами RS-232, но стандартом де-факто для него стало, что данные кодируются уже в байты устройством UART (использовались ещё для кодирования символов в телетайпах), которое оперирует обычными уровнями сигнала транзисторно-транзисторной логики (в пределах 5 вольт), а значит, требуют конвертора в уровни RS-232. Словом, неудивительно, что все эти термины употреблялись вперемешку и часто не по делу в отношении совершенно разных аспектов последовательной передачи данных.
И здесь следует упомянуть ещё один стихийный термин, возникший в этой области. Дело в том, что одним из основных применений RS-232 была коммуникация компьютерных устройств с модемами, позволявшими устанавливать сетевое соединение через телефонные линии. И возникла простая мысль, что если нужно сетевое соединение для рядом стоящих компьютеров (как раз в пределах тех самых 15 метров), то можно просто соединить их кабелем RS-232, в котором пары проводов, относящиеся к передаче данных перекрещены (и прежде всего, сами RX\TX). Таким образом, оба компьютера выступают своего рода «модемами» друг для друга, и дополнительных устройств для коммуникации не требуется. Такой кабель получил неофициальное название «ноль-модемный» (null-modem), подчёркивая, что модемов для такого соединения нужно: 0.
И здесь следует упомянуть ещё один стихийный термин, возникший в этой области. Дело в том, что одним из основных применений RS-232 была коммуникация компьютерных устройств с модемами, позволявшими устанавливать сетевое соединение через телефонные линии. И возникла простая мысль, что если нужно сетевое соединение для рядом стоящих компьютеров (как раз в пределах тех самых 15 метров), то можно просто соединить их кабелем RS-232, в котором пары проводов, относящиеся к передаче данных перекрещены (и прежде всего, сами RX\TX). Таким образом, оба компьютера выступают своего рода «модемами» друг для друга, и дополнительных устройств для коммуникации не требуется. Такой кабель получил неофициальное название «ноль-модемный» (null-modem), подчёркивая, что модемов для такого соединения нужно: 0.
Стандарт USB, пришедший в самом конце XX века как обновление концепции универсальной последовательной передачи данных, наконец отбросил все лишние коммуникационные провода, кроме RX\TX. Однако не смог предложить такого же простого в реализации стандарта передачи данных между двумя равноценными устройствами, как предлагали COM-порты. Вплоть до того, что для простейшего типа передачи устройства стали изображать из себя HID (Human Interface Device) — устройства пользовательского ввода, т.е., например, клавиатуру, используя тот же принцип кодирования информации, что когда-то телетайпы.
Достаточно быстро появились устройства-переходники, реализующие преобразование USB-COM, что обеспечило продолжение процветания этого метода передачи небольших объемов данных на долгие годы вперёд. А небольшие объемы — это как раз то, что характерно для систем «интернета вещей», «умного дома» и большинства случаев промышленной автоматизации.
Разъемы для последовательного соединения, понятное дело, существуют в виде штырьковых (m) и гнездовых (f) для соединения этих пар друг с другом. Но как такового стандарта: какой вариант на устройствах, какой на кабелях, какой на центральных компьютерах и т.п. — не выработалось. Существовали любые вариации, и конечно же, переходники и удлинители для любого случая. Но на сегодняшний момент самый распространённый вариант — от компьютера (а значит и от USB-RS-232 переходника) — штырьки, на кабелях — гнезда.
Достаточно быстро появились устройства-переходники, реализующие преобразование USB-COM, что обеспечило продолжение процветания этого метода передачи небольших объемов данных на долгие годы вперёд. А небольшие объемы — это как раз то, что характерно для систем «интернета вещей», «умного дома» и большинства случаев промышленной автоматизации.
Разъемы для последовательного соединения, понятное дело, существуют в виде штырьковых (m) и гнездовых (f) для соединения этих пар друг с другом. Но как такового стандарта: какой вариант на устройствах, какой на кабелях, какой на центральных компьютерах и т.п. — не выработалось. Существовали любые вариации, и конечно же, переходники и удлинители для любого случая. Но на сегодняшний момент самый распространённый вариант — от компьютера (а значит и от USB-RS-232 переходника) — штырьки, на кабелях — гнезда.
План
Собственно, инструкция контроллера подтвердила версию про штырьковый разъём на его стороне. А Modbus RTU — это просто более точное название Modbus, предполагающего передачу по последовательному соединению (в отличие от, скажем, TCP\IP). Кроме прочего, соединение по RS-232 использовало и стандартное ПО от производителя контроллера, позволяющее легко настраивать параметры генератора, сохранять эту конфигурацию и при необходимости восстанавливать. Что тоже было интересно.
Таким образом, представлялся следующий план. Нужно приобрести:
1) переходник USB-RS-232 с разъёмом DE-9m;
2) ноль-модемный кабель длиной около 1.5м — для первичного подключения к ноутбуку с ПО от производителя, с целью проверки работоспособности и снятия бэкапа;
3) поскольку ноль-модемный кабель требуемой длины для подключения генератора к Raspberry (около 10м) за вменяемую цену приобрести затруднительно, было принято решение спаять свой по достаточно стандартному варианту — из витой пары. Требовались DE-9f разъемы под пайку, но они были в запасах.
По итогам мы должны получить Modbus соединение, завести его в Home Assistant, назначить датчики и актуаторы компонентам генератора — стандартная процедура.
Но приобрести вовремя перед поездкой на площадку ноль-модемный кабель не удалось (прошли те времена, когда его можно было купить в любом компьютерном магазине). А на площадке выяснилось, что есть в наличии удлинитель USB длиной 10 метров (остался от опытов с LTE-модемами). Хотя это далеко за пределами 5-метрового кабеля спецификации USB 2.0 — стандарт, по которому сделаны большинство USB-COM переходников, — кабель этот «активный» — т.е. имеющий на своём гнездовом конце усилитель сигнала. С LTE модемами он показал себя не очень хорошо, но тут будут существенно меньшие скорости и мощности, и шансы на успех велики.
1) переходник USB-RS-232 с разъёмом DE-9m;
2) ноль-модемный кабель длиной около 1.5м — для первичного подключения к ноутбуку с ПО от производителя, с целью проверки работоспособности и снятия бэкапа;
3) поскольку ноль-модемный кабель требуемой длины для подключения генератора к Raspberry (около 10м) за вменяемую цену приобрести затруднительно, было принято решение спаять свой по достаточно стандартному варианту — из витой пары. Требовались DE-9f разъемы под пайку, но они были в запасах.
По итогам мы должны получить Modbus соединение, завести его в Home Assistant, назначить датчики и актуаторы компонентам генератора — стандартная процедура.
Но приобрести вовремя перед поездкой на площадку ноль-модемный кабель не удалось (прошли те времена, когда его можно было купить в любом компьютерном магазине). А на площадке выяснилось, что есть в наличии удлинитель USB длиной 10 метров (остался от опытов с LTE-модемами). Хотя это далеко за пределами 5-метрового кабеля спецификации USB 2.0 — стандарт, по которому сделаны большинство USB-COM переходников, — кабель этот «активный» — т.е. имеющий на своём гнездовом конце усилитель сигнала. С LTE модемами он показал себя не очень хорошо, но тут будут существенно меньшие скорости и мощности, и шансы на успех велики.
Сам же USB-COM переходник был куплен в варианте «со встроенным проводом 1м», что означало, что пробный сеанс связи реально осуществить прямо с его помощью, без 0-модемного кабеля. Нужно было бы только обеспечить переходник с вилки на розетку, и возможно, как-то решить вопрос с перекрещиванием RX\TX. Тут случилось неожиданное открытие — что разъём DE-9 «под пайку» имеет распаечные пины в виде втулок, что означало возможность соединить их прямо со штырьками гнезда переходника.
Словом, вырисовывался вариант вообще обойтись без пайки, что облегчало задачу. Финальная схема подключения выглядела вот так:
Словом, вырисовывался вариант вообще обойтись без пайки, что облегчало задачу. Финальная схема подключения выглядела вот так:
RPI 4 USB <=> USB удлинитель <=> USB-COM RS-232 DE-9m <=>DE-9f <=> RS-232 USB D-300
Реальность
Лицевая панель контроллера приветливо встретила надписью «D-300». А вот после открытия лицевой панели генератора и изучения «обратной стороны Луны» выяснилось, что это D-300 MK2, понятно, «новый и улучшенный», но имеющий не так много общего со «старой моделью», как хотелось бы. В частности, видимо, в рамках улучшений, произошёл полный отказ от встроенного интерфейса RS-232. Для такой коммуникации теперь предлагалось купить «специальный модуль расширения». Из встроенных оставался только вариант подключения по USB с разъёмом USB-B («принтерный»).
В этой ситуации найденный USB-удлинитель был хорошей новостью, а запасной короткий кабель USB-B — отличной. В инструкции производитель туманно намекал на некоторый Modbus даже при таком подключении. Но, к сожалению само устройство представлялось компьютеру как HID, а не как логичный для такого случая виртуальный COM-порт. Поэтому речь могла идти только о чём-то нестандартном.
В любом случае, нужно было осуществить пробное подключение через удлинитель и USB-B.
Все было собрано и подключено, после чего контроллер генератора показал явные признаки перезагрузки и погас всеми своими экранами и индикаторами, и больше признаков жизни не подавал.
Впечатление было сложное. Очевидно, что это нештатная реакция на штатное подключение.
А кроме того, очень не хотелось оставлять площадку без рабочего генератора.
Все было собрано и подключено, после чего контроллер генератора показал явные признаки перезагрузки и погас всеми своими экранами и индикаторами, и больше признаков жизни не подавал.
Впечатление было сложное. Очевидно, что это нештатная реакция на штатное подключение.
А кроме того, очень не хотелось оставлять площадку без рабочего генератора.
В качестве причины стоило предположить явление, сжегшее, например не один HDMI-интерфейс в мире. При подключении HDMI, особенно длинного кабеля, следует либо обеспечить питание обоих устройств из очень близкорасположенных розеток, либо одно из устройств держать выключенным в момент подключения, либо, если это ноутбук, оставить его работать от батареи и подключить к сетевому питанию только после соединения. В противном случае первоначальная разность потенциалов на разных «землях» может привести к выгоранию этого капризного интерфейса.
USB в таком замечен, впрочем, не был. Но факт оставался фактом — ноутбук был подключен в сеть, обеспечиваемую инвертором, а контроллер генератора питался от внутренней батареи. Так что невыровненный нулевой потенциал вполне мог быть. Замер напряжения на вводах B+, B- показывал 0, при том что внутренний аккумулятор установки был гарантированно живой.
В процессе исследования ИИ-помощник, которому была загружена инструкция от нового контроллера, предположил выгорание предохранителя. Действительно, по образцовой схеме должен был один на линии B+. Но физически никаких признаков его не было обнаружено ни в районе лицевой панели, ни в районе аккумулятора. А остальной путь этой линии терялся где-то в недрах генератора. Но внимательное прохождение по цепи обнаружило, что общий выключатель генератора находится в положении «Выкл», при том что ни щелчка, ни каких-то подобных признаков не было. Включение восстановило работу контроллера, и он подключился к ноутбуку.
Работоспособность генератора была восстановлена. Штатное ПО от производителя заработало, и позволило изучить лог прошлых ошибок гораздо более подробно, чем через неудобный интерфейс лицевой панели.
Это показало, что самостоятельные перезагрузки контроллера иногда происходили и до этого. При этом контроллер переводит генератор в состояние «Стоп», лишая его возможности принимать внешние команды на включение. Была обнаружена и настройка, помогающая изменить это поведение.
USB в таком замечен, впрочем, не был. Но факт оставался фактом — ноутбук был подключен в сеть, обеспечиваемую инвертором, а контроллер генератора питался от внутренней батареи. Так что невыровненный нулевой потенциал вполне мог быть. Замер напряжения на вводах B+, B- показывал 0, при том что внутренний аккумулятор установки был гарантированно живой.
В процессе исследования ИИ-помощник, которому была загружена инструкция от нового контроллера, предположил выгорание предохранителя. Действительно, по образцовой схеме должен был один на линии B+. Но физически никаких признаков его не было обнаружено ни в районе лицевой панели, ни в районе аккумулятора. А остальной путь этой линии терялся где-то в недрах генератора. Но внимательное прохождение по цепи обнаружило, что общий выключатель генератора находится в положении «Выкл», при том что ни щелчка, ни каких-то подобных признаков не было. Включение восстановило работу контроллера, и он подключился к ноутбуку.
Работоспособность генератора была восстановлена. Штатное ПО от производителя заработало, и позволило изучить лог прошлых ошибок гораздо более подробно, чем через неудобный интерфейс лицевой панели.
Это показало, что самостоятельные перезагрузки контроллера иногда происходили и до этого. При этом контроллер переводит генератор в состояние «Стоп», лишая его возможности принимать внешние команды на включение. Была обнаружена и настройка, помогающая изменить это поведение.
Но нужно было попробовать понять структуру применяемого при общении по USB протокола и попытаться таки завести генератор в «умный дом». Для этого были предприняты последовательные попытки стандартных вариантов по перехвату USB-коммуникаций:
● Wireshark с модулем USBPcap
Это де-факто стандартный, бесплатный и самый известный инструмент для анализа любого трафика. Но он не показал никакой активности. В современных версиях Windows часто возникают такого рода проблемы из-за новых политик безопасности.
● Microsoft Message Analyzer (MMA)
Обещалось, что это вроде бы более низкоуровневый инструмент перехвата. Он показал пакеты передачи, но не содержимое пакетов.
● USBTrace
Это коммерческий продукт с пробным периодом, которого должно было бы хватить. Но он требовал особой установки драйверов, время пребывания на площадке истекало.
Пора было «уходить на запасной аэродром».
Итог и выводы
В качестве запасного варианта был выбран неиспользуемый «пожилой» ноутбук, на который удалось установить Windows 11. Как важный элемент автономности произведена настройка «никаких действий» на закрытие крышки ноутбука. К сожалению, у ноутбуков, как правило, отсутствует настройка в BIOS\UEFI для включения после возврата питания, как у многих десктопов. Считается, что батарея ноутбука делает такую настройку бесполезной. Понятно, производители не предусматривали такого использования ноутбука, и варианта, например, что питание отсутствует больше суток (что успеет разрядить батарею ноутбука) и вернётся в хорошую солнечную погоду, когда панели дозарядят АКБ энергосистемы кемпинга до нужного уровня, тогда было бы хорошо ноутбуку мониторинга автоматически включиться.
В дальнейшем можно будет настроить ему режим «пробуждения по сети» (Wake On Line), и тогда можно будет хотя бы включить его внешним воздействием после отключения. Это потребует подключения к роутеру по кабелю, для WiFi-подключения такой возможности нет.
На ноутбук установлена система удалённого доступа. Из позволяющих бесплатное и почти нелимитированное подключение в личных целях можно назвать: Anydesk, Remote Desktop Connection, VNC. Это, конечно, не является полноценным подключением в систему «умного дома», но позволяет в случае нестандартных ситуаций удаленно «оказаться у лицевой панели контроллера». Компромисс, который облегчит существование в межсезонье.
Из возможных дальнейших подходов с заведением этих данных в Home Assistant можно рассмотреть, например, OpenCV систему, распознающую данные, графически выводимые в штатном ПО производителя, или всё же добиться перехвата и анализа протокола.
На этом примере видно, что часто желание производителей «улучшить пользовательский опыт» заставляет их отказываться от принятых, заслуженных и рабочих стандартов, по сути, не предлагая адекватной замены. А инженерам, занимающимся автоматизацией, всё чаще приходится обнаруживать себя в роли «хакера» в попытках заставить разномастные системы работать на общую задачу.
На ноутбук установлена система удалённого доступа. Из позволяющих бесплатное и почти нелимитированное подключение в личных целях можно назвать: Anydesk, Remote Desktop Connection, VNC. Это, конечно, не является полноценным подключением в систему «умного дома», но позволяет в случае нестандартных ситуаций удаленно «оказаться у лицевой панели контроллера». Компромисс, который облегчит существование в межсезонье.
Из возможных дальнейших подходов с заведением этих данных в Home Assistant можно рассмотреть, например, OpenCV систему, распознающую данные, графически выводимые в штатном ПО производителя, или всё же добиться перехвата и анализа протокола.
На этом примере видно, что часто желание производителей «улучшить пользовательский опыт» заставляет их отказываться от принятых, заслуженных и рабочих стандартов, по сути, не предлагая адекватной замены. А инженерам, занимающимся автоматизацией, всё чаще приходится обнаруживать себя в роли «хакера» в попытках заставить разномастные системы работать на общую задачу.