メインコンテンツ

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

ダイナミックDAQリストでXCP測定を読み取る

この例では、XCP プロトコル機能を使用して XCP サンプル サーバーに接続し、データを取得する方法を示します。XCP サンプル サーバーは、XCP の例のみを対象に特別に設計されています。

Vehicle Network Toolbox ™ は、Controller Area Network (CAN)、Controller Area Network Flexible Data-Rate (CAN FD)、Transmission Control Protocol (TCP)、および User Datagram Protocol (UDP) を含む複数のトランスポート層を介してサーバーとインターフェイスするための MATLAB ® 関数を提供します。この例では、動的 DAQ リストを使用して XCP サンプル サーバーの測定パラメータを読み取ります。

XCP は、モデル、アルゴリズム、または ECU の内部パラメータと変数にアクセスして変更するために使用される高レベル プロトコルです。詳細については、ASAM 標準を参照してください。

A2Lファイルを開く

XCP サーバーへの接続を確立するには、A2L ファイルが必要です。A2L ファイルには、XCP サーバーが提供するすべての機能と性能、およびサーバーに接続する方法の詳細が記述されています。xcpA2L 関数を使用して、サーバー モデルを記述する A2L ファイルを開きます。

a2lInfo = xcpA2L("SampleECU.a2l")
a2lInfo = 
  A2L with properties:

   File Details
                 FileName: 'SampleECU.a2l'
                 FilePath: '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex17137611/SampleECU.a2l'
               ServerName: 'SampleServer'
                 Warnings: [0×0 string]

   Parameter Details
                   Events: {'Event DAQ 100ms'}
                EventInfo: [1×1 xcp.a2l.Event]
             Measurements: {'Line'  'PWM'  'Sine'}
          MeasurementInfo: [3×1 containers.Map]
          Characteristics: {'Gain'  'yData'}
       CharacteristicInfo: [2×1 containers.Map]
                 AxisInfo: [1×1 containers.Map]
            RecordLayouts: [3×1 containers.Map]
             CompuMethods: [1×1 containers.Map]
                CompuTabs: [0×1 containers.Map]
               CompuVTabs: [0×1 containers.Map]

   XCP Protocol Details
        ProtocolLayerInfo: [1×1 xcp.a2l.ProtocolLayer]
                  DAQInfo: [1×1 xcp.a2l.DAQ]
    TransportLayerCANInfo: [1×1 xcp.a2l.XCPonCAN]
    TransportLayerUDPInfo: [0×0 xcp.a2l.XCPonIP]
    TransportLayerTCPInfo: [1×1 xcp.a2l.XCPonIP]

XCPサンプルサーバーを起動する

XCP サンプル サーバーは、実際の XCP サーバーの動作を制御された方法で模倣します。この場合、機能が制限された例にのみ役立ちます。ローカルのサンプル ECU クラスを使用してサンプル サーバー オブジェクトを作成すると、MATLAB ワークスペースにサンプル サーバーが作成されます。XCP サンプル サーバーは、CAN、CAN FD、および TCP のみをサポートします。この例では、デモンストレーションに CAN FD プロトコルを選択します。

sampleServer = SampleECU(a2lInfo,"CAN FD","MathWorks","Virtual 1",1);

XCPチャネルを作成する

サーバーへのアクティブな XCP 接続を作成するには、xcpChannel 関数を使用します。この関数には、サーバー A2L ファイルへの参照と、サーバーとのメッセージングに使用するトランスポート プロトコルの種類が必要です。XCP チャネルは、サンプル サーバーと同じデバイスと a2l ファイルを使用して、相互に接続を確立できるようにする必要があります。

xcpCh = xcpChannel(a2lInfo,"CAN FD","MathWorks","Virtual 1",1)
xcpCh = 
  Channel with properties:

              ServerName: 'SampleServer'
             A2LFileName: 'SampleECU.a2l'
          TransportLayer: 'CAN FD'
    TransportLayerDevice: [1×1 struct]
              SeedKeyDLL: []
             ConnectMode: 'normal'

サーバーに接続する

サーバーとの通信をアクティブにするには、connect 関数を使用します。

connect(xcpCh);

DAQの測定リストを作成する

XCP での測定値は、モデルのメモリ内の変数を表します。サーバーから利用できる測定値は、A2L ファイルで定義されます。測定データを読み取る 1 つの方法は、動的 DAQ リストを使用することです。createMeasurementList 関数を使用して、リストを構成するデータ取得と測定をトリガーするために使用される指定されたイベントを含む動的 DAQ リストを作成します。

createMeasurementList(xcpCh, "DAQ", "Event DAQ 100ms", ["Sine", "PWM", "Line"]);

viewMeasurementLists 関数を使用して構成された動的 DAQ リストを表示します。

viewMeasurementLists(xcpCh)
DAQ List #1 using the "Event DAQ 100ms" event @ 0.100000 seconds with timestamp enabled and the following measurements:
   Line
   PWM
   Sine

XCP サーバーからデータを取得する

startMeasurement 関数を使用して構成された動的 DAQ リストを開始します。サーバーからの DAQ データの送信を開始し、DAQ データを XCP チャネルに保存します。数秒間実行した後、stopMeasurement 関数を使用して測定を停止します。

startMeasurement(xcpCh);
pause(6);
stopMeasurement(xcpCh);

利用可能なすべての測定データを読み取る

XCP チャネルからすべての測定データを timetable 形式で取得するには、readDAQList 関数を使用します。この関数には、XCP チャネルへの参照が必要です。readDAQList は、XCP チャネルによって保持されているすべての利用可能なサンプルを含む timetable を返します。readDAQList によって返される測定値は、A2L ファイルでそれらの測定値に対して定義された計算方法を使用して完全にスケーリングされます。

data = readDAQList(xcpCh);

data には、cell 配列内の createMeasurementList 関数によって定義されたすべての測定リストが含まれています。各 DAQ リストは、返された cell 配列内のインデックスを表します。この場合、測定リストは 1 つだけ作成されたため、対応する timetable を呼び出すことでデータを可視化できます。

data{1}
ans=59×3 timetable
      Time        Line      PWM     Sine 
    ________    ________    ___    ______

    0 sec       0.037571     2     2.4957
    0.05 sec    0.082164     2     3.0416
    0.1 sec     0.094202     2     3.1751
    0.15 sec     0.12429     2     3.4739
    0.2 sec      0.15489     2     3.7172
    0.25 sec     0.18421     2     3.8837
    0.3 sec      0.21429     2     3.9798
    0.35 sec      0.2442     2     3.9967
    0.4 sec      0.27425     2      3.934
    0.45 sec     0.30461     2     3.7921
    0.5 sec      0.33418     2     3.5836
    0.55 sec     0.36608     2       3.29
    0.6 sec      0.39439     2     2.9805
    0.65 sec     0.42422     2     2.6166
    0.7 sec      0.45436     2     2.2246
    0.75 sec     0.48427     0     1.8264
      ⋮

Sine測定データを取得する

Sine 測定の XCP チャネルから取得したデータを取得するには、readDAQList 関数からの出力 timetable でデータを検索します。

plot(data{1}.Sine, "o-")
title("Sine Measurement Data")
xlabel("Data Point")
ylabel("Data Value")

Figure contains an axes object. The axes object with title Sine Measurement Data, xlabel Data Point, ylabel Data Value contains an object of type line.

Line測定データを取得する

Line 測定の XCP チャネルから取得したデータを取得するには、readDAQList 関数からの出力 timetable でデータを検索します。

plot(data{1}.Line, "o-")
title("Line Measurement Data")
xlabel("Data Point")
ylabel("Data Value")

Figure contains an axes object. The axes object with title Line Measurement Data, xlabel Data Point, ylabel Data Value contains an object of type line.

PWM測定データを取得する

PWM 測定の XCP チャネルから取得したデータを取得するには、readDAQList 関数からの出力 timetable でデータを検索します。

plot(data{1}.PWM, "o-")
title("PWM Measurement Data")
xlabel("Data Point")
ylabel("Data Value")

Figure contains an axes object. The axes object with title PWM Measurement Data, xlabel Data Point, ylabel Data Value contains an object of type line.

サーバーから切断する

サーバーとの通信を非アクティブにするには、disconnect 関数を使用します。XCP サーバーは、切断後に安全に閉じることができます。

disconnect(xcpCh);

クリーンアップ

clear sampleServer a2lInfo