exponenta event banner

Передача сообщения CAN, инициированного событием

В этом примере показано, как использовать функции автоматической передачи сообщений CAN Toolbox™ сети транспортных средств для отправки сообщений о событии. Он использует виртуальные каналы CAN MathWorks, подключенные в конфигурации с закольцовыванием. Поскольку этот пример основан на передаче и получении сообщений 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');

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

Запустите каналы и запишите новые значения либо в свойство Data, либо непосредственно в сигналы для запуска автоматической передачи сообщения на основе событий по шине 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