Основанная на событии коммуникация CAN в MATLAB

Этот пример показывает вам, как сконфигурировать каналы CAN и сообщения для сообщений передачи на событии. Это использует MathWorks виртуальные каналы CAN, соединенные в петлевой настройке.

Когда этот пример основан на отправке и получении сообщений CAN в виртуальной сети, рабочий CAN Explorer в соединении может обеспечить больше полного понимания того, что делает код. Чтобы запустить CAN Explorer, откройте и сконфигурируйте его, чтобы использовать тот же интерфейс в качестве канала получения примера. Убедитесь, что запустили CAN Explorer прежде, чем начать запускать пример для того, чтобы видеть все сообщения, как они происходят.

Этот пример описывает рабочий процесс для сети CAN, но концепция, продемонстрированная также, применяется к сети CAN FD.

Создайте каналы CAN

Создайте каналы CAN для передачи сообщения и приема.

txCh = canChannel("MathWorks", "Virtual 1", 1);
rxCh = canChannel("MathWorks", "Virtual 1", 2);

Откройте файл DBC, который содержит сообщение и определения сигнала, и присоедините его к обоим каналам CAN.

db = canDatabase("CANDatabaseEvent.dbc");
txCh.Database = db;
rxCh.Database = db;

Создайте сообщение CAN

Создайте сообщение CAN EngineMsg использование информации о базе данных.

msgEngineMsg = canMessage(db, "EngineMsg")
msgEngineMsg = 
  Message with properties:

   Message Identification
    ProtocolMode: 'CAN'
              ID: 100
        Extended: 0
            Name: 'EngineMsg'

   Data Details
       Timestamp: 0
            Data: [0 0 0 0 0 0 0 0]
         Signals: [1x1 struct]
          Length: 8

   Protocol Flags
           Error: 0
          Remote: 0

   Other Information
        Database: [1x1 can.Database]
        UserData: []

Сконфигурируйте сообщение для основанной на событии передачи

Чтобы включить сообщение для основанной на событии передачи, используйте transmitEvent команда, задающая канал передачи, сообщение, чтобы указать на канале и значении состояния.

transmitEvent(txCh, msgEngineMsg, "On");

Запустите основанную на событии передачу

Запустите получение и передачу каналов.

start(rxCh);
start(txCh);

Запишите новые значения в Data свойство и непосредственно к VehicleSpeed предупредите, чтобы инициировать автоматическую основанную на событии передачу сообщения на шину CAN.

msgEngineMsg.Data = [250 100 0 0 20 0 0 0];
pause(1);
msgEngineMsg.Signals.VehicleSpeed = 60;
pause(1);

Остановите передачу и получение каналов.

stop(txCh);
stop(rxCh);

Анализируйте поведение основанной на событии передачи

Канал получения теперь имеет два сообщения в наличии, соответствуя двум обновлениям, которые привели к двум передачам.

rxCh.MessagesAvailable
ans = 2

Получите доступные сообщения. Смотрите сообщения и обратите внимание, что каждому установили значения данных ранее к Data свойство.

msgRx = receive(rxCh, Inf, "OutputFormat", "timetable")
msgRx=2×8 timetable
       Time        ID     Extended        Name                   Data              Length      Signals       Error    Remote
    ___________    ___    ________    _____________    ________________________    ______    ____________    _____    ______

    0.01268 sec    100     false      {'EngineMsg'}    {[250 100 0 0 20 0 0 0]}      8       {1x1 struct}    false    false 
    1.0211 sec     100     false      {'EngineMsg'}    {[250 100 0 0 60 0 0 0]}      8       {1x1 struct}    false    false 

Смотрите сигналы и обратите внимание что второй экземпляр VehicleSpeed установили значение данных ранее к VehicleSpeed сигнал.

signals = canSignalTimetable(msgRx)
signals=2×2 timetable
       Time        VehicleSpeed    EngineRPM
    ___________    ____________    _________

    0.01268 sec         20           2835   
    1.0211 sec          60           2835   

Просмотрите сообщения, сконфигурированные для основанной на событии передачи

Чтобы видеть сообщения, сконфигурированные на канале передачи для автоматической коробки передач, используйте transmitConfiguration команда.

transmitConfiguration(txCh)
Periodic Messages

None


Event Messages

ID  Extended   Name            Data         
--- -------- --------- ---------------------
100 false    EngineMsg 250 100 0 0 60 0 0 0

Закройте каналы и файл DBC

Закройте доступ к каналам и файлу DBC путем очищения их переменных из рабочей области.

clear rxCh txCh
clear db