Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

生成された ASAP2 ファイルのカスタマイズ

ASAP2 ファイルのフィールドをカスタマイズするには、次のいずれかの方法でコード ジェネレーターを使用します。

カスタム計算メソッド名のカスタマイズ

生成された ASAP2 ファイルでは、電子コントロール ユニット (ECU) の測定量とキャリブレーション量の内部表現が、計算メソッドによって物理モデル指向表現に変換されます。Simulink® Coder™ ソフトウェアを使用して、計算メソッドの名前をカスタマイズできます。より直感的で ASAP2 ファイルの可読性を高める名前、または社内要件を満たす名前を付けることができます。

計算メソッド名をカスタマイズするには、MATLAB® 関数 getCompuMethodName を使用します。これは、matlabroot/toolbox/rtw/targets/asap2/asap2/user/getCompuMethodName.m で定義されます。

関数 getCompuMethodName は、計算メソッド名を作成します。関数のプロトタイプは次のとおりです。

cmName = getCompuMethodName(dataTypeName, cmUnits)

ここで

  • dataTypeName は計算メソッドに関連付けられているデータ型の名前です。

  • cmUnitsSimulink.Parameter オブジェクトまたは Simulink.Signal オブジェクトの Unit プロパティで指定された単位 (rpmm/s など) です。

  • cmName は構成された計算メソッド名を返します。

この関数で返される既定の名前の形式は、次のとおりです。

<localPrefix><datatype>_<cmUnits>

ここで

  • <local_Prefix> は、ローカル接頭辞 CM_ であり、これは matlabroot/toolbox/rtw/targets/asap2/asap2/user/getCompuMethodName.m で定義されます。

  • <datatype><cmUnits> は、関数 getCompuMethodName に指定された引数です。

cmUnits の特殊文字は、ASAP2 ファイルの計算メソッド名でサポートされません。以下の表に示すように、特殊文字は変換されます。

特殊文字変換
%_percent_
-_dash_
/_per_
*_into_
°_deg_

たとえば、dataTypeName 引数 'int16'cmUnits 引数 'm/s' を使用して関数 getCompuMethodName を呼び出してから、myModel という名前のモデル用の ASAP2 ファイルを生成した場合、計算メソッド名は次のように生成ファイルに表示されます。

/begin COMPU_METHOD
   /* Name of CompuMethod */ myModel_CM_int16_m_per_s
   /* Units */ "m/s"
   ...
/end COMPU_METHOD

グループ化した特性および測定の各オブジェクトのエクスポート

R2021b 以降、ASAP2 ファイルの特性および測定の各オブジェクトは、そのプロパティに基づいてグループ化できます。既定では、生成された ASAP2 ファイルには、モデル内のサブシステムに基づく GROUPSSUB_GROUPS が含まれます。

  1. sldemo_fuelsys モデルを開きます。

    open_system("sldemo_fuelsys")

  2. モデルのコード パースペクティブを開き、[C コード][クイック スタート] をクリックして Embedded Coder クイック スタート アプリを使用します。

  3. モデルをビルドします。

  4. Generate Calibration Files ツールまたは次のコマンドを使用して ASAP2 ファイルを生成します。

    coder.asap2.export("sldemo_fuelsys")

    モデル アーキテクチャに基づいてデータ要素がグループ化されます。最上位モデルは GROUP と表現され、モデル内のサブシステムは SUB_GROUPS と表現されます。生成されたファイルには、以下の行が含まれます。

     /begin GROUP
        /* Name                   */      sldemo_fuelsys
        /* Long identifier        */      "sldemo_fuelsys"
        /* Root                   */      ROOT
        /begin SUB_GROUP
          rtB.es_o
          sldemo_fuelsys_Dashboard
          sldemo_fuelsys_Engine_Gas_Dynamics
          sldemo_fuelsys_Throttle_Command
          sldemo_fuelsys_To_Controller
          sldemo_fuelsys_To_Plant
          sldemo_fuelsys_fuel_rate_control
        /end SUB_GROUP
      /end GROUP

  5. scalar オブジェクトを ASAP2 ファイル内にある GROUP_TYPE_SCALAR という名前のグループにグループ化するには、次のコマンドを使用します。

    coder.asap2.export("sldemo_fuelsys",CustomizeGroupsBy={'SCALAR'})

