Этот пример показывает вам, как использовать автоматизированные функции передачи сообщения 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: 11-Jan-2019 00:18:44 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.0050341 sec 100 false 'EngineMsg' [1x8 uint8] 8 [1x1 struct] false false 1.0081 sec 100 false 'EngineMsg' [1x8 uint8] 8 [1x1 struct] false false signals = 2x2 timetable Time VehicleSpeed EngineRPM _____________ ____________ _________ 0.0050341 sec 20 2835 1.0081 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