[Перевод] Как найти повреждённое колесо поезда, не перегоняя состав

Исследование моего отца по износу железнодорожных колёс, программа, которую он попросил меня написать, и патент, который за этим последовал.
Чтобы определить, изношены ли колёса единицы подвижного состава, вагон необходимо вывести из эксплуатации и перегнать к месту осмотра. Это требует тяговой энергии, персонала и окна в графике движения. Осмотр проводится по всему вагону, и в большинстве случаев неисправностей не обнаруживается.
Мой отец предложил иной подход. На каждой колёсной паре устанавливается датчик. В ходе обычной эксплуатации он фиксирует один импульс на каждый полный оборот, а длительность этого оборота сравнивается со значением, которое дало бы колесо правильного диаметра. К осмотру направляются только те колёсные пары, которые не прошли сравнение.
Задача
Николоз Мгебришвили был инженером-железнодорожником — научным сотрудником и преподавателем Грузинского технического университета, где впоследствии учился и я. Его областью было взаимодействие колеса и рельса: продольные, поперечные и вращательные силы, возникающие между ними, и повреждения, которые эти силы вызывают со временем.
Повреждения накапливаются. Заклинившее и скользящее колесо получает ползун. Ползун многократно ударяет по рельсу, неравномерно вырабатывая его поверхностный профиль. Изношенный рельс, в свою очередь, повреждает следующие колёса. Перегреваются буксы, а в наиболее тяжёлых случаях колёсная пара заклинивает и вагон сходит с рельсов. Заявка на проект открывается пятнадцатилетней статистикой аварий Федеральной железнодорожной администрации США, показывающей, насколько значительная доля происшествий восходит именно к этому механизму.
Метод
Измерение простое, в чём и состоит его главное достоинство.
Датчик выдаёт один импульс на полный оборот колёсной пары. Генератор с частотой 500 кГц разбивает этот интервал, благодаря чему длительность одного оборота выражается количеством импульсов. Колёсная пара стандартного диаметра 950 мм на скорости 80 км/ч совершает один оборот за 0,134 секунды, что соответствует 67 118 импульсам. Колёсная пара, изношенная на полмиллиметра, проходит тот же оборот незначительно быстрее и даёт 67 047 импульсов. Разница составляет 71 импульс. В работе отца разрешающая способность на этой частоте оценивается примерно в 0,01 мм износа колеса и 0,1 мм износа рельса.
Более интересна диагностическая логика. На каждом десятом обороте зафиксированное для каждой колёсной пары количество импульсов сравнивается с эталонным значением. Если отклонение устойчиво даёт одна колёсная пара — повреждена именно она. Если все колёсные пары отклоняются одинаково и последовательно — колёса исправны, а дефектен рельс под ними.
Одно измерение, два различных вывода, и оба получены без вывода вагона из эксплуатации.
До технического задания я был наборщиком
Отец писал от руки. Я печатал.
В течение нескольких лет до всего этого такова и была моя роль в его работе: он заполнял страницы своим почерком, а я готовил документы в Word, на грузинском и на английском, и проверял то, что возвращал Google Translate, — чтобы убедиться, что смысл сохранён. Исследование, опубликованное только на грузинском, доходит до крайне ограниченного круга читателей, и подготовка английской версии была необходимой частью работы.
Я понимал очень немногое из того, что переписывал. Нас обоих это устраивало. От меня в том возрасте требовалось терпение, достаточное, чтобы перепечатать страницу в четвёртый раз из-за одной изменившейся формулы.
Мы работали за одним большим столом. Он делал свою работу, и я тоже делал его работу. Я говорил ему, что как мой неформальный руководитель он обязан отметить: я выполняю его обязанности, — и он улыбался. Дисциплину он ценил выше понимания. Именно этот стол я помню отчётливее всего из тех лет — заметно лучше, чем физику.
Документ, адресованный мне
В 2017 году он прислал мне документ.
Он свёл исследование к тому, что действительно требуется программисту: таблицы зависимости количества импульсов от скорости, блок-схема алгоритма и, выделенная в конце жирным, последовательно изложенная логика сравнения. Хранить эталонное количество импульсов для идеальной колёсной пары диаметром 950 мм. На каждом k-м обороте считать импульсы для каждой колёсной пары. Если разница превышает допуск — повреждена колёсная пара. Если разница одинакова для всех колёсных пар — повреждён рельс.
Это было техническое задание. Он никогда в жизни не писал программ — и написал мне техническое задание.
Ему нужно было не само устройство, которое требовало финансирования, которого у него не было. Ему нужно было наглядное представление: цифры на экране и линия, которая отзывается на изменение входных данных.
Gogo
Программу я назвал Gogo — от გოგორწყვილი, гогорцквили, грузинского термина, означающего колёсную пару. Я сократил название, потому что хотел имя, которое сможет произнести иностранный читатель: работа, как я тогда полагал, рано или поздно должна была выйти за пределы страны.
Это приложение на Windows Forms, написанное на C# под .NET Framework 4.0 и собранное в Visual Studio 2015. Скомпилированный исполняемый файл занимает 25 КБ. Я писал его несколько недель в 2017 году, за тем же столом.
Оператор задаёт параметры — скорость, диаметр колеса, частоту генератора, количество колёсных пар, количество оборотов, — после чего программа формирует набор колёс, применяя к каждому случайный износ величиной до 25 мм. При выборе колёсной пары выводится разница в количестве сигналов, соответствующая ей разница в миллиметрах и оценка: износ незначителен, средний износ или значительный износ. Эти пороговые значения не мои. Они взяты из работы отца, где отмечается, что 5 мм износа — величина малая, а более типичны в эксплуатации значения от 10 до 20 мм.
Строятся два графика: количество импульсов в зависимости от скорости и количество импульсов в зависимости от диаметра, где эталонная колёсная пара показана зелёным, а измеряемая — жёлтым.