また、array 型のオブジェクト、およびテーブルの次元に基づいて、ルックアップ テーブルを MAPCURVECUBOIDCUBE_4、および CUBE_5 にグループ化できます。

レコード レイアウトの生成

  1. sldemo_fuelsys モデルを開きます。

    open_system("sldemo_fuelsys")

  2. モデルを作成します。

  3. 次のコマンドを使用して ASAP2 ファイルを生成します。

    coder.asap2.export("sldemo_fuelsys",IncludeAllRecordLayouts=true)

  4. ASAP2 ファイルのバージョンに従って、RecordLayouts.a2l ファイルが生成されます。ASAP2 ファイルで、次の行を確認します。

    /include "RecordLayouts.a2l"

  5. 生成された RecordLayouts.a2l ファイルには、モデル内に存在するデータ型のレコード レイアウトが含まれます。

    メモ

    RecordLayouts.a2l ファイルは ASAP2 ファイルと同じフォルダー内にある必要があります。

  6. coder.asap2.export("sldemo_fuelsys",IncludeAllRecordLayouts=false) では個別のレコード レイアウト ファイルを生成せず、エクスポートされたデータ オブジェクトのデータ型のレコード レイアウトを ASAP2 ファイルに含めます。

    /begin  RECORD_LAYOUT Scalar_FLOAT32_IEEE
        FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT
      /end  RECORD_LAYOUT 
    
      /begin  RECORD_LAYOUT Scalar_FLOAT64_IEEE
        FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT
      /end  RECORD_LAYOUT
    ...

ヒント

ASA2P ファイルで、モデル引数として使用されるルックアップ テーブルの形状を保持するには、LookUp Table ブロックが参照モデル内にあることを確認します。Lookup table object を最上位モデルからインスタンス パラメーター値として渡します。

構造体と 64 ビット整数の除外

R2022a 以降では、生成された A2L ファイルで構造体要素と 64 ビット整数を除外できます。既定では、構造体と 64 ビット整数は A2L ファイルに含まれます。

  1. sldemo_fuelsys モデルを開きます。

    open_system("sldemo_fuelsys")

  2. モデルを作成します。

  3. 次のコマンドを使用して ASAP2 ファイルを生成します。

    coder.asap2.export("sldemo_fuelsys", SupportStructureElements=false, ...
    Support64bitIntegers=false)

    生成された ASAP2 ファイルには 64 ビット整数と構造体要素が含まれていません。

メモ

R2022a 以降では、ASAP2 ファイルでポインター変数は生成されません。

既定のイベント リストを含む ASAP2 の生成

