メインコンテンツ

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

直接取得による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 関数を提供します。この例では、直接メモリ アクセスを使用してサンプル サーバーの測定パラメータを読み取ります。

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-ex10406968/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 のみをサポートします。この例では、デモンストレーションのために TCP プロトコルを選択します。

sampleServer = SampleECU(a2lInfo,"TCP");

XCPチャネルを作成する

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

xcpCh = xcpChannel(a2lInfo, "TCP")
xcpCh = 
  Channel with properties:

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

サーバーに接続する

サーバーとの通信を有効にするには、connect 関数を使用します。

connect(xcpCh);

測定データを直接取得

XCP での測定値は、サンプル サーバーのメモリ内の変数を表します。サーバーから利用できる測定値は、A2L ファイルで定義されます。測定データを読み取る 1 つの方法は、直接メモリ アクセスを使用することです。readMeasurement 関数は、指定された測定値の現在の値をサーバーから取得します。バッファリングなしの単一読み取りです。

SineData = readMeasurement(xcpCh, "Sine") 
SineData = 
1
LineData = readMeasurement(xcpCh, "Line")
LineData = 
0
PWMData = readMeasurement(xcpCh, "PWM")
PWMData = 
2

測定データを継続的に取得

カスタム UI で値を可視化したり、値を他のプロセスの入力として使用したりするなど、さまざまな用途のためにデータをプールするために、定期的に測定値を継続的に読み取る必要がある場合があります。このような場合、readMeasurement はタイマーまたはループによって駆動される任意のタイプの間隔で呼び出すことができます。この方法で測定値を読み取る方法は、非同期または低周波の目的に最適です。

サーバーから切断する

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

disconnect(xcpCh)

クリーン アップ

clear sampleServer a2lInfo