Думаю, каждого из нас хоть раз в жизни интересовали всякие устройства, по назначению отличные от пользовательских. А кто-то наверняка хотел заполучить что-то из этой области, пусть даже единственным предназначением в домашних условиях будет просто поставить на полочку и любоваться.
Одной из таких категорий являются различные девайсы, применяющиеся на транспорте. Именно о таком устройстве, а именно о частях унифицированной системы автоведения поезда, сегодня и пойдёт речь.
Итак, в данной статье поговорим о том, как устроен данный прибор и как его запустить. Традиционно будет много интересного.
❯ Суть такова
Те, кто давно со мной общается, хорошо знают, какое место среди моих увлечений занимает транспорт (так уж вышло, что преимущественно железнодорожный). И, конечно, различная околотранспортная электроника вызывала у меня неподдельный интерес. Проблема лишь в том, что достать такие девайсы очень сложно, многие блоки были выпущены буквально парой десятков экземпляров, а если какой-то экземпляр и подвернётся под руку, то оживить его не так-то просто, так как если и удаётся что-то найти, то толку от найденной информации чуть менее, чем никакого. Именно поэтому я подумал, что об удачном опыте запуска подобных железок стоит поведать миру.
❯ О чём я?
Так получилось, что мне достались остатки от САВПЭ — системы автоведения пригородного электропоезда (также встречается название «автомашинист»). Это устройство обеспечивает автоматическое поддержание скорости, расчёт времени в пути, переключение режимов ускорения и торможения. Именно эта система проигрывает записи автоинформатора и сообщения для машиниста. Хотя до полноценного автоматического управления ей далеко, это устройство позволяет освободить машиниста от целого ряда действий.
Увы, в реальности всё не так хорошо, как рассказывается в различных описаниях данной системы: иногда девайс глючит, где-то он вообще не работает, показания традиционно имеют погрешность.
Устройство состоит из нескольких блоков: блока индикации и блока клавиатуры, установленном в кабине, а также процессорного блока. Об устройстве последнего известно мало, но удалось выяснить, что там стоит промышленный ПК на базе процессора 386EX. В более новых версиях управляющий блок находится внутри панели индикации, наружу вынесены только цепи коммутации.
❯ Обзор оборудования
Так уж вышло, что ко мне попало оборудование из кабины — блок индикации и панель с кнопками. Ну а раз так — давайте разбирать и разбираться.
А вот и блок индикации. По центру находится дисплей, отображающий текущее время, время до ближайшей контрольной точки, позицию тяги, состояние тормозов, расчётную и фактическую скорость. Снизу ряд светодиодов — десять штук служат для индикации ограничения скорости, одиннадцатый загорается при неисправности системы.
Обратная сторона. Толстенные жгуты проводов до меня кто-то грубо отрезал, зачем это было сделано, мне решительно непонятно. Возможно, кто-то хотел поживиться разъёмами, но они тут тоже на месте.
Заводская табличка. Несмотря на крайне брутальный вид, блок выпущен не в девяностые, а в самом конце нулевых.
Разъёмы закрыты крышкой, рядом обозначения «РУ» и «КЛ». Один из этих разъёмов служит для связи с системным блоком, к другому подключается кнопочная панель.
Табличка на одном из жгутов.
Крышка разъёмов открыта.
А вот и сами разъёмы, РС7ТВ для клавиатуры и РС10ТВ для блока управления.
Клавиатура. На ней девятнадцать достаточно приятных на ощупь кнопок. F1, F2, ОГР служат для ввода поездной информации и ограничения скорости, ДОП — для подтверждения введённых данных, ТЕСТ — для запуска голосового оповещения, ПУСК — для трогания поезда или для возобновления автоведения после отпуска тормозов.
Таблички, по одной на каждой из трёх незанятых боковых граней.
Обратная сторона. Тут только крепёжные винты и остатки пломбы.
Разъём РС7ТВ и какой-то кабель.
❯ Блок индикации
Что мы делаем, когда в наши руки попадает интересная железка? Правильно: мы её разбираем. Так что берём отвёртку и выкручиваем винты на блоке индикации. Также понадобятся пассатижи: крышка держится ещё и на двух гайках. Внутри нас ждёт целая куча латунных стоек, которые тоже надо выкрутить. В итоге у нас на руках оказываются две платы.
Первая из них, очевидно, является преобразователем напряжения, который преобразует указанные на табличке на корпусе двадцать четыре вольта во все необходимые для питания индикатора напряжения. На нём же закреплены все разъёмы.
Вторая плата и есть главная часть блока индикации. На ней находится целая куча микросхем драйвера ВЛИ, микроконтроллер (AT90S8515) и ещё какой-то чип с нечитабельной из-за слоя лака маркировкой.
Обратная сторона платы. Ряд светодиодов и просто шикарный ВЛИ. Геттер всё ещё не потерял цвет, а накал не провис, так что можно надеяться, что он ещё жив.
Вообще, желающим заиметь себе большой символьный ВЛИ советую обратиться в сторону табло от кассовых компьютеров (можно найти по запросу «дисплей покупателя»). В отличие от «голых» индикаторов, которые редки и часто продаются по совершенно спекулятивным ценам, эти экземпляры встречаются повсеместно, да и цена вполне молодёжная. Свой экземпляр я ухватил, кажется, всего за триста рублей. К тому же он уже будет в корпусе, что пригодится для многих проектов.
❯ Первый запуск
В отрезанном жгуте было два подозрительно толстых провода, которые на плате преобразователя шли через дроссель. Одним из них, как легко удалось установить, была земля, другой же уходил куда-то в дебри платы. Судя по толстенным дорожкам стало очевидным, что по этим проводам подаётся питание. Ну а раз так, то зачищаем конец и пробуем включать.
Подаём питание. Тихое пищание преобразователя, и на индикаторе загорается «ИДЁТ ЗАГРУЗКА СИСТЕМЫ». Работает, однако!
Следует отметить, что, разумеется, в самом блоке индикации ничего не загружается. Просто он предполагает, что после подачи питания ОС и управляющий софт промышленного ПК ещё не загрузились, поэтому на входе ничего нет. Так что эта надпись — всего лишь заглушка, сделанная исключительно для того, чтобы не показывать в это время чёрный экран.
❯ При чём тут метеостанция на ардуино и как она нам поможет?
Понятное дело, для полноценного оживления устройства необходимо знать протокол, которого у меня не было. В его поисках я отправился на просторы, где была найдена какая-то статья, повествующая нам о метеостанции на базе платы индикации от такого прибора. У автора была более старая версия, но я понадеялся, что всё совпадёт.
Схемотехнически, правда, модуль отличался, так как быстрая прозвонка выявила, что интерфейс тут не RS-232. На плате рядом с местом припайки шлейфа были некие контакты, подозрительно напоминающие RX и TX, но с UART контроллера они не звонились. «Какой же может быть интерфейс в подобном устройстве, где надо гнать данные метров на десять? Наверное, RS-485» — подумал я и стал разбираться дальше. Догадки мои в скором времени подтвердились: микросхема рядом с микроконтроллером оказалась чипом трансивера RS-485 MAX1482. Точнее, это RS-422: дифференциальных пар сразу две.
Подключаем конвертер RS-232->RS-485, на компьютере открываем терминал и выставляем там такие параметры: скорость 4800 бод, 1 стоп-бит, 8 бит данных, чётность отключена.
Пробуем что-то отправить… работает! Частота обновления, к слову, весьма маленькая, даже невооружённым глазом можно заметить мерцание, а на камере видны полосы.
Точно так же можно писать и по-русски (в кодировке CP866).
❯ Протокол блока индикации
Итак, блок индикации принимает данные из порта без каких-либо проверок и контрольных сумм. Также имеются специальные команды.
Установка положения курсора:
<1Bh><position>
0x1B — код команды, position — требуемое положение.
Зажигание и гашение светодиодов:
<1Ch><value1><value2>
0x1C — код команды, value1 — состояние первых восьми светодиодов:
0x00 — все погашены
0x01 — ограничение скорости в 100 км/ч
0x02 — ограничение скорости в 80 км/ч
0x04 — ограничение скорости в 70 км/ч
0x08 — ограничение скорости в 60 км/ч
0x10 — ограничение скорости в 50 км/ч
0x20 — ограничение скорости в 40 км/ч
0x40 — ограничение скорости в 25 км/ч
0x80 — ограничение скорости в 15 км/ч
Легко заметить, что по сути это битовая маска. Тем не менее, значения принимаются только такие, зажечь сразу несколько светодиодов не получится.
value2 — состояние оставшихся светодиодов:
0x00 — все погашены
0x40 — ограничение скорости в 120 км/ч
0x80 — ограничение скорости в 110 км/ч
Индикатор «сбой» загорается сам при отсутствии данных больше пяти секунд. Единовременно может быть зажжён лишь один светодиод, таким образом, одно из значений value1 и value2 всегда нулевое, иначе команда будет проигнорирована.
Яркость экрана:
<1Dh><value>
0x1D — код команды, value — значение от 0 до 9. 0 — дисплей погашен, 9 — горит на полную мощность. По умолчанию яркость выставлена максимальная.
❯ Клавиатура
С дисплеем разобрались. Время перейти к кнопочной панели.
Разбираем. Сдуваем с платы вековую пыль и наблюдаем там микроконтроллер ATTiny2313 и ещё какой-то чип. К контактам кнопки «Пуск» припаяны провода, судя по колхозной пайке — это явно не что-то штатное.
Снимем плату. Кнопка «Пуск» развалилась, теперь понятно, почему припаяли провода: видимо, она начала неуверенно срабатывать, замену не нашли и сделали выносную. На обратной стороне также находится линейный стабилизатор, по которому определяем плюс и минус питания.
Подаём девять вольт, на клавишах загорается красивая янтарная подсветка.
❯ Протокол клавиатуры
Позвонка показала, что UART контроллера идёт к тому самому чипу. Распиновка же совпала с тем, что стоял на плате дисплея, так что можно предположить, что это тот же самый RS-485. Вызваниваем нужные контакты, подключаемся.
Далее подрубаем логический анализатор и пробуем нажимать кнопки.
Мне повезло: никаких команд для опроса клавиатура не требует, если жмякнуть какую-то кнопку, то сразу отправляется пакет данных.
Структура его такая:
<3Bh><42h><4Bh><57h><scancode><34h><CRC><2Eh>
Первые четыре байта — заголовок пакета, далее идёт скан-код из двух байт, далее неизменный байт 0x34, далее некая контрольная сумма (алгоритм её расчёта мне неведом), далее окончание пакета в виде неизменного байта 0x2E.
Скан-коды клавиш оказались вот такие:
3133h - кнопка "Пуск"
3131h - кнопка "F1"
3132h - кнопка "F2"
3130h - кнопка "ОГР"
3134h - кнопка "ДОП"
3137h - кнопка "РЕГ"
3138h - кнопка "ТЕСТ"
3031h - кнопка "1/25"
3032h - кнопка "2/40"
3033h - кнопка "3/50"
3034h - кнопка "4/60"
3035h - кнопка "5/70"
3036h - кнопка "6/80"
3037h - кнопка "7/100"
3038h - кнопка "8/110"
3039h - кнопка "9/120"
3030h - кнопка "0/15"
3135h - стрелка влево
3136h - стрелка вправо
Как верно заметил в комментариях товарищ Squoworode, скан-код каждой кнопки представляет собой десятичное число в символах ASCII.
❯ Распиновка разъёмов
Теперь можно наконец разобраться с окончательной распиновкой разъёмов блока.
Нумерация контактов разъёмов видна на фото, для РС10ТВ она точно такая же.
Итак, разъём РС7ТВ с пометкой «КЛ» отвечает за клавиатуру. Распиновка его следующая (для клавиатуры и блока одна и та же):
- Земля
- Питание (6-12 В)
- Земля
- Линия «A» (передача)
- Линия «B» (передача)
- Линия «A» (приём)
- Линия «B» (приём)
РС10ТВ, обозначенный как «РУ» — питание блока индикации и связь с ним. Распиновка тут оказалась такая:
- Питание (24 В)
- Земля
- Земля
- Не используется
- Земля
- Линия «A» (передача)
- Линия «B» (передача)
- Линия «A» (приём)
- Линия «B» (приём)
- Не используется
Линии для приёма и передачи у клавиатуры и дисплея запараллелены. Питание клавиатура получает от преобразователя, находящегося внутри модуля индикации.
❯ Вот как-то так
Разбирательства с этой, безусловно, редкой штукой оказались весьма интересным занятием. Даже, казалось бы, при наличии протокола обмена всё равно обнаружился целый ряд нюансов, присущих именно этой версии блока.
Конечно, сомневаюсь, что у всех имеется доступ к таким железкам. Но, как бы то ни было, экземпляр этот весьма интересный, так что о нём определённо стоило рассказать.
Такие дела.
Автор: Лев