В этом примере показано, как использовать функции автоматической передачи сообщений CAN Toolbox™ сети транспортных средств для отправки сообщений о событии. Он использует виртуальные каналы CAN MathWorks, подключенные в конфигурации с закольцовыванием. Поскольку этот пример основан на передаче и получении сообщений 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');Запустите каналы и запишите новые значения либо в свойство Data, либо непосредственно в сигналы для запуска автоматической передачи сообщения на основе событий по шине 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