R2022a 以降では、マルチレート モデルについて、ASAP2 ファイルに、DEFAULT_EVENT_LIST をもつ IF_DATA セクションが含まれ、キャリブレーション ツールでデータ要素の各ラスター値を表示できます。

  1. sldemo_fuelsys モデルを開きます。

    open_system("sldemo_fuelsys")

  2. モデルを作成します。

  3. Generate Calibration Files ツールまたは次のコマンドを使用して ASAP2 ファイルを生成します。

    coder.asap2.export("sldemo_fuelsys")

  4. このモデルの単一レートは、0.01 です。生成されたファイルでは測定値が次のように定義されます。

       /begin MEASUREMENT
        /* Name                   */      rtB.es_o.throttle
        /* Long identifier        */      ""
        /* Data type              */      FLOAT32_IEEE
        /* Conversion method      */      sldemo_fuelsys_CM_single
        /* Resolution (Not used)  */      0      
        /* Accuracy (Not used)    */      0      
        /* Lower limit            */      -3.4E+38
        /* Upper limit            */      3.4E+38
        ECU_ADDRESS                       0x0000 /* @ECU_Address@rtB.es_o.throttle@ */
      /end MEASUREMENT

  5. 次のコマンドを使用してモデルをマルチレート モデルに変換します。

    blockName = ['sldemo_fuelsys' '/EGO Fault Switch'];
    set_param(blockName, 'SampleTime', '0.02');

  6. モデルを作成します。

  7. 次のコマンドを使用して ASAP2 ファイルを生成します。

    coder.asap2.export("sldemo_fuelsys")

  8. 生成されたファイルでは測定値が次のように定義されます。

       /begin MEASUREMENT 
        /* Name                   */      rtB.es_o.throttle
        /* Long identifier        */      ""
        /* Data type              */      FLOAT32_IEEE
        /* Conversion method      */      sldemo_fuelsys_CM_single
        /* Resolution (Not used)  */      0      
        /* Accuracy (Not used)    */      0      
        /* Lower limit            */      -3.4E+38
        /* Upper limit            */      3.4E+38
        ECU_ADDRESS                       0x0000 /* @ECU_Address@rtB.es_o.throttle@ */
        /begin IF_DATA XCP
          /begin DAQ_EVENT VARIABLE
              /begin DEFAULT_EVENT_LIST
                EVENT  0x0001
              /end DEFAULT_EVENT_LIST
          /end DAQ_EVENT
         /end IF_DATA
      /end MEASUREMENT 

  9. DEFAULT_EVENT_LIST を含めずに ASAP2 ファイルを生成するには、次のコマンドを使用します。

    coder.asap2.export("sldemo_fuelsys",IncludeDefaultEventList=false);

ECU アドレス拡張の指定

R2022a 以降では、EcuAddressExtension プロパティの整数値を指定して、ASAP2 ファイルで追加のアドレス情報を指定できます。既定では、追加のアドレス情報は提供されません。

  1. sldemo_fuelsys モデルを開きます。

    open_system("sldemo_fuelsys")

  2. モデルを作成します。

  3. 次のコマンドを使用して ASAP2 ファイルを生成します。

    coder.asap2.export("sldemo_fuelsys",EcuAddressExtension=4)

    特性、測定、および軸ポイントの ECU_ADDRESS_EXTENSION キー ワードが ASAP2 ファイルに含まれ、追加のアドレス情報を指定できます。

     /begin MEASUREMENT 
       /* Name                   */      rtB.MinMax
       /* Long identifier        */      ""
       /* Data type              */      FLOAT64_IEEE
       /* Conversion method      */      sldemo_fuelsys_CM_double
       /* Resolution (Not used)  */      0      
       /* Accuracy (Not used)    */      0      
       /* Lower limit            */      -1.7E+308
       /* Upper limit            */      1.7E+308
       ECU_ADDRESS                       0x0000 /* @ECU_Address@rtB.MinMax@ */
       ECU_ADDRESS_EXTENSION 4
     /end MEASUREMENT 

ASAP2 ファイルのマージ

R2023a 以降では、複数の A2L ファイルのデータ要素を Simulink モデルにマージできます。関数 coder.asap2.merge を使用して、マージされた記述子オブジェクトを作成し、モデルおよびマージされた A2L ファイルのデータ要素を含む A2L ファイルを生成します。

関数 coder.asap2.merge を使用して A2L ファイルをマージするには、Vehicle Network Toolbox™ が必要です。

  1. sldemo_fuelsys モデルを開きます。

    open_system("sldemo_fuelsys")

  2. モデルを作成します。

  3. 次のコマンドを使用して、A2L ファイルのデータ要素をモデルにマージします。

    mergeObj = coder.asap2.merge("sldemo_fuelsys",{"ASAP2File1.a2l"})

    複数の A2L ファイルをマージするには、コンマ区切り形式でファイルを指定します。以下に例を示します。

    mergeObj = coder.asap2.merge("sldemo_fuelsys",{"ASAP2File1.a2l","ASAP2File2.a2l"})

  4. mergeObj を使用して、A2L ファイルを生成します。

    coder.asap2.export("sldemo_fuelsys",CustomEcuDescriptions=mergeObj)

生成された A2L ファイルには、sldemo_fuelsys モデルおよび A2L ファイル ASAP2File1 に存在するデータ要素が含まれます。

メモ

ルックアップ テーブル オブジェクトはマージされません。

参考

|

関連するトピック