exponenta event banner

Использование каналов и сообщений CAN FD

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

Просмотр доступных каналов CAN FD

Использовать canFDChannelList для просмотра всех доступных каналов устройств, поддерживающих CAN FD.

canFDChannelList
ans =

  2x6 table

      Vendor         Device       Channel    DeviceModel    ProtocolMode     SerialNumber
    ___________    ___________    _______    ___________    _____________    ____________

    "MathWorks"    "Virtual 1"       1        "Virtual"     "CAN, CAN FD"        "0"     
    "MathWorks"    "Virtual 1"       2        "Virtual"     "CAN, CAN FD"        "0"     

Создание каналов передачи и приема

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

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

  Channel with properties:

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

   Status Information
                 Running: 0
       MessagesAvailable: 0
        MessagesReceived: 0
     MessagesTransmitted: 0
    InitializationAccess: 1
        InitialTimestamp: [0x0 datetime]
           FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All'

   Bit Timing Information
               BusStatus: 'N/A'
              SilentMode: 0
         TransceiverName: 'N/A'
        TransceiverState: 'N/A'
       ReceiveErrorCount: 0
      TransmitErrorCount: 0
     ArbitrationBusSpeed: []
            DataBusSpeed: []

   Other Information
                Database: []
                UserData: []

Настройка скорости шины

Каналы CAN FD требуют настройки скорости шины перед выходом в оперативный режим. Сконфигурированы как скорости арбитража, так и фазовые скорости передачи данных.

configBusSpeed(txCh, 500000, 1000000);
configBusSpeed(rxCh, 500000, 1000000);

Открытие файла базы данных CAN

В файлах базы данных CAN указывается сообщение CAN FD.

db = canDatabase('CANFDExample.dbc')
rxCh.Database = db;
db = 

  Database with properties:

             Name: 'CANFDExample'
             Path: '/tmp/BR2021ad_1584584_202060/publish_examples0/tp21235eaf/ex36915890/CANFDExample.dbc'
            Nodes: {}
         NodeInfo: [0x0 struct]
         Messages: {'CANFDMessage'}
      MessageInfo: [1x1 struct]
       Attributes: {2x1 cell}
    AttributeInfo: [2x1 struct]
         UserData: []

Запуск каналов

Используйте start для перевода каналов в оперативный режим.

start(txCh);
start(rxCh);

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

Сообщения CAN FD создаются также с помощью canFDMessage.

msg1 = canFDMessage(500, false, 12)
msg2 = canFDMessage(1000, false, 24);
msg3 = canFDMessage(1500, false, 64);

% To engage the bit rate switch capability of CAN FD, set the |BRS| property of the messages.
msg1.BRS = true;
msg2.BRS = true;
msg3.BRS = true;

% CAN FD messages can also be created using a database file. The database defines if a message is CAN or CAN FD. BRS status is also taken from the database.
msg4 = canFDMessage(db, 'CANFDMessage')
msg1 = 

  Message with properties:

   Message Identification
    ProtocolMode: 'CAN FD'
              ID: 500
        Extended: 0
            Name: ''

   Data Details
       Timestamp: 0
            Data: [0 0 0 0 0 0 0 0 0 0 0 0]
         Signals: []
          Length: 12
             DLC: 9

   Protocol Flags
             BRS: 0
             ESI: 0
           Error: 0

   Other Information
        Database: []
        UserData: []


msg4 = 

  Message with properties:

   Message Identification
    ProtocolMode: 'CAN FD'
              ID: 1
        Extended: 0
            Name: 'CANFDMessage'

   Data Details
       Timestamp: 0
            Data: [1x48 uint8]
         Signals: []
          Length: 48
             DLC: 14

   Protocol Flags
             BRS: 1
             ESI: 0
           Error: 0

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

Передача сообщений

Используйте канал передачи для отправки сообщений.

transmit(txCh, [msg1 msg2 msg3 msg4])

Получать сообщения

Получение сообщений от канала. Следует отметить, что типом возврата для каналов CAN FD является расписание, содержащее информацию, специфичную для CAN FD.

rxMsg = receive(rxCh, Inf)
rxMsg =

  4x12 timetable

       Time         ID     Extended          Name          ProtocolMode                           Data                            Length    DLC      Signals       Error    Remote     BRS      ESI 
    ___________    ____    ________    ________________    ____________    ___________________________________________________    ______    ___    ____________    _____    ______    _____    _____

    0.12818 sec     500     false      {0x0 char      }     {'CAN FD'}     {[                        0 0 0 0 0 0 0 0 0 0 0 0]}      12       9     {0x0 struct}    false    false     true     false
    0.12818 sec    1000     false      {0x0 char      }     {'CAN FD'}     {[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]}      24      12     {0x0 struct}    false    false     true     false
    0.12819 sec    1500     false      {0x0 char      }     {'CAN FD'}     {1x64 uint8                                       }      64      15     {0x0 struct}    false    false     true     false
    0.12819 sec       1     false      {'CANFDMessage'}     {'CAN FD'}     {1x48 uint8                                       }      48      14     {1x1 struct}    false    false     true     false

Остановить каналы

Используйте stop для перевода каналов в автономный режим.

stop(txCh);
stop(rxCh);