
Всем привет! Меня зовут Артём Сидоров. Я ведущий разработчик из ИТ-команды «Северстали». Сегодня хочу рассказать, как мы реализовали «Универсальный сервис по сбору телеметрии с CAN-шин на технике».
Что такое CAN-шина
Для начала разберёмся, что такое CAN-шина, для чего она нужна и как с ней работать. Если совсем просто, то CAN (Controller Area Network) шина – цифровая сеть в современных автомобилях, обеспечивающая обмен данными между различными электронными узлами (устройствами) управления. Передача происходит по двухпроводной витой паре.

Принцип работы
Совокупность устройств (узлов) подключается к одной линии связи по двухпроводной витой паре, причём каждое устройство может как передавать, так и принимать данные. Сигнал CAN можно представить следующей схемой:
идентификатор;
данные;
контрольная сумма.
CAN-шина имеет различные стандарты, в нашей работе почти всегда используется «SAE J1939» стандарт, так как это стандарт тяжёлых транспортных средств.
Для чего понадобился сервис?
Сервис нужен для сбора телеметрии транспортного средства (ТС). После сбора и расшифровки данных можно провести анализ и выяснить, в каком состоянии ТС и когда его нужно ремонтировать, и в каком узле. Наша команда сразу захотела подкинуть нейронку для обучения и на основании её предсказаний составлять планы на ремонт. На текущий момент это на стадии проектирования, но пока не об этом.

Также эта информация сильно поможет работе предприятия. Например, по работе подвески возможно вычислять плохие участки дороги, по весу в кузове можно узнать, сколько руды и породы было вывезено из определённого сектора и т. д.
Описание сервиса
Перейдём к главному: сервис разработан на языке программирования C# и является Windows Service, который получает настройки по приёму сигналов из базы данных на MS SQL Server и получает данные относительно этих настроек по протоколу TCP.
На стороне ТС находится устройство приёма, а именно CAN-преобразователь. Он получает данные с CAN-шины и отправляет их по Ethernet. Для работы был куплен промышленный CAN-преобразователь. Пример на картинке ниже:

После получения сигнала сервис проверяет, является ли значение критическим. Если нет, то проверяет, попадает ли в период забора. Часто сигналы отправляются с периодом в 10-100 мс для того, чтобы не засорять БД, мы ограничили забор относительно наших потребностей. Также в БД находится CANID и по каким параметрам расшифровывать сигналы. Например, в одном блоке данных и под одним CANID могут находиться несколько значений по разным сигналам, поэтому нужно знать, с какого по какой бит мы должны взять данные, а также, на какое значение мы должны умножить и прибавить значение.
Пример того, как выглядят настройки в системе
Наименование сигнала | PGN | Адрес отправителя | с * байта | по * байт | Множитель | Шаг | Интервал записи | Тип интервала записи |
Инклинометр Y | 0xF013 | 0x2B | 3 | 4 | 0,01 | -90 | 15 | минута |
После отбора нужных сигналов данные записываются в БД и расшифровываются.

В качестве примера работы сервиса можно поставить наш монитор работы автосамосвалов (АС). В этом мониторе сигналы разделены на группы ABC, что помогает быстро понять, в какой системе АС произошла проблема.

Итоги проведённой работы
По итогу сервис выглядит максимально просто, основная логика расшифровки находится на стороне сервера, для быстрой реализации чего-то нестандартного. На этапе планирования была идея паять CAN-преобразователи самим, но это было нецелесообразно, так как проще купить готовое решение. На рынке таких много, и почти все они работают по одному принципу. Есть достаточно дешёвые и крепкие образцы.
Этот сервис мы используем на многих видах карьерной техники и других устройствах, благодаря нему мы смогли предсказывать возможные поломки транспорта и устранять их до наступления более глобальных и дорогих неисправностей. Также мы получили доступ к большому количеству данных, с помощью которых мы можем улучшить работу предприятия и сократить затраты.
