Все знают авто-электриков и диагностов. Я себя называю IT-автоэлектрик. Объединяю физику автомобильных цепей и низкоуровневого программирования на С.
CAN шина это мост между двумя мирами автоэлектриков и IT специалиста. Но для многих этот мост, увы кажется непреодолимой пропастью. Ребята попробуйте программировать на Си и вы пойдёте по этому мосту. Я начинал программировать в телефоне termux. То есть для этого нужно только желание.
Я себя не считаю самым умным. Я просто нашел для себя мощную точку пересечения этих профессий и стал называть этот подход IT-автоэлектрик. Писать свои собственные утилиты на С чтоб заглянуть под капот CAN шины. Под капотом ДВС менее интересно.
Разрабатываю две утилиты "карта" map_id_j1939.c и "микроскоп" viz_j1939.c . Программы написанны теперь нужно проверить в деле. Снимаю лог candump -t a > file на заведомо исправной машине. Настраиваю фильтр своего микроскопа FECA это активные ошибки.

Читаем слева на право от нуля. Byte0 - приоритет + 2 младших бита расширение. Byte1 - голова. Byte2 - хвост Byte3 - адресный. Читаем с лево на прово. Byte3 > [0] это ДВС смотрим поле данных чисто ошибок нет. Хотя по коробке 0xB не чисто . Но на панели ни один чек не светился. Не хочу обесценивать ни чей труд и бизнес. Не дорогой свисток + С + Linux = диагностика.
Что я сделаю теперь? Сниму разъём с датчика наддува.

Поле данных двигателя внутреннего сгорания можем видеть ошибку. Считаем с лево на право давайте от 1 хотя ЭВМ считает от 0. Итак 3,4 и 3 старших бита 5 байта это SPN 5 младших бита 5 байта FMI 6 байт счётчик.

Получается SPN 102 FMI 4 счётчик 1 . Есть подозрение, что утилита работает.
Размер моих логов на сегодняшний день 1 - 3 мегабайта. Если вес лога гигабайты то по идее данные нужно положить в голову страницы и процессор полетит как пуля. Размер скомпилированного файла map_id_j1939.c и viz_j1939.c по 16.5 КБ.
В следующей статье покажу одну аномалию которую я вытянул картой ./map_id_j1939 это моя вторая утилита.
Люблю создавать утилиты с нуля и сейчас глубоко изучаю протокол j1939 на практике через разработку собственного софта. Работаю автоэлектриком по комерческому транспорту. Открыт к предложениям по работе и стажировке. Хочу вкатиться в IT. Все исходники проектов доступны в моём репозитории github.
Комментарии (15)

Radish
09.07.2026 16:05CAN это хорошо, но русский надо подтянуть. Читать больно.

NutsUnderline
09.07.2026 16:05Тут уже проблемы не (только) с "языком" а с "писательством" Нейрослоп зачастую выглядит более человечно.
вы пойдёте по этому мосту
Писать свои инструменты
ну это типа как плохой перевод с другого языка

DataViz Автор
09.07.2026 16:05Я вас услышал. К этому нужно отнестись по серьезный. Я не придал этому значение.

DataViz Автор
09.07.2026 16:05Учитель по русскому языку и литературе была Максенцова Светлана Петровна учила хорошо. А я не учился.
Хорошо что статья короткая. Спасибо буду иметь ввиду.

vadimr
09.07.2026 16:05CAN это хорошо, но язык Си для работы с ним совсем не обязателен. Можно программировать на любом. На каком-нибудь питоне даже поудобнее, можно не париться с распределением и освобождением памяти.
upd: Судя по вашим исходникам, вы и так особенно с этим не паритесь, но таком пути вас ожидают неприятные сюрпризы с битыми данными, Наивно рассчитывать, что всегда массивы будут заполняться до штатной длины.

DataViz Автор
09.07.2026 16:05Я с вами согласен разложить на биты и байты индификотор и поле данных j1939 любой язык подойдёт. Но в планах программировать микроконтроллеры поэтому С.
По количеству элементов например PGN 16 разрядов максимальное количество этих элементов 65 535 + 0 это тоже значение итого 65 536 элементов расширение опускаем.
65 536 колличество этих элементов больше ни когда не будет. То что касается счётчика у меня 32 разрядные инты без знака. Да здесь возможно переполнение. Но переполнить 4.3 миллиарда ? Тогда нужно сделать 64 разрядные переменные здесь я точно за пределы не выйду. arr [65536] да здесь много памяти не используется . 256 КБ Для современного устройства я думаю это не критично. Оптимизацией не занимался вообще. Единственное , что я делал адрес должен быть кратен размеру данных. Там где достаточно 8 разрядных переменных я обьявил 16.
По поводу языков программирования я думаю у каждого своя стихия. Мое личное мнение автоэлектрику нужно осваивать си. Мне например была интересна тема память как тут с python. Мне интересен низкий уровень.

alcotel
09.07.2026 16:05В линуксе многие CAN-адаптеры доступны через такой же интерфейс сокетов, что и сеть. Поэтому можно не только читать дампы, но и достаточно легко всё принимать самому в реальном времени.
Но я всё-таки Си оставляю для микроконтроллеров, а для ПК - can-utils и python-can - наше всё.

NutsUnderline
09.07.2026 16:05canutils вообще то на C :) :) :)

alcotel
09.07.2026 16:05Я не работаю в команде поддержки can-utils или python-can, я пользователь готовых инструментов и библиотеки.
Но в исходники can-utils вполне можете заглянуть, как в референс.
MountainGoat
3D принтеры тоже на CAN работают. В обычной вороне 2 сидят 4 клиента на шине.
DataViz Автор
С принтерами я не знаком. Твое слово клиент мне понравилось. Например блок ABS EBS ECAS это клиенты. Или нулевой клиент это ДВС 11 клиент тормозная система.