Этот пример показывает вам, как сконфигурировать каналы CAN и сообщения для сообщений передачи на событии. Это использует MathWorks виртуальные каналы CAN, соединенные в петлевой настройке.
Когда этот пример основан на отправке и получении сообщений CAN в виртуальной сети, рабочий CAN Explorer в соединении может обеспечить больше полного понимания того, что делает код. Чтобы запустить CAN Explorer, откройте и сконфигурируйте его, чтобы использовать тот же интерфейс в качестве канала получения примера. Убедитесь, что запустили CAN Explorer прежде, чем начать запускать пример для того, чтобы видеть все сообщения, как они происходят.
Этот пример описывает рабочий процесс для сети CAN, но концепция, продемонстрированная также, применяется к сети CAN FD.
Создайте каналы CAN для передачи сообщения и приема.
txCh = canChannel("MathWorks", "Virtual 1", 1); rxCh = canChannel("MathWorks", "Virtual 1", 2);
Откройте файл DBC, который содержит сообщение и определения сигнала, и присоедините его к обоим каналам CAN.
db = canDatabase("CANDatabaseEvent.dbc");
txCh.Database = db;
rxCh.Database = db;Создайте сообщение CAN EngineMsg использование информации о базе данных.
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");Запустите получение и передачу каналов.
start(rxCh); start(txCh);
Запишите новые значения в Data свойство и непосредственно к VehicleSpeed предупредите, чтобы инициировать автоматическую основанную на событии передачу сообщения на шину CAN.
msgEngineMsg.Data = [250 100 0 0 20 0 0 0]; pause(1); msgEngineMsg.Signals.VehicleSpeed = 60; pause(1);
Остановите передачу и получение каналов.
stop(txCh); stop(rxCh);
Канал получения теперь имеет два сообщения в наличии, соответствуя двум обновлениям, которые привели к двум передачам.
rxCh.MessagesAvailable
ans = 2
Получите доступные сообщения. Смотрите сообщения и обратите внимание, что каждому установили значения данных ранее к Data свойство.
msgRx = receive(rxCh, Inf, "OutputFormat", "timetable")
msgRx=2×8 timetable
Time ID Extended Name Data Length Signals Error Remote
___________ ___ ________ _____________ ________________________ ______ ____________ _____ ______
0.01268 sec 100 false {'EngineMsg'} {[250 100 0 0 20 0 0 0]} 8 {1x1 struct} false false
1.0211 sec 100 false {'EngineMsg'} {[250 100 0 0 60 0 0 0]} 8 {1x1 struct} false false
Смотрите сигналы и обратите внимание что второй экземпляр VehicleSpeed установили значение данных ранее к VehicleSpeed сигнал.
signals = canSignalTimetable(msgRx)
signals=2×2 timetable
Time VehicleSpeed EngineRPM
___________ ____________ _________
0.01268 sec 20 2835
1.0211 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
Закройте доступ к каналам и файлу DBC путем очищения их переменных из рабочей области.
clear rxCh txCh clear db