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