Онлайн-журнал «Юный киберфизик»

Интерфейс последней надежды: от RS-232 к удаленному рабочему столу

Сделай сам
Фото Евгения Стерликова
Кружковым движением уже несколько лет осуществляется проект по развитию управления инфраструктурой и инженерными системами одной удалённой площадки,на базе платформы «умного дома». Проект реализуется силами как наставников так и школьников и студентов.
Эта история давно просится быть рассказанной. Возможно, эта статья и станет началом пространного цикла.
Но начать хочется, как водится, с конца, с одного эпизода 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м в неидеальных условиях), разъёмы для такого подключения, и принцип кодирования собственно бит для передачи.
Разъёмы предполагались из семейства 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»).
Еще более внимательный читатель может подумать, что описания «как передать бит» недостаточно для полноценной передачи данных, и хотя это уже за пределами RS-232, но стандартом де-факто для него стало, что данные кодируются уже в байты устройством UART (использовались ещё для кодирования символов в телетайпах), которое оперирует обычными уровнями сигнала транзисторно-транзисторной логики (в пределах 5 вольт), а значит, требуют конвертора в уровни RS-232. Словом, неудивительно, что все эти термины употреблялись вперемешку и часто не по делу в отношении совершенно разных аспектов последовательной передачи данных.

И здесь следует упомянуть ещё один стихийный термин, возникший в этой области. Дело в том, что одним из основных применений RS-232 была коммуникация компьютерных устройств с модемами, позволявшими устанавливать сетевое соединение через телефонные линии. И возникла простая мысль, что если нужно сетевое соединение для рядом стоящих компьютеров (как раз в пределах тех самых 15 метров), то можно просто соединить их кабелем RS-232, в котором пары проводов, относящиеся к передаче данных перекрещены (и прежде всего, сами RX\TX). Таким образом, оба компьютера выступают своего рода «модемами» друг для друга, и дополнительных устройств для коммуникации не требуется. Такой кабель получил неофициальное название «ноль-модемный» (null-modem), подчёркивая, что модемов для такого соединения нужно: 0.
Разъемы D-Sub
Стандарт USB, пришедший в самом конце XX века как обновление концепции универсальной последовательной передачи данных, наконец отбросил все лишние коммуникационные провода, кроме RX\TX. Однако не смог предложить такого же простого в реализации стандарта передачи данных между двумя равноценными устройствами, как предлагали COM-порты. Вплоть до того, что для простейшего типа передачи устройства стали изображать из себя HID (Human Interface Device) — устройства пользовательского ввода, т.е., например, клавиатуру, используя тот же принцип кодирования информации, что когда-то телетайпы.
Достаточно быстро появились устройства-переходники, реализующие преобразование 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 модемами он показал себя не очень хорошо, но тут будут существенно меньшие скорости и мощности, и шансы на успех велики.
Сам же 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 протокола и попытаться таки завести генератор в «умный дом». Для этого были предприняты последовательные попытки стандартных вариантов по перехвату 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 систему, распознающую данные, графически выводимые в штатном ПО производителя, или всё же добиться перехвата и анализа протокола.

На этом примере видно, что часто желание производителей «улучшить пользовательский опыт» заставляет их отказываться от принятых, заслуженных и рабочих стандартов, по сути, не предлагая адекватной замены. А инженерам, занимающимся автоматизацией, всё чаще приходится обнаруживать себя в роли «хакера» в попытках заставить разномастные системы работать на общую задачу.
Описание арт-проекта шарманки Артёма Сергеева доступно по клику на фото