3 года мы не можем вытащить данные из машины для боулинга

от автора

Обычная машина для боулинга — механическая, очень напоминающая аппарат для автоматической зарядки снарядов в танке. Вы попадаете мячом по кеглям, срабатывает оптический датчик прохождения мяча (если там пройдёт что-то другое, он тоже сработает), туда опускается измерительная рамка с дырками. Если ли внутри дырки кегля проверяется фотодиодом или контактным ощупыванием.

Потом эти данные отправляются на архаичный сервер Dell OptiPlex 3020 (примерно 2014 года), времён ещё когда Делл был Деллом. Мы их до сих пор закупаем, кстати, для всех 12 Бруклин Боулов.

И вот нам очень хочется выгружать данные с кегельной машины (пинсеттера) в приложение на телефоне игрока.

Мы сделали 3 разных подхода к этому и упёрлись в то, что просто физически не можем снять данные с легаси железа. Мы не айтишники, но приходили разные команды ковыряться.

В итоге мы закончили реверс-инжинирингом блока, который оцифровывает показания датичков, и, фактически, собираемся пересобрать кусок машины. Это не самое элегантное инженерное решение. И не самое умное. Но оно точно работает.

Сейчас расскажу, в чём мы застряли)

Вот так выглядит сзади ряд машин:

Вот видео, чтобы было понятнее, как работает машина-пинсеттер:

Архитектура такая:

— Есть дорожка для боулинга. Дорожка смазана маслом. По ней гоняют шары.

— В конце дорожки стоят кегли.

— Если вы шаром ударяете по кеглям, они падают или сдвигаются.

— После прохождения шара через оптический датчик и небольшой паузы машина опускает рамку с дырками на кегли и проверяет, какие кегли остались стоять примерно в тех же позициях, что раньше.

 — Есть ещё попытка выбить остальные.

— Затем рамка снова опускается и считает оставшиеся кегли.

 — Специальная рельса сбивает оставшиеся и сбрасывает назад.

 — Сзади их подбирает система автозарядки и тащит вверх машины, а оттуда заряжает в пинсеттер — ту самую рамку с дырками.

— Рамка с дырками опускает кегли в дырки и тем самым выставляет их заново.

В машине одновременно 23 кегли, чтобы не приходилось ждать полного цикла подъёма и раскладывания кеглей — пока одни внизу на дорожке, вторые уже заряжаются. Ещё 3 дополнительных кегли — это запас на разные застревания и проблемы. Число подбиралось по статистике разного рода отказов и является магической константой, оптимумом функционирования машины.

В большей части боулингов используются механические машины Brunswick. Делл 3020 используется там как сервер управления администратора — Front Desk.

Вот такой

Вот такой
Это экраны

Это экраны

 Сама машина выдаёт наружу по кабелю сигналы датчиков гребёнки — той самой матрицы с дырками. Машина не оцифровывает сигнал, это делает блок NextGen, который уже превращает её в логику игры.

20 лет назад не было IoT, MQTT или стандартизированного Ethernet для промышленных машин. В результате блоки NextGen объединяются в гирлянду по проприетарному последовательному интерфейсу (токовая петля). Данные летят в сыром hex. Документации нет. Сервер постоянно опрашивает блоки, обновляет статус игры, отправляет счёт на подвесные мониторы над дорожками.

Это приходит в сервер

Это приходит в сервер

Почему оттуда сложно тащить данные — есть три причины.

— Во-первых, Brunswick (и их конкурент AMF) очень не хотели, чтобы кто-то, кроме них, ставил какие-то апргейды. Они зарабатывали на продаже дополнительных модулей. Чтобы выводить результаты на сайт, показывать их в баре или интегрировать с клубными картами — надо купить дополнительную лицензию.

— Во-вторых там полный легаси стек. Может встретиться крайне интересный набор блокировок FoxPro (база может блокироваться при записи софтом боулинга, и если пытаться читать файл во время игры, софт можно отвалиться). Есть Sybase SQL Anywhere — ей нужны драйвера ODBC, а логины и пароли к которой зашиты в бинарниках Brunswick.

— В-третьих, система не умеет пушить данные наружу. Там постоянно отправляется статус, и, как в лучших промышленных системах, происходит обратная корректировка датчиков — например, сначала машина выдаёт один статус (сбито 2 кегли), потом думает немного и выдаёт корректировку — сбиты все кегли. Но корректировка может прийти раньше фрейма со статусом про две или заблудиться. В общем, мы так и не до конца поняли это шаманство.

Мы попробовали следующие подходы:

— Читать базу данных на Dell 3020

— Читать показатели НекстГена

— Ставить камеру над дорожкой и распознавать состояние игры.

— Переписывали NextGen.

Не пробовали OCR с монитора через HDMI-сплиттер, эмулировать принтер (там печатаются результаты игры от администратора на Dell), сетевой сниффинг в других местах.

Все опробованные методы инженерные команды признали практически нерабочими — кроме отдельного стенда для обработки сырых показателей машины. Вот пара ссылок на видео ВК.

Собственно, я подозреваю, что есть способы сделать это правильнее, но это пока единственный работающий. Если вдруг у вас есть идеи — стучите сюда в комментарии или в rakhmeev@brooklynbowl.ru, такое оборудование стоит по всей стране, можно много кому продать. И уж точно это надо во всех 12 наших боулингах по России )

ссылка на оригинал статьи https://habr.com/ru/articles/1024552/