メインコンテンツ

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

CDFX ファイル入門

この例では、キャリブレーション データ ファイルを MATLAB ® にインポートし、その内容を確認および変更し、変更内容をディスク上のファイルにエクスポートする方法を示します。

CDFXファイルをインポートする

cdfx 関数を使用して CDFX ファイルからデータをインポートします。

cdfxObj = cdfx("CDFXExampleFile.cdfx")
cdfxObj = 
  CDFX with properties:

       Name: "CDFXExampleFile.cdfx"
       Path: "/tmp/Bdoc25a_2864802_1971459/tpcbc94420/vnt-ex38787800/CDFXExampleFile.cdfx"
    Version: "CDF20"

キャリブレーション データの可視化

CDFX ファイルには、車両の ECU (システム) とそのパラメータ (インスタンス) に関する情報が含まれています。instanceListsystemList を使用して、キャリブレーション データを表形式で可視化します。これらの関数を使用すると、インスタンスまたはシステムの短縮名に基づいてフィルタリングすることもできます。

iList = instanceList(cdfxObj)
iList=4×6 table
             ShortName                  System          Category           Value           Units     FeatureReference 
    ____________________________    _______________    __________    _________________    _______    _________________

    "ASAM.C.SCALAR.GAIN"            "ExampleSystem"    "VALUE"       {[            3]}    "gain"     "FunctionScalar" 
    "ASAM.C.SCALAR.BITMASK_0001"    "ExampleSystem"    "BOOLEAN"     {[            1]}    ""         "FunctionScalar" 
    "ASAM.C.MAP"                    "ExampleSystem"    "MAP"         {1×1 struct     }    ""         "Sample_Model_13"
    "ASAM.C.COM_AXIS"               "ExampleSystem"    "COM_AXIS"    {[-9 -8 -5 -3 0]}    "hours"    ""               

希望する短い名前に基づいてテーブルをフィルタリングする場合は、2 番目の引数として文字列を渡します。

iListArray = instanceList(cdfxObj, "ASAM.C.SCALAR")
iListArray=2×6 table
             ShortName                  System         Category     Value    Units     FeatureReference
    ____________________________    _______________    _________    _____    ______    ________________

    "ASAM.C.SCALAR.GAIN"            "ExampleSystem"    "VALUE"      {[3]}    "gain"    "FunctionScalar"
    "ASAM.C.SCALAR.BITMASK_0001"    "ExampleSystem"    "BOOLEAN"    {[1]}    ""        "FunctionScalar"

デフォルトのクエリ動作では、短い名前が検索文字列と部分的に一致するすべてのインスタンスのテーブルが返されます。インスタンス名が完全に一致するようにフィルタリングするには、ExactMatch の名前と値のペアを使用します。

iListArrayExact = instanceList(cdfxObj, "ASAM.C.SCALAR.BITMASK_0001", "ExampleSystem", "ExactMatch", true)
iListArrayExact=1×6 table
             ShortName                  System         Category     Value    Units    FeatureReference
    ____________________________    _______________    _________    _____    _____    ________________

    "ASAM.C.SCALAR.BITMASK_0001"    "ExampleSystem"    "BOOLEAN"    {[1]}     ""      "FunctionScalar"

複数の ECU システムのキャリブレーション データを含む CDFX ファイルの場合、systemList を使用すると、各システムの内容を高レベルで表示するのに役立ちます。

sList = systemList(cdfxObj)
sList=1×3 table
       ShortName                                                 Instances                                              Metadata
    _______________    _____________________________________________________________________________________________    ________

    "ExampleSystem"    {["ASAM.C.SCALAR.GAIN"    "ASAM.C.SCALAR.BITMASK_0001"    "ASAM.C.MAP"    "ASAM.C.COM_AXIS"]}    "NO_VCD"

簡単なキャリブレーションパラメータの検査と変更

getValue を使用して、CDFX オブジェクトからインスタンスの値を抽出します。インスタンスの値を変更するには、setValue を使用します。

iValueScalar = getValue(cdfxObj, "ASAM.C.SCALAR.GAIN")
iValueScalar = 
3
iValueScalarNew = iValueScalar + 20;
setValue(cdfxObj, "ASAM.C.SCALAR.GAIN", iValueScalarNew);
iValueScalarNew = getValue(cdfxObj, "ASAM.C.SCALAR.GAIN")
iValueScalarNew = 
23

より複雑なパラメータ型を扱う

特定のインスタンスのカテゴリには、物理的な値以外のものも含まれます。これらのインスタンスは、多くの場合、軸に応じて拡大縮小される多次元配列です。これらのインスタンスで getValue を呼び出すと、PhysicalValue とは異なる個別のフィールドとして各軸を含む構造体が返されます。

CUBOID インスタンスを検査するには、まず getValue を呼び出し、返された構造体のプロパティを調べます。各軸には、軸のタイプ、物理的な値、軸の値が CDFX オブジェクトの別のインスタンスから参照されているかどうかなど、追加のデータが関連付けられていることに注意してください。

iValueMap = getValue(cdfxObj, "ASAM.C.MAP")
iValueMap = struct with fields:
    PhysicalValue: [5×5 double]
            Axis1: [1×1 struct]
            Axis2: [1×1 struct]

disp(iValueMap.PhysicalValue)
     2    15    27    40    55
     5    17    30    42    57
     7    20    32    47    60
    10    22    35    50    62
    12    25    37    52    65
disp(iValueMap.Axis1)
    ReferenceName: ""
         Category: "STD_AXIS"
    PhysicalValue: [0 63 126 189 252]
     IsReferenced: 0
disp(iValueMap.Axis2)
    ReferenceName: "ASAM.C.COM_AXIS"
         Category: "COM_AXIS"
    PhysicalValue: [-9 -8 -5 -3 0]
     IsReferenced: 1

MATLAB プロット関数を使用してインスタンス値を可視化することもできます。多次元配列の場合、軸構造体の物理値を使用してプロット上の軸を定義します。

surf("ZDataSource", "iValueMap.PhysicalValue", "XDataSource", "iValueMap.Axis1.PhysicalValue", "YDataSource", "iValueMap.Axis2.PhysicalValue")
refreshdata;

Figure contains an axes object. The axes object contains an object of type surface.

このインスタンスの物理値の変更は、スカラーの場合と同じように機能します。構造体の物理値フィールドを更新し、setValue に返します。

iValueMap.PhysicalValue(:, 1) = iValueMap.PhysicalValue(:, 1)*2;
setValue(cdfxObj, "ASAM.C.MAP", iValueMap);

これで、変更がワークスペース内の CDFX オブジェクトにコミットされたことを確認できます。

iValueMapNew = getValue(cdfxObj, "ASAM.C.MAP")
iValueMapNew = struct with fields:
    PhysicalValue: [5×5 double]
            Axis1: [1×1 struct]
            Axis2: [1×1 struct]

disp(iValueMapNew.PhysicalValue)
     4    15    27    40    55
    10    17    30    42    57
    14    20    32    47    60
    20    22    35    50    62
    24    25    37    52    65

このインスタンスの軸の値を変更するには、まず、変更する軸が参照されているかどうかを知る必要があります。これは、各軸構造の IsReferenced フィールドを調べることによって判断できます。軸が参照されていない場合は、軸構造体の PhysicalValue フィールドを変更し、最上位構造体を setValue に渡すだけです。

disp(iValueMapNew.Axis1.PhysicalValue)
     0    63   126   189   252
iValueMapNew.Axis1.PhysicalValue = iValueMapNew.Axis1.PhysicalValue*10;
setValue(cdfxObj, "ASAM.C.MAP", iValueMapNew);
iValueMapNewAxis = getValue(cdfxObj, "ASAM.C.MAP");
disp(iValueMapNewAxis.Axis1.PhysicalValue)
           0         630        1260        1890        2520

ただし、一部の軸はインスタンス自体には定義されておらず、別のインスタンスから参照されます。参照される軸の値を表すための特定のインスタンスのカテゴリがあります (COM_AXIS、RES_AXIS、および CURVE_AXIS)。参照インスタンスから参照される軸を変更しようとすると、エラーが発生します。解決策は、軸インスタンス自体の値を直接更新することです。軸が参照されている値を使用しているかどうかに関する情報 (参照されているインスタンスの短縮名を含む) は、最上位レベルの構造の軸フィールドで確認できます。

iValueCommonAxis = getValue(cdfxObj, iValueMapNewAxis.Axis2.ReferenceName)
iValueCommonAxis = 1×5

    -9    -8    -5    -3     0

iValueCommonAxis(:) = 1:5;
setValue(cdfxObj, iValueMapNewAxis.Axis2.ReferenceName, iValueCommonAxis);

元のインスタンスを変更したので、変更は参照元のインスタンスに反映されます。

iValueMapNew = getValue(cdfxObj, "ASAM.C.MAP")
iValueMapNew = struct with fields:
    PhysicalValue: [5×5 double]
            Axis1: [1×1 struct]
            Axis2: [1×1 struct]

iValueMapNew.Axis2.PhysicalValue
ans = 1×5

     1     2     3     4     5

キャリブレーションデータをファイルにエクスポートする

CDFX write 関数を使用すると、ファイルパスを指定して同じファイルまたは新しいファイルに書き戻すことができます。

write(cdfxObj, "NewExampleFile.cdfx");