Событие, вызванное сообщением CAN передачи

В этом примере показано, как использовать функции автоматической передачи сообщений CAN Vehicle Network Toolbox™ для отправки сообщений о событии. Он использует каналы MathWorks Virtual CAN, подключенные в строении закольцовывания. Поскольку этот пример основан на отправке и получении сообщений CAN в виртуальной сети, запуск CAN Explorer в сочетании может обеспечить более полное понимание того, что делает код. Чтобы запустить CAN Explorer, откройте и сконфигурируйте его, чтобы использовать тот же интерфейс, что и принимающий канал примера. Убедитесь, что запустили CAN Explorer, прежде чем начинать запускать пример в порядок, чтобы видеть все сообщения по мере их появления.

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

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

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

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

db = canDatabase('CANDatabaseEvent.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: 21-Apr-2021 21:30:02
           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')
msgRx=2×8 timetable
        Time        ID     Extended        Name                   Data              Length      Signals       Error    Remote
    ____________    ___    ________    _____________    ________________________    ______    ____________    _____    ______

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

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

    0.074554 sec         20           2835   
    1.0981 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
Для просмотра документации необходимо авторизоваться на сайте