Событие инициированная передача сообщения 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: 11-Jan-2019 00:18:44
           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.0050341 sec    100     false      'EngineMsg'    [1x8 uint8]      8       [1x1 struct]    false    false 
    1.0081 sec       100     false      'EngineMsg'    [1x8 uint8]      8       [1x1 struct]    false    false 


signals =

  2x2 timetable

        Time         VehicleSpeed    EngineRPM
    _____________    ____________    _________

    0.0050341 sec         20           2835   
    1.0081 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