Этот пример показывает вам, как использовать 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, на которых можно отправить и получить информацию.
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, чтобы отправить в сети.
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: []
Чтобы начать использовать каналы для передачи и получать операции, разместите их онлайн.
start(rxCh) start(txCh)
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)
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 свойство канала 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
