Я создаю тест HIL / SIL с Simulink, который проверяет блок управления транспортным средством (VCU) с транспортного средства. Этот VCU взаимодействует с модулем распределения питания (PDM) по сети CAN J1939. PDM обрабатывает входы и выходы от переключателей и исполнительных механизмов и передает информацию на шину CAN. Затем VCU знает, что PDM видит от подключенных датчиков. В свою очередь, VCU передает на шину CAN информацию о том, как PDM должен управлять подключенными исполнительными механизмами.
Мой ноутбук подключен к той же шине CAN с адаптером Vector и Simulink.
Чтобы протестировать VCU, мне нужно имитировать PDM и отправлять сообщения в VCU, как если бы я был PDM. Затем VCU должен предпринять правильные действия и соответствующим образом управлять реальным PDM.
Очевидно, что если я просто имитирую PDM, мои сообщения будут мешать сообщениям, отправленным из настоящего PDM. В общем, мне нужно, чтобы PDM заткнулся и только слушал. Я говорю от имени ДПМ. Однако PDM нельзя настроить в режиме «только прослушивание», поэтому я должен перехватывать все отправляемые им сообщения, чтобы они никогда не приходили в VCU.
Моя идея заключалась в том, что я обнаруживал (наблюдая за полем арбитража всех сообщений), когда PDM начинает отправку, и немного опускал поле арбитража. Он распознал бы приоритет моего «сообщения» над своим собственным и перестал бы передавать. Это как если бы шина CAN всегда была занята, чтобы освободить место для PDM. Это отключило бы PDM без выдачи ошибок. Но другие предложения приветствуются.
Итак (как) можно перехватить сообщения CAN J1939 в MATLAB / Simulink или с помощью отдельного контроллера CAN?