Используя метки времени

Этот пример показывает вам, как использовать Vehicle Network Toolbox™ со свойством канала CAN InitialTimestamp работать с относительными и абсолютными метками времени для сообщений CAN. Это также использует MathWorks Virtual CAN channels, соединенный в петлевой настройке.

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

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

db = canDatabase('VehicleInfo.dbc')
db = 

  Database with properties:

             Name: 'VehicleInfo'
             Path: '/tmp/BR2021ad_1584584_202060/publish_examples1/tp7b109833/ex13648766/VehicleInfo.dbc'
            Nodes: {}
         NodeInfo: [0x0 struct]
         Messages: {'WheelSpeeds'}
      MessageInfo: [1x1 struct]
       Attributes: {'BusType'}
    AttributeInfo: [1x1 struct]
         UserData: []

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

Создайте каналы CAN, на которых можно отправить и получить информацию.

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

  Channel with properties:

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

   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'

   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: []
                UserData: []


rxCh = 

  Channel with properties:

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

   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'

   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: []
                UserData: []

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

Можно создать сообщения CAN, чтобы отправить в сети.

msg = canMessage(db,'WheelSpeeds')
msg = 

  Message with properties:

   Message Identification
    ProtocolMode: 'CAN'
              ID: 1200
        Extended: 0
            Name: 'WheelSpeeds'

   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: []

Запустите каналы CAN

Чтобы начать использовать каналы для передачи и получать операции, разместите их онлайн.

start(rxCh)
start(txCh)

Отправьте сообщения CAN

transmit функция отправляет сообщения на сеть. Используйте pause задержать передачи. Обновите данные сигнала каждая передача.

msg.Signals.LF_WSpeed = 10;
transmit(txCh,msg)
pause(1);
msg.Signals.LF_WSpeed = 20;
transmit(txCh,msg)
pause(2);
msg.Signals.LF_WSpeed = 30;
transmit(txCh,msg)
pause(3);
msg.Signals.LF_WSpeed = 40;
transmit(txCh,msg)
pause(1);
msg.Signals.LF_WSpeed = 50;
transmit(txCh,msg)

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

receive функция получает информацию из представления канала, обменивающегося сообщениями, это произошло в сети.

stop(rxCh)
stop(txCh)
msgRx = receive(rxCh,Inf,'OutputFormat','timetable')
msgRx =

  5x8 timetable

        Time         ID     Extended         Name                   Data             Length      Signals       Error    Remote
    ____________    ____    ________    _______________    ______________________    ______    ____________    _____    ______

    0.065344 sec    1200     false      {'WheelSpeeds'}    {[42 248 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 
    1.0754 sec      1200     false      {'WheelSpeeds'}    {[46 224 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 
    3.0879 sec      1200     false      {'WheelSpeeds'}    {[50 200 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 
    6.1003 sec      1200     false      {'WheelSpeeds'}    {[54 176 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 
    7.1206 sec      1200     false      {'WheelSpeeds'}    {[58 152 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 

Смотрите данные сигнала

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

signalTimetable = canSignalTimetable(msgRx)
plot(signalTimetable.Time,signalTimetable.LF_WSpeed,'x')
title('Signal Data with Relative Time','FontWeight','bold')
xlabel('Relative Timestamp')
ylabel('Signal Value')
ylim([0 60])
signalTimetable =

  5x4 timetable

        Time        LR_WSpeed    RR_WSpeed    RF_WSpeed    LF_WSpeed
    ____________    _________    _________    _________    _________

    0.065344 sec      -100         -100         -100          10    
    1.0754 sec        -100         -100         -100          20    
    3.0879 sec        -100         -100         -100          30    
    6.1003 sec        -100         -100         -100          40    
    7.1206 sec        -100         -100         -100          50    

Смотрите свойство InitialTimestamp

Просмотрите InitialTimestamp свойство канала CAN получения. Это - значение datetime, которое дает абсолютное время того, когда канал был запущен.

rxCh.InitialTimestamp
ans = 

  datetime

   27-Jan-2021 15:38:51

Анализируйте данные с абсолютными метками времени

Относительные метки времени каждого сообщения и свойства InitialTimestamp объединяются, чтобы применить абсолютные временные стоимости к каждому сообщению или сигналу, содержавшему в.

msgRx.Time = msgRx.Time + rxCh.InitialTimestamp
signalTimetable = canSignalTimetable(msgRx)
figure
plot(signalTimetable.Time,signalTimetable.LF_WSpeed,'x')
title('Signal Data with Absolute Time','FontWeight','bold')
xlabel('Absolute Timestamp')
ylabel('Signal Value')
ylim([0 60])
msgRx =

  5x8 timetable

            Time             ID     Extended         Name                   Data             Length      Signals       Error    Remote
    ____________________    ____    ________    _______________    ______________________    ______    ____________    _____    ______

    27-Jan-2021 15:38:51    1200     false      {'WheelSpeeds'}    {[42 248 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 
    27-Jan-2021 15:38:52    1200     false      {'WheelSpeeds'}    {[46 224 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 
    27-Jan-2021 15:38:54    1200     false      {'WheelSpeeds'}    {[50 200 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 
    27-Jan-2021 15:38:57    1200     false      {'WheelSpeeds'}    {[54 176 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 
    27-Jan-2021 15:38:58    1200     false      {'WheelSpeeds'}    {[58 152 0 0 0 0 0 0]}      8       {1x1 struct}    false    false 


signalTimetable =

  5x4 timetable

            Time            LR_WSpeed    RR_WSpeed    RF_WSpeed    LF_WSpeed
    ____________________    _________    _________    _________    _________

    27-Jan-2021 15:38:51      -100         -100         -100          10    
    27-Jan-2021 15:38:52      -100         -100         -100          20    
    27-Jan-2021 15:38:54      -100         -100         -100          30    
    27-Jan-2021 15:38:57      -100         -100         -100          40    
    27-Jan-2021 15:38:58      -100         -100         -100          50