Интерфейс полностью на грузинском, включая всплывающие подсказки, появляющиеся при наведении курсора на графики. Их перевод никто не заказывал. Мне просто не хотелось, чтобы он навёл курсор на значение и получил английский текст.
Помню и то, насколько по-разному его формулы и мой экран обходятся с пространством. На бумаге оси пересекаются в центре, и значения растут вверх. На экране начало координат находится в левом верхнем углу, а Y растёт вниз. Переход между двумя системами и составляет основную часть работы — что делало её, в сущности, той же самой работой, что и печать текста.
Одну строку исходного кода стоит привести:
double p = 3.14; // Math.PI;В его работе указано, что π — константа, равная 3,14. Поэтому я использовал 3,14, а собственную константу языка оставил рядом в виде комментария. Она там и осталась. Я реализовал его техническое задание ровно так, как оно было написано, включая ту часть, которую был в состоянии улучшить, — и это самое точное описание наших рабочих отношений, какое я могу предложить.
Патент
Опытный образец был изготовлен — небольшая физическая модель, которую он показал мне у себя на работе и которая, насколько я помню, некоторое время затем находилась у него дома.
13 апреля 2018 года заявка была подана в Национальный центр интеллектуальной собственности Грузии. 4 октября 2019 года она была зарегистрирована как патент P 2019 7027 B под названием «Система индикации величин износа подвижного состава и рельсов», классификация B61K9/00. В числе заявителей — Грузинский технический университет.
Впоследствии патент прекратил действие.
Что произошло
Устройство так и не было построено.
Государственное финансирование оказалось недоступным: бюджет его не предусматривал. Частное финансирование было столь же недостижимо, поскольку Грузинская железная дорога не могла предложить инвестору убедительного пути возврата вложений. Примерно в 2017 или 2018 году на связь вышла турецкая компания, и её позиция, как он её понял, состояла в том, что ему следует самостоятельно приобрести датчики, установить их на эксплуатируемый подвижной состав и продемонстрировать работу системы в реальных условиях. После этого они были бы готовы рассмотреть финансирование.
Вот эта трудность в самом простом изложении. Финансирование требует доказательства. Доказательство требует оснащённого поезда. Оснащённый поезд требует финансирования.
Работу никто не продолжает.
Что осталось
Исследование завершено, документы сохранились. Патент был выдан и прекратил действие. Solution по-прежнему открывается, по-прежнему собирается и по-прежнему запускается на современной машине, рисуя те же две линии — жёлтую и зелёную.
Я не понимал физики, когда её перепечатывал, и не являюсь учёным сейчас. Но сегодня, имея за плечами десять лет профессиональной работы, я способен прочитать это техническое задание — и это хорошее ТЗ: определённые входные данные, явная логика, заданный допуск и однозначное решение в конце. Он никогда прежде такого не составлял. Он просто знал, что именно должно быть верным, и изложил это в форме, позволяющей построить систему кому-то другому.
Этим кем-то оказался я. Дальше всего это зашло до 25 килобайт на ноутбуке и патента с тремя фамилиями.
Это перевод моей статьи, впервые опубликованной на Medium.
А у вас случалось наследовать техническое задание от человека, который сам никогда не программировал? Интересно, насколько это обычно помогает, а насколько мешает. 👇
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.