Этот пример показывает вам, как использовать автоматизированные функции передачи сообщения CAN Vehicle Network Toolbox™, чтобы отправить сообщения на событии. Это использует MathWorks Virtual CAN channels, соединенный в петлевой настройке. Когда этот пример основан на отправке и получении сообщений CAN в виртуальной сети, рабочий Vehicle CAN Bus Monitor в соединении может обеспечить больше полного понимания того, что делает код. Чтобы запустить Vehicle CAN Bus Monitor, откройте и сконфигурируйте его, чтобы использовать тот же интерфейс в качестве канала получения примера. Убедитесь, что запустили Vehicle CAN Bus Monitor прежде, чем начать запускать пример для того, чтобы видеть все сообщения, как они происходят.
Создайте каналы CAN, на которых можно использовать автоматизированные команды передачи сообщения.
txCh = canChannel('MathWorks', 'Virtual 1', 1); rxCh = canChannel('MathWorks', 'Virtual 1', 2);
В этом примере вы будете использовать файл базы данных CAN, чтобы задать и декодировать сообщения. Откройте базу данных и присоедините ее к каналам CAN.
db = canDatabase('demoVNT_CANdbFiles.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: 29-Jan-2020 21:00:00 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') signals = canSignalTimetable(msgRx)
msgRx = 2x8 timetable Time ID Extended Name Data Length Signals Error Remote ____________ ___ ________ _____________ ___________ ______ ____________ _____ ______ 0.012875 sec 100 false {'EngineMsg'} {1x8 uint8} 8 {1x1 struct} false false 1.0269 sec 100 false {'EngineMsg'} {1x8 uint8} 8 {1x1 struct} false false signals = 2x2 timetable Time VehicleSpeed EngineRPM ____________ ____________ _________ 0.012875 sec 20 2835 1.0269 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