Событие инициированная передача сообщения CAN

Этот пример показывает вам, как использовать автоматизированные функции передачи сообщения CAN Vehicle Network Toolbox™, чтобы отправить сообщения на событии. Это использует MathWorks Virtual CAN channels, соединенный в петлевой настройке. Когда этот пример основан на отправке и получении сообщений CAN в виртуальной сети, рабочий Vehicle CAN Bus Monitor в соединении может обеспечить больше полного понимания того, что делает код. Чтобы запустить Vehicle CAN Bus Monitor, откройте и сконфигурируйте его, чтобы использовать тот же интерфейс в качестве канала получения примера. Убедитесь, что запустили Vehicle CAN Bus Monitor прежде, чем начать запускать пример для того, чтобы видеть все сообщения, как они происходят.

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

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

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

В этом примере вы будете использовать файл базы данных CAN, чтобы задать и декодировать сообщения. Откройте базу данных и присоедините ее к каналам CAN.

db = canDatabase('demoVNT_CANdbFiles.dbc');
txCh.Database = db;
rxCh.Database = db;

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

Можно создать сообщение CAN, чтобы указать для передачи события с помощью информации о базе данных.

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');

Запустите передачу сообщения о событии

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

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

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

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

rxCh
rxCh = 

  Channel with properties:

   Device Information
            DeviceVendor: 'MathWorks'
                  Device: 'Virtual 1'
      DeviceChannelIndex: 2
      DeviceSerialNumber: 0
            ProtocolMode: 'CAN'

   Status Information
                 Running: 0
       MessagesAvailable: 2
        MessagesReceived: 0
     MessagesTransmitted: 0
    InitializationAccess: 1
        InitialTimestamp: 30-Jul-2020 06:35:35
           FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All'

   Channel Information
               BusStatus: 'N/A'
              SilentMode: 0
         TransceiverName: 'N/A'
        TransceiverState: 'N/A'
       ReceiveErrorCount: 0
      TransmitErrorCount: 0
                BusSpeed: 500000
                     SJW: []
                   TSEG1: []
                   TSEG2: []
            NumOfSamples: []

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

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

msgRx = receive(rxCh, Inf, 'OutputFormat', 'timetable')
signals = canSignalTimetable(msgRx)
msgRx =

  2x8 timetable

        Time        ID     Extended        Name            Data        Length      Signals       Error    Remote
    ____________    ___    ________    _____________    ___________    ______    ____________    _____    ______

    0.011876 sec    100     false      {'EngineMsg'}    {1x8 uint8}      8       {1x1 struct}    false    false 
    1.0223 sec      100     false      {'EngineMsg'}    {1x8 uint8}      8       {1x1 struct}    false    false 


signals =

  2x2 timetable

        Time        VehicleSpeed    EngineRPM
    ____________    ____________    _________

    0.011876 sec         20           2835   
    1.0223 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