использовать canDatabase
открыть файл demoVNT_CANdbFiles.dbc
,Этот документ приведен в качестве официального примера.,Вы также можете использовать свой собственный документ DBC. Дальше в основном используем EngineMsg Это сообщение:
db = canDatabase("demoVNT_CANdbFiles.dbc")
Matlab читает dbc следующим образом:
Проверьте свойство Messages, чтобы увидеть имена всех сообщений, определенных в этом файле (в соответствии с CANoe):
db.Messages
использовать messageInfo
Посмотреть сообщение EngineMsg информация, включая идентификатор, длину данных и список сигналов.
messageInfo(db, "EngineMsg")
использовать signalInfo
Посмотреть сообщение EngineMsg средний сигнал EngineRPM Информация, включая тип, порядок байтов, размер и коэффициенты, используемые для преобразования исходного сигнала в физическую величину.
signalInfo(db, "EngineMsg", "EngineRPM")
Создайте новое сообщение, указав DBC и имя сообщения, которое нужно применить. Сигналы CAN в этом сообщении выражаются в инженерных единицах в дополнение к байтам необработанных данных.
msgEngineInfo = canMessage(db, 'EngineMsg')
также,canMessage
Вы также можете создать сообщение с указанным идентификатором:
Просматривайте значения сигналов для новых сообщений и можете напрямую записывать и читать эти сигналы для упаковки и распаковки данных в сообщении.
msgEngineInfo.Signals
Начальные значения следующие:
Напишите непосредственно в сигнал, чтобы изменить его значение. Вы можете увидеть изменения в Data:
msgEngineInfo.Signals.EngineRPM = 5500.25
Считайте текущее значение сигнала:
msgEngineInfo.Signals
При записи непосредственно в сигнал он автоматически преобразуется и используетсябаза. данных Определение упаковки в сообщенияданные(Десятичный-шестнадцатеричный)середина。Напишите нижеVehicleSpeedData
:
msgEngineInfo.Signals.VehicleSpeed = 70.81
Просмотр текущих сигналов:
msgEngineInfo.Signals
Подключите базу данных к CAN канал, канал сообщение для автоматического преобразования базы Определение данных применяется к входящим сообщениям. база данные анализируют только определенные сообщения. Остальные сообщения принимаются в исходном виде.
rxCh = canChannel("MathWorks", "Virtual 1", 2);
rxCh.Database = db
Начать канал,Создайте несколько потоков сообщений(случайный),Затем раскодируйте сообщение в Получить сообщение. И посмотрите на первые несколько строк полученного сообщения.
start(rxCh);
generateMsgsDb();
rxMsg = receive(rxCh, Inf, "OutputFormat", "timetable");
rxMsg(1:15, :)
Остановите принимающий канал и удалите его из рабочей области.
stop(rxCh);
clear rxCh
Проверьте полученные сообщения Используйте вместеDBCдекодирование:
rxMsg(1, :)
rxMsg.Signals{1}
Извлеките все экземпляры сообщения и просмотрите первые несколько экземпляров этого конкретного сообщения.
allMsgEngine = rxMsg(strcmpi('EngineMsg', rxMsg.Name), :);
allMsgEngine(1:15, :)
использовать canSignalTimetable
Переупакуйте данные сигнала в сообщении в расписание сигналов и просмотрите первые несколько строк расписания сигналов.
signalTimetable = canSignalTimetable(rxMsg, 'EngineMsg');
signalTimetable(1:15, :)
Постройте сигнал как функцию времени:
plot(signalTimetable.Time, signalTimetable.VehicleSpeed)
title('Vehicle Speed from EngineMsg', 'FontWeight', 'bold')
xlabel('Timestamp')
ylabel('Vehicle Speed')
Кроме того, значение сообщения или семафора можно произвольно изменять в рабочей области.
Удалите переменные файла DBC из рабочей области и закройте доступ к файлу DBC.
clear db
Вот и все.