В этом примере показано, как воспроизвести данные J1939 из BLF-файла, полученного от системы J1939 в реальном приложении, таком как транспортное средство, запускающееся в поле. Модель Simulink запускает простой алгоритм средства оценки лошадиной силы, чтобы инициировать отказ, который может произойти в поле. Пример берет вас через часть основанных на модели полевых данных об использовании рабочего процесса, чтобы воссоздать отказ, который присутствовал в алгоритме Simulink, прежде чем это было развернуто на ECU и может быть расширено, чтобы протестировать любую модель алгоритма, чтобы отладить отказы.
J1939 является протоколом более высокого слоя, который использует технологию шины Сети области контроллера (CAN) в качестве физического уровня. Поскольку CAN является базисом передачи данных в системе J1939, инструмент, используемый в поле журналами по умолчанию данные J1939 как системы координат CAN. Этот пример выполняет воспроизведение данных первоначально регистрируемых систем координат CAN по шине CAN из MATLAB и получает в модели Simulink с помощью Конфигурации сети J1939, Настройки Узла J1939, транспортного уровня J1939 CAN, и J1939 Получают блоки.
BLF-файл, используемый в этом примере, был сгенерирован от Векторного КАНОЭ с помощью "Конфигурации системы (J1939)" демонстрационная настройка и изменил использование MATLAB и Vehicle Network Toolbox. Этот пример также использует J1939 DBC-file PowerTrain_J1939.dbc
, предоставленный Векторную демонстрационную настройку. Vehicle Network Toolbox обеспечивает блоки Simulink J1939 для получения и передачи групп параметра (PG) с помощью моделей Simulink по CAN. Пример использует MathWorks виртуальные каналы CAN, соединенные в петлевой настройке.
Используя blfread
функция, считанная данные из канала 1 из BLF-файла, который был получен в поле.
canData = blfread("LoggingBLF_J1939Replay.blf",1)
canData=15000×8 timetable
Time ID Extended Name Data Length Signals Error Remote
____________ _________ ________ __________ ___________________________________ ______ ____________ _____ ______
0.000568 sec 418316032 true {0×0 char} {[ 76 52 169 232 0 0 0 0]} 8 {0×0 struct} false false
0.001128 sec 418316035 true {0×0 char} {[ 78 52 169 232 0 3 0 0]} 8 {0×0 struct} false false
0.001688 sec 418316043 true {0×0 char} {[ 75 52 169 232 0 9 0 0]} 8 {0×0 struct} false false
0.002244 sec 418316055 true {0×0 char} {[ 77 52 169 232 0 19 0 0]} 8 {0×0 struct} false false
0.002796 sec 418316083 true {0×0 char} {[ 79 52 169 232 0 38 0 0]} 8 {0×0 struct} false false
0.003364 sec 418316262 true {0×0 char} {[ 105 52 169 232 0 131 0 16]} 8 {0×0 struct} false false
0.003932 sec 418316262 true {0×0 char} {[ 105 52 169 232 0 131 0 16]} 8 {0×0 struct} false false
0.25158 sec 201326595 true {0×0 char} {[252 255 255 255 248 255 255 255]} 8 {0×0 struct} false false
0.25216 sec 201326603 true {0×0 char} {[252 255 255 255 248 255 255 255]} 8 {0×0 struct} false false
0.25272 sec 217055747 true {0×0 char} {[ 192 0 0 250 240 240 7 3]} 8 {0×0 struct} false false
0.2533 sec 217056000 true {0×0 char} {[ 1 0 0 0 0 252 0 255]} 8 {0×0 struct} false false
0.25386 sec 217056256 true {0×0 char} {[ 240 0 125 208 7 0 241 0]} 8 {0×0 struct} false false
0.25444 sec 418382091 true {0×0 char} {[ 0 0 0 0 0 1 11 3]} 8 {0×0 struct} false false
0.25501 sec 418383107 true {0×0 char} {[ 125 0 0 125 0 0 0 0]} 8 {0×0 struct} false false
0.2556 sec 418384139 true {0×0 char} {[ 0 0 0 0 0 0 0 0]} 8 {0×0 struct} false false
0.25618 sec 419283979 true {0×0 char} {[ 3 0 0 255 255 255 255 255]} 8 {0×0 struct} false false
⋮
Эти данные содержат один представляющий интерес PG для этого примера под названием EEC1_EMS
. PG содержит данные, прибывающие из модуля Электронного регулятора Engine. Этот пример управляет набором данных из BLF-файла, чтобы сознательно инициировать тип отказа в демонстрационных целях. Модель Simulink воссоздает этот отказ с помощью модифицированного набора данных.
Откройте модель Simulink, которая содержит ваш алгоритм. Модель, содержавшаяся в этом примере, использует основную настройку сети J1939. Для получения дополнительной информации об этой настройке и блоках J1939, смотрите пример Начало работы с Коммуникацией J1939 в Simulink.
open demoVNTSL_J1939ReplayExample
Модель в качестве примера сконфигурирована, чтобы выполнить получить операцию для EEC1_EMS
PG по виртуальному устройству MathWorks 1 канал 1.
Блок J1939 Network Configuration сконфигурирован с базой данных Powertrain_J1939.dbc
.
Блок J1939 CAN Transport Layer устанавливает Устройство на MathWorks виртуальный канал 1. Транспортный уровень сконфигурирован, чтобы передать сообщения J1939 по CAN через заданный виртуальный канал.
Блок J1939 Receive получает сообщения, переданные по сети. J1939 Получают, сконфигурирован, чтобы получить EEC1_EMS
PG и передает необходимые входные параметры (Фактический Крутящий момент Процента Engine (%) и Скорость вращения двигателя (об/мин)) к Алгоритму Средства оценки Лошадиной силы. Это также сконфигурировано, чтобы передать Engine Потребованный Крутящий момент Процента (%) с блоком оператора отношения. Остальная часть выходных параметров была отключена для простоты.
Алгоритм Средства оценки Лошадиной силы является простым вычислением, которое берет фактический процент крутящего момента механизма и значения скорости и вычисляет лошадиную силу механизма от них.
В модели существует три блока оператора отношения:
Оператор отношения 1 сравнивает значение вычисленной лошадиной силы, чтобы обнулить и выводит Boolean.
Оператор отношения 2 выдерживает сравнение, значение механизма потребовало процент крутящего момента, чтобы обнулить и выводит Boolean.
Оператор отношения 3 сравнивает значение выходных параметров от Операторов отношения 1 и 2 и выводит Boolean, чтобы инициировать состояние лампы Индикатора Отказа.
Инструментальная панель Транспортного средства состоит из быстрого набора, показывающего об/мин механизма, два прибора, показывающие вычисленное значение лошадиной силы и процента механизма, потребовали крутящий момент и лампу Индикатора Отказа.
Создайте канал CAN, чтобы воспроизвести сообщения с помощью canChannel
функция.
replayChannel = canChannel("MathWorks","Virtual 1",2);
Присвойте время симуляции и запустите симуляцию.
set_param("demoVNTSL_J1939ReplayExample","StopTime","inf"); set_param("demoVNTSL_J1939ReplayExample","SimulationCommand","start");
Сделайте паузу, пока симуляция полностью не запускается.
while strcmp(get_param("demoVNTSL_J1939ReplayExample","SimulationStatus"),"stopped") end
Запустите канал CAN MATLAB.
start(replayChannel); pause(2);
Воспроизведите данные, полученные из BLF-файла. replay
операция запускается в течение приблизительно 45 секунд.
replay(replayChannel,canData);
Во время выполнения этого примера наблюдайте модель Simulink. Будут изменения в значении в приборах и переходе красного зеленого света лампы Индикатора Отказа в разделе Vehicle Dashboard.
Блок J1939 Receive получает EEC1_EMS
PG из MATLAB, декодирует сигналы интереса и передает их Алгоритму Средства оценки Лошадиной силы. После того, как лошадиная сила вычисляется, Оператор отношения 1 сравнивает свои значения, чтобы обнулить, чтобы определить направление. Блок J1939 Receive также передает Engine Потребованный Крутящий момент Процента Оператору отношения 2. Оператор отношения 2 сравнивает свои значения, чтобы обнулить, чтобы определить направление.
Выход является Boolean 1, если значение больше или равно нулю, или 0, если это меньше (отрицательного) нуля.
Оператор отношения 3 берет выходные параметры более ранних двух операторов отношения и приравнивает их. Если значение для обоих блоки 0 или 1, i.e., положительная лошадиная сила и положительный крутящий момент (1), или отрицательная лошадиная сила и отрицательный крутящий момент (0), это обеспечивает выход 1, который в свою очередь инициировал зеленый свет лампы Индикатора Отказа. Однако, если значение для любого из более ранних блоков оператора отношения напротив другого, i.e., положительная лошадиная сила (1) и отрицательный крутящий момент (0), или отрицательная лошадиная сила (0) и положительный крутящий момент (1), это обеспечивает выход 0, который в свою очередь инициировал красный свет лампы Индикатора Отказа. Эти наблюдения полезны в определении, является ли алгоритм дефектным на основе полевых данных, и можно далее анализировать алгоритм.
stop(replayChannel);
set_param("demoVNTSL_J1939ReplayExample","SimulationCommand","stop");