Вопрос

Как смоделировать сеть CAN-шины транспортного средства?

Я хочу сделать проект по тестированию сообщений по шине CAN, но без использования реального транспортного средства. Есть ли способ смоделировать виртуальную сеть по шине CAN?



Перевод вопроса с Mechanics Stack Exchange
Лицензия: CC BY-SA (2.5–4.0)
Оригинальный вопрос: https://mechanics.stackexchange.com/questions/47921/how-to-simulate-a-vehicle-can-bus-network

0 Комментариев

  1. Я рекомендую имитировать устройства с помощью Linux socketcan, виртуальных интерфейсов и подключения к физическому оборудованию.


    Пожалуйста, ознакомьтесь с https://github.com/cantools/cantools/discussions/669 информацией о работе, которую я веду по автоматическому созданию заглушек и анализу файлов DBC с помощью Wireshark, а также о методах имитации Python, которые позволяют работать с данными, понятными человеку, а не с необработанными данными. Это действительно работает!


    Вот черновой вариант кода, который ещё не доведён до рабочего состояния. Я пытаюсь сдвинуть дело с мёртвой точки. Все комментарии и предложения приветствуются.


    https://gist.github.com/mdear/fe9f411a9376cb6ebb14ab7f630774ca


    И... хотя это немного выходит за рамки данного вопроса, я также создал простой скрипт, который позволил мне объединить два сегмента CAN-шины (can0 и vcan0), чтобы обеспечить взаимодействие между имитацией устройств и физическими устройствами: https://gist.github.com/mdear/02973a689c122bfd21143d8a6095d132


  1. Это достойное начинание, но я подозреваю, что любое решение, которое вы могли бы купить, обошлось бы гораздо дороже, чем покупка важных компьютеров на свалке [металлоломе] и создание собственного виртуального «тестового автомобиля».



    Для ваших целей может быть достаточно даже одного ЭБУ и «модуля кузова» (в терминологии GM — BCM/BCU).



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


  1. На самом деле есть два способа добиться этого.




    1. Подключите все необходимые узлы к стенду. Например, это может быть ЭБУ двигателя, комбинация приборов, блок управления кузовом, подрулевой переключатель, задний модуль и т. д.


    2. Отслеживайте данные CAN на соответствующем транспортном средстве, чтобы знать, какие данные требуются, а затем передавайте их с собственного устройства, например ПК, платы для разработки на базе CAN-шины и т. д. Я предпочитаю использовать приемопередатчик USB-CAN и ПК, чтобы иметь возможность писать собственные скрипты и программы для отслеживания трафика и передачи данных в определенное время при определенных условиях. Преимущество этого метода в том, что на экране можно отображать индикаторы и графики.




    Всё зависит от того, чего вы хотите добиться и почему.



    Преимущество первого варианта в том, что это «реальное» оборудование, которое выглядит точно так же, как в автомобиле. Однако проблема в том, что могут возникнуть сотни ошибок, если не подключить все электрические устройства, так как некоторые блоки управления будут искать датчики, исполнительные механизмы, даже лампочки и т. д., которых там нет.



    Второй вариант позволяет сэкономить место и устраняет проблему отсутствия оборудования. Вы просто передаёте все идентификаторы CAN и данные, которые были бы на автомобиле. Проблема в том, что могут возникнуть проблемы с синхронизацией систем безопасности. Поскольку передаётся 95 % данных, не имеет значения, когда именно они передаются, главное, чтобы они были получены в течение определённого времени. Но некоторые данные действуют по принципу «вызов-ответ», например, узел 1 отправляет «xxxxxxx», узел 2 только после этого отправляет «xxxxxx1», а затем узел 1 продолжает отправлять остальные данные. Или же конкретный узел должен отправить данные первым, чтобы активировать остальные. Хотя, если достаточно долго отслеживать данные в реальном времени, не так уж сложно определить время.



    Обычно я подключаю ЭБУ двигателя к стендовой установке со всеми необходимыми датчиками и исполнительными механизмами, а затем подключаю её к своему компьютеру с помощью устройства USB-CAN.



    Просто помните, что автомобильная шина CAN на самом деле не такая уж сложная: каждый узел просто передаёт несколько идентификаторов с данными объёмом до 8 байт. Электронные блоки управления/узлы не «общаются» друг с другом, они «глупые», они просто отслеживают данные на шине и вносят изменения на основе этих данных. Точно имитируйте эти данные, и проблем не возникнет.



    Я бы не стал использовать самодельные устройства с шиной CAN и открытым исходным кодом, такие как Arduino, поскольку они обычно недостаточно быстрые для передачи и обработки до 100 идентификаторов. Я бы вложил деньги в хороший анализатор шины CAN, например Kvaser.



    Я лично собрал свой собственный анализатор шины CAN на процессоре с тактовой частотой 72 МГц, который, на мой взгляд, является минимальным требованием для моделирования полноценной сети. Всё зависит от ваших знаний в области электроники и программного обеспечения. Собрать собственный анализатор и печатную плату на заказ не так уж сложно, даже если вы новичок в электронике.


  1. Ваш ответ можно улучшить, добавив дополнительную информацию. Пожалуйста, отредактируйте его, добавив подробности, например цитаты или документацию, чтобы другие пользователи могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.
  1. Было бы полезно, если бы вы подробнее рассказали о том, что вы пытаетесь сделать в рамках своего проекта.
Вы уже ответили на этот вопрос