Этот пример показывает вам, как сконфигурировать каналы 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