メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

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");