このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
J1939 で記録されたフィールドデータをシミュレーションに再生する
この例では、実際のアプリケーション(現場で走行する車両など)の J1939 システムから取得した BLF ファイルから J1939 データを再生する方法を示します。
Simulink ® モデルは、単純な馬力推定アルゴリズムを実行して、現場で発生した可能性のある障害をトリガーします。この例では、フィールド データを使用して、ECU に展開される前に Simulink アルゴリズムに存在していた障害を再現するモデルベースのワークフローの一部を紹介します。また、この例を拡張して、任意のアルゴリズム モデルをテストし、障害をデバッグすることもできます。
J1939 は、Controller Area Network (CAN) バス テクノロジを物理層 として使用する上位層プロトコルです。CAN は J1939 システムのデータ転送の基盤であるため、現場で使用されるツールはデフォルトで J1939 データを CAN フレームとして記録します。この例では、MATLAB ® から CAN バスを介して最初に記録された CAN フレームのデータ再生を実行し、J1939 Network Configuration、J1939 Node Configuration、J1939 CAN Transport Layer、および J1939 Receive の各ブロックを使用して Simulink モデルで受信します。
この例で使用されている BLF ファイルは、「システム構成 (J1939)」サンプル構成を使用して Vector CANoe から生成され、MATLAB および Vehicle Network Toolbox ™ を使用して変更されました。この例では、Vector サンプル コンフィギュレーションで提供される J1939 DBC ファイル PowerTrain_J1939.dbc
も使用します。Vehicle Network Toolbox は、CAN 経由で Simulink モデルを介してパラメータ グループ (PG) を受信および送信するための J1939 Simulink ブロックを提供します。この例では、ループバック構成で接続された MathWorks ® 仮想 CAN チャネルを使用します。
BLFファイルデータを読み取る
blfread
関数を使用して、フィールドで取得された BLF ファイルのチャネル 1 からデータを読み取ります。
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
⋮
このデータには、この例の対象となる EEC1_EMS
という 1 つの PG が含まれています。PG には、エンジン電子コントローラー モジュールからのデータが含まれています。この例では、BLF ファイルからデータセットを操作して、デモンストレーションの目的で意図的に障害モードをトリガーします。Simulink モデルは、変更されたデータセットを使用してこの障害を再現します。
Simulinkモデルを開く
アルゴリズムが含まれている Simulink モデルを開きます。この例に含まれるモデルは、基本的な J1939 ネットワーク設定を使用します。このセットアップと J1939 ブロックの詳細については、例 Simulink での J1939 通信入門 を参照してください。
open demoVNTSL_J1939ReplayExample
モデルの概要
サンプル モデルは、MathWorks 仮想デバイス 1 チャネル 1 を介して EEC1_EMS
PG の受信操作を実行するように構成されています。
J1939 Network Configuration ブロックはデータベース
Powertrain_J1939.dbc
で構成されています。J1939 CAN Transport Layer ブロックは、デバイスを MathWorks 仮想チャネル 1 に設定します。トランスポート層は、指定された仮想チャネルを介して CAN 経由で J1939 メッセージを転送するように構成されています。
J1939 Receive ブロックは、ネットワーク経由で送信されたメッセージを受信します。J1939 受信は、
EEC1_EMS
PG を受信し、必要な入力 (実際のエンジン トルク率 (%) とエンジン速度 (RPM)) を馬力推定アルゴリズムに渡すように構成されています。また、エンジン要求トルク率 (%) をリレーショナル演算子ブロックに渡すように構成されています。残りの出力は、簡潔にするために終了されています。
馬力推定アルゴリズム
馬力推定アルゴリズムは、実際のエンジン トルクのパーセンテージと速度値を取得し、それらからエンジン馬力を計算する単純な計算です。
関係演算子
モデルには 3 つの関係演算子ブロックがあります。
関係演算子 1 は、計算された馬力の値をゼロと比較し、ブール値を出力します。
関係演算子 2 は、エンジンの要求トルク パーセンテージの値をゼロと比較し、ブール値を出力します。
関係演算子 3 は、関係演算子 1 と 2 からの出力の値を比較し、障害インジケータ ランプの状態をトリガーするブール値を出力します。
車両ダッシュボード
車両ダッシュボードは、エンジン回転数を表示するスピードダイヤル、計算された馬力値とエンジン要求トルクのパーセント値を表示する 2 つのゲージ、および障害インジケーター ランプで構成されています。
再生用のチャネルを作成する
canChannel
関数を使用してメッセージを再生するための CAN チャネルを作成します。
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 CAN チャネルを開始します。
start(replayChannel); pause(2);
BLF ファイルから取得したデータを再生します。replay
操作は約 45 秒間実行されます。
replay(replayChannel,canData);
シミュレーションの概要
この例の実行中に、Simulink モデルを観察します。ゲージの値が変化し、車両ダッシュボード セクションの障害インジケーター ランプの赤から緑のライトが変化します。
J1939 Receive ブロックは MATLAB から EEC1_EMS
PG を受信し、対象の信号を復号化して、それを Horsepower Estimator アルゴリズムに渡します。馬力が計算された後、関係演算子 1 はその値をゼロと比較して方向を決定します。J1939 Receive ブロックは、エンジン要求トルク率もリレーショナル演算子 2 に渡します。関係演算子 2 は、その値をゼロと比較して方向を決定します。
値が 0 以上の場合は出力はブール値 1 になり、0 未満 (負) の場合は出力は 0 になります。
関係演算子 3 は、前の 2 つの関係演算子の出力を取得して、それらを等しくします。両方のブロックの値が 0 または 1、つまり正の馬力と正のトルク (1)、または負の馬力と負のトルク (0) の場合、出力は 1 になり、障害表示ランプが緑色に点灯します。ただし、前の関係演算子ブロックのいずれかの値が他方と反対の場合、つまり、正の馬力 (1) と負のトルク (0)、または負の馬力 (0) と正のトルク (1) の場合、出力は 0 になり、障害表示ランプが赤く点灯します。これらの観察は、現場データに基づいてアルゴリズムに欠陥があるかどうかを判断するのに役立ち、アルゴリズムをさらに解析できます。
CANチャネルを停止する
stop(replayChannel);
シミュレーションを停止する
set_param("demoVNTSL_J1939ReplayExample","SimulationCommand","stop");