メインコンテンツ

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

AUTOSAR 計算方法の作成、インポート、設定

AUTOSAR ソフトウェア コンポーネントは計算方法 (COMPU-METHOD) を使用して AUTOSAR データの内部値と物理表現の間の変換を行います。

Embedded Coder® は、ARXML コード内に記述されている AUTOSAR COMPU-METHOD をインポートし、AUTOSAR オーサリング ツール (AAT) と Simulink® の間のラウンドトリップ全体で保持します。Simulink 内で、インポートした計算方法を変更したり、新しい計算方法を作成して設定したりできます。

このトピックでは、Simulink で AUTOSAR 計算方法を設定する例を示します。

AUTOSAR 計算方法の作成

モデル内で AUTOSAR 計算方法をグラフィカルに、またはプログラムによって作成できます。グラフィカル インターフェイスを使用して AUTOSAR 計算方法を作成するには、AUTOSAR ディクショナリを開き、[CompuMethods] ビューを選択します。[CompuMethod の追加] ダイアログ ボックスを開くには、[追加] ボタン をクリックします。名前、カテゴリ、単位、キャリブレーションの表示形式、生成する AUTOSAR パッケージ、関連付けられた Simulink データ型など、計算方法の初期プロパティを設定します。[OK] をクリックすると、AUTOSAR ディクショナリの CompuMethod のビューが新しい計算方法で更新されます。

メモ

COMPU-METHOD カテゴリ BITFIELD_TEXTTABLE および SCALE_LINEAR_AND_TEXTTABLE は AUTOSAR ディクショナリからは作成できません。

コードを生成する場合、エクスポートされた ARXML コードには COMPU-METHOD の定義が含まれ、それを参照します。

AUTOSAR 計算方法のインポート

AUTOSAR COMPU-METHOD カテゴリ IDENTICALLINEARTEXTTABLEBITFIELD_TEXTTABLESCALE_LINEAR_AND_TEXTTABLE は ARXML からインポートできます。ARXML ファイルをインポートするには、arxml.importer オブジェクトを使用し、その内容から createComponentAsModel 関数を使用してモデルを作成します。

ar = arxml.importer("Gears_States.arxml")
ar =

The file "C:\work\Gears_States.arxml" contains:
  1 Application-Software-Component-Type:
    '/SwComponentTypes/SWC'
createComponentAsModel(ar,"/SwComponentTypes/SWC");

インポートした計算方法は、AUTOSAR ディクショナリからアクセスして編集できます。

CompuMethod tab is expanded in the AUTOSAR Dictionary, with the States computation method selected.

コンポーネントの送信側/受信側通信では、カテゴリ BITFIELD_TEXTTABLE の計算方法 States が使用されます。この計算方法の要素 (ShortLabelMaskLiteralValues、および LiteralText) は、ARXML において COMPU-SCALES で定義されています。

    <AR-PACKAGE>
      <SHORT-NAME>Pkg_CompuMethods</SHORT-NAME>
      <ELEMENTS>
        <COMPU-METHOD UUID="...">
          <SHORT-NAME>States</SHORT-NAME>
          <CATEGORY>BITFIELD_TEXTTABLE</CATEGORY>
          <COMPU-INTERNAL-TO-PHYS>
            <COMPU-SCALES>
              <COMPU-SCALE>
                <SHORT-LABEL>Problem</SHORT-LABEL>
                <SYMBOL>ProblemNone</SYMBOL>
                <MASK>255</MASK>
                <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b0000000000000000</LOWER-LIMIT>
                <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b0000000000000000</UPPER-LIMIT>
              </COMPU-SCALE>
              <COMPU-SCALE>
                <SHORT-LABEL>Problem</SHORT-LABEL>
                <SYMBOL>ProblemFailure</SYMBOL>
                <MASK>255</MASK>
                <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b0000000000001000</LOWER-LIMIT>
                <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b0000000000001000</UPPER-LIMIT>
              </COMPU-SCALE>
              <COMPU-SCALE>
                <SHORT-LABEL>Problem</SHORT-LABEL>
                <SYMBOL>ProblemMajor</SYMBOL>
                <MASK>255</MASK>
                <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b0000000000011000</LOWER-LIMIT>
                <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b0000000000011000</UPPER-LIMIT>
              </COMPU-SCALE>
              <COMPU-SCALE>
                <SHORT-LABEL>Problem</SHORT-LABEL>
                <SYMBOL>ProblemAll</SYMBOL>
                <MASK>255</MASK>
                <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0b0000000000111000</LOWER-LIMIT>
                <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0b0000000000111000</UPPER-LIMIT>
              </COMPU-SCALE>
            </COMPU-SCALES>
          </COMPU-INTERNAL-TO-PHYS>
        </COMPU-METHOD>
createEnumeration 関数を使用して、これらの要素を表す列挙を作成します。

arProps = autosar.api.getAUTOSARProperties(modelName);
createEnumeration(arProps,'/Pkg_CompuMethods/States');

これにより、実行時に Simulink で列挙型を再作成する States_defineIntEnumTypes.m が作成されます。これによって BitFieldTextTable COMPU-METHOD のプロパティが取得され、それらのプロパティを Bitwise Operator ブロックまたは Relational Operator ブロックのソフトウェア コンポーネントで使用できるようになります。

AUTOSAR 計算方法のプロパティの設定

モデル内で AUTOSAR 計算方法のプロパティをグラフィカルに、またはプログラムによって設定できます。変更できる計算方法のプロパティには、名前、カテゴリ、単位、表示形式、AUTOSAR パッケージ、Simulink データ型があります。

グラフィカル インターフェイスを使用して計算方法を設定するには、AUTOSAR ディクショナリを開き、[CompuMethods] ビューを選択します。このビューには、ARXML コードからインポートされたものか、あるいは Simulink で作成されたものかに関係なく、モデルの変更可能な計算方法が表示されます。

計算方法を選択し、使用可能なフィールドを編集します。

  • Name — 名前テキストを指定

  • Category[Identical][Linear][TextTable] を選択

  • Unit — モデルで使用可能なユニットから選択

  • DisplayFormat — 必要に応じて、データを表示するためにキャリブレーション ツールおよび測定ツールによって使用される形式を指定します。ANSI® C printf 書式指定子文字列を使用します。たとえば、%2.1d は最小幅が 2 文字、最高精度が 1 桁の符号付き 10 進数を指定します。表示される値は 12.2 などになります。書式指定子文字列の構成の詳細については、DisplayFormat の設定を参照してください。

  • パッケージ — 計算方法用に生成される AUTOSAR パッケージのパスを指定

  • Simulink DataTypes — 計算方法を参照する Simulink データ型のリストを指定

計算方法の AUTOSAR パッケージを変更するには、次のいずれかを実行します。

  • [パッケージ] パラメーター フィールドにパッケージへのパスを入力します。

  • AUTOSAR パッケージ ブラウザーを開くには、[パッケージ] フィールドの右側にあるボタンをクリックします。ブラウザーを使用して既存のパッケージに移動するか、パッケージを作成および選択します。ブラウザーでパッケージを選択し、[適用] をクリックすると、計算方法の [パッケージ] パラメーター値が選択内容によって更新されます。AUTOSAR パッケージ ブラウザーの詳細については、コンポーネント、インターフェイス、CompuMethod、または SwAddrMethod の AUTOSAR パッケージの構成を参照してください。

計算方法をモデルで使用される Simulink データ型と関連付けるには、計算方法を選択し、[Simulink DataTypes] の右側にある [追加] ボタンをクリックします。このアクションによってダイアログ ボックスが開き、使用可能なデータ型のリストが表示されます。値のリストから Simulink.NumericTypeSimulink.AliasTypeSimulink.ValueType を選択するか、あるいは Simulink 列挙型の名前を入力します。モデルにデータ ディクショナリがリンクされている場合は、データ ディクショナリのアーキテクチャ データ セクションで定義されたアーキテクチャ データ型も選択できます。型を [Simulink DataTypes] リストに追加するには、[OK] をクリックします。

[Simulink DataTypes] のプロパティをプログラムによって設定するには、モデルを開き、次のように AUTOSAR プロパティの set 関数呼び出しを使用します。

arProps = autosar.api.getAUTOSARProperties("cmSpeed");
set(arProps,"/pkg/CompuMethods/RpmCm","SlDataTypes",{"SpeedRpmAdt"});
slTypes = get(arProps,"/pkg/CompuMethods/RpmCm","SlDataTypes")
slTypes = 
    'SpeedRpmAdt'

線形関数に対する CompuMethod の方向の設定

Simulink で作成された設計については、値の内部表現と物理表現の間の CompuMethod 変換の方向などの、エクスポートされる計算方法 (CompuMethod) のプロパティを制御できます。AUTOSAR ディクショナリまたは AUTOSAR プロパティの set 関数を使用して、CompuMethod の方向として次のいずれかの値を指定できます。

  • InternalToPhys (既定値) — 内部値から物理表現へ変換するために CompuMethod セクションを生成します。

  • PhysToInternal — 物理値から内部表現へ変換するために CompuMethod セクションを生成します。

  • Bidirectional — 内部から物理へ、物理から内部への双方向に変換するために CompuMethod セクションを生成します。

CompuMethod の方向を MATLAB® コマンド ウィンドウで指定するには、次のように AUTOSAR プロパティの set 関数呼び出しを使用します。

hModel = "autosar_swc_expfcns_compumethod";
open_system(hModel);
arProps=autosar.api.getAUTOSARProperties(hModel);
set(arProps,"XmlOptions",CompuMethodDirection="Bidirectional");
get(arProps,"XmlOptions","CompuMethodDirection")
ans = 
'Bidirectional'

CompuMethod の方向を AUTOSAR ディクショナリで指定するには、[XML オプション] を選択します。パラメーター [CompuMethod の方向] の値を選択します。[適用] をクリックします。

このモデルでは、リンクされたデータ ディクショナリ CompuMethodDataTypes でエイリアス データ型が定義され、それが最初のランナブル サブシステムの入力端子に割り当てられています。このデータ型が CompuMethod COMPU_EngSpdValue で使用され、例の実行後は CompuMethod の方向が双方向になります。データ ディクショナリのアーキテクチャ データ セクションでデータ型を定義して格納することに加え、ベース ワークスペースで Simulink データ型を定義し、それらを作成時に CompuMethod に割り当てることもできます。

autosar_swc_expfcns_compumethod モデルのコードを生成するときに、エクスポートされる ARXML コード内の CompuMethod に要求した方向のセクションが含まれます。

<COMPU-METHOD UUID="...">
    <SHORT-NAME>COMPU_EngSpdValue</SHORT-NAME>
    <CATEGORY>LINEAR</CATEGORY>
    <UNIT-REF DEST="UNIT">/DataTypes/Units/NoUnit</UNIT-REF>
    <COMPU-INTERNAL-TO-PHYS>
        <COMPU-SCALES>
            <COMPU-SCALE>
                <COMPU-RATIONAL-COEFFS>
                    <COMPU-NUMERATOR>
                        <V>0</V>
                        <V>1</V>
                    </COMPU-NUMERATOR>
                    <COMPU-DENOMINATOR>
                        <V>1</V>
                    </COMPU-DENOMINATOR>
                </COMPU-RATIONAL-COEFFS>
            </COMPU-SCALE>
        </COMPU-SCALES>
    </COMPU-INTERNAL-TO-PHYS>
    <COMPU-PHYS-TO-INTERNAL>
        <COMPU-SCALES>
            <COMPU-SCALE>
                <COMPU-RATIONAL-COEFFS>
                    <COMPU-NUMERATOR>
                        <V>0</V>
                        <V>1</V>
                    </COMPU-NUMERATOR>
                    <COMPU-DENOMINATOR>
                        <V>1</V>
                    </COMPU-DENOMINATOR>
                </COMPU-RATIONAL-COEFFS>
            </COMPU-SCALE>
        </COMPU-SCALES>
    </COMPU-PHYS-TO-INTERNAL>
</COMPU-METHOD>

エクスポートされた ARXML ファイルで、カテゴリ TEXTTABLE の CompuMethod には CompuMethodDirection InternalToPhys のみが使用されます。カテゴリ TEXTTABLE の CompuMethod は boolean または列挙データ型に対して生成されます。

計算方法の単位参照のエクスポート

ARXML インポーターでは、インポートされる計算方法で検出された単位および物理的次元の情報が保持されます。計算方法の単位および物理的次元の情報は、AUTOSAR オーサリング ツール (AAT) と Simulink の間のラウンドトリップ全体で保持されます。

Simulink で作成された設計については、エクスポーターは計算方法ごとに単位参照を生成します。便宜上、各計算方法は NoUnit という名前の単位を参照します。たとえば、Boolean データ型の計算方法とそれが参照する単位は次のようになります。

<COMPU-METHOD UUID="...">
    <SHORT-NAME>COMPU_Boolean</SHORT-NAME>
    <CATEGORY>TEXTTABLE</CATEGORY>
    <UNIT-REF DEST="UNIT">/mymodel_pkg/mymodel_dt/NoUnit</UNIT-REF>
    ...
</COMPU-METHOD>
<UNIT UUID="...">
    <SHORT-NAME>NoUnit</SHORT-NAME>
    <FACTOR-SI-TO-UNIT>1</FACTOR-SI-TO-UNIT>
    <OFFSET-SI-TO-UNIT>0</OFFSET-SI-TO-UNIT>
</UNIT>

エクスポートされる計算方法ごとに単位を指定すると、エクスポートされた AUTOSAR データを使用するキャリブレーション ツールおよび測定ツールをサポートするのに役立ちます。

ScaleLinearAndTextTable COMPU-METHOD の線形スケーリングの変更

Linear および TextTable スケーリングを使用する AUTOSAR COMPU-METHOD をインポートおよびエクスポートできます。COMPU-METHOD カテゴリ SCALE_LINEAR_AND_TEXTTABLE を参照するアプリケーション データ型をインポートすると、Simulink.NumericType データ オブジェクトまたは Simulink.AliasType データ オブジェクトが Simulink ワークスペースに作成されます。Simulink では、計算方法の Linear スケーリングを変更できます。TextTable スケーリングは読み取り専用です。

たとえば、1 つの LINEAR スケールと 2 つの TextTable スケールを使用する計算方法は次のようになります。

COMPU-METHOD をモデルにインポートすると、インポーターは LINEAR スケーリングを使用する Simulink.NumericType を作成します。LINEAR スケーリングを変更するには、Simulink.NumericType データ オブジェクトを開き、そのフィールドを変更します。

TextTable スケーリング情報へのアクセスが読み取り専用の場合は、次のような AUTOSAR プロパティの get 関数呼び出しを使用します。

arProps = autosar.api.getAUTOSARProperties('mySWC');
get(arProps,'/simple_ar_package/simple_ar_dt/COMPU_myType','CellOfEnums')
ans =
    'SensorError'    'SignalNotAvailable'
get(arProps,'/simple_ar_package/simple_ar_dt/COMPU_myType','IntValues')
ans =
   350   351

二重スケール パラメーターに対する有理関数の計算方法の設定

同一の物理値の 2 つのスケール値を保存する AUTOSAR 二重スケール パラメーターについては、COMPU-METHOD カテゴリ RAT_FUNC が生成されます。この計算方法は、1 次有理関数にすることができます。

二重スケール パラメーターを設定して生成するには、次の手順に従います。

  1. AUTOSAR モデルを開きます。この例の目的上、AUTOSAR 二重スケール パラメーターを参照する Constant ブロックを作成します。モデル内で、Constant ブロックを Simulink 出力端子に接続します。

  2. モデル データ エディター ([モデル化] タブで [モデル データ エディター] をクリック) を開き、[パラメーター] タブを選択します。Constant ブロックのパラメーター エントリを見つけます。[値] 列を使用して二重スケール パラメーターの名前を参照します。この例ではパラメーター名 T1Rec を使用します。

  3. T1Rec データ オブジェクトを作成します。モデル データ エディターで、値 T1Rec の右でアクション ボタン をクリックし、[作成] を選択します。

    [新規データの作成] ダイアログ ボックスで、[値]AUTOSAR.DualScaledParameter に設定して [作成] をクリックします。ベース ワークスペースに AUTOSAR.DualScaledParameter データ オブジェクトが表示されます。二重スケール パラメーターのプロパティ ダイアログ ボックスが開きます。

  4. 二重スケール パラメーター T1Rec の属性を設定します。以下の MATLAB® コードを実行します。このコードは内部キャリブレーション時間値から物理周波数 (時間の逆数) 値への変換を設定します。

    % Conversion from Time to Frequency
    % F = 1/T
    % In Other Words F = (0*T + 1)/(1*T+0);
    T1Rec.CompuMethodName = 'CM3';  %Specify AUTOSAR CompuMethod name
    T1Rec.DataType ='fixdt(1,32,0.01,0)';
    T1Rec.CalToMainCompuNumerator=1;
    T1Rec.CalToMainCompuDenominator=[1 0];
    T1Rec.CalibrationMin = 0.001;
    T1Rec.CalibrationMax = 1.0;
    T1Rec.CalibrationValue = 0.1500;
    T1Rec.CoderInfo.StorageClass = 'Custom';
    T1Rec.CoderInfo.Identifier = '';
    T1Rec.CoderInfo.CustomStorageClass = 'InternalCalPrm';
    T1Rec.CoderInfo.CustomAttributes.PerInstanceBehavior =...
      'Parameter shared by all instances of the Software Component';
    T1Rec.Description = '';
    % T1Rec.Min = [];
    % T1Rec.Max = [];
    T1Rec.Unit = '';
    T1Rec.CalibrationDocUnits = 'm/s²';
  5. 二重スケール パラメーター T1Rec のプロパティ ダイアログ ボックスを検証します。MATLAB コードによって設定されたメイン属性を次に示します。

  6. MATLAB コードによって設定されたキャリブレーション属性を次に示します。

  7. AUTOSAR プロパティで計算方法の方向がまだ双方向に設定されていない場合は、AUTOSAR ディクショナリの [XML オプション] ビューを使用して設定します。

  8. モデルからコードを生成します。

モデルからコードを生成するときに、ARXML エクスポーターによってカテゴリが RAT_FUNCCOMPU-METHOD が生成されます。

<COMPU-METHOD UUID="...">
    <SHORT-NAME>CM3</SHORT-NAME>
    <CATEGORY>RAT_FUNC</CATEGORY>
    <UNIT-REF DEST="UNIT">/mymodel_pkg/mymodel_dt/m_s_</UNIT-REF>
    <COMPU-INTERNAL-TO-PHYS>
        <COMPU-SCALES>
            <COMPU-SCALE>
                <COMPU-RATIONAL-COEFFS>
                    <COMPU-NUMERATOR>
                        <V>-100</V>
                    </COMPU-NUMERATOR>
                    <COMPU-DENOMINATOR>
                        <V>0</V>
                        <V>-1</V>
                    </COMPU-DENOMINATOR>
                </COMPU-RATIONAL-COEFFS>
            </COMPU-SCALE>
        </COMPU-SCALES>
    </COMPU-INTERNAL-TO-PHYS>
    <COMPU-PHYS-TO-INTERNAL>
        <COMPU-SCALES>
            <COMPU-SCALE>
                <COMPU-RATIONAL-COEFFS>
                    <COMPU-NUMERATOR>
                        <V>100</V>
                    </COMPU-NUMERATOR>
                    <COMPU-DENOMINATOR>
                        <V>0</V>
                        <V>1</V>
                    </COMPU-DENOMINATOR>
                </COMPU-RATIONAL-COEFFS>
            </COMPU-SCALE>
        </COMPU-SCALES>
    </COMPU-PHYS-TO-INTERNAL>
</COMPU-METHOD>

COMPU-METHOD は、T1Rec に対して生成されたアプリケーション データ型から参照されます。

<APPLICATION-PRIMITIVE-DATA-TYPE UUID="...">
  <SHORT-NAME>T1Rec_DualScaled</SHORT-NAME>
  <CATEGORY>VALUE</CATEGORY>
  <SW-DATA-DEF-PROPS>
    <SW-DATA-DEF-PROPS-VARIANTS>
      <SW-DATA-DEF-PROPS-CONDITIONAL>
        <SW-CALIBRATION-ACCESS>READ-WRITE</SW-CALIBRATION-ACCESS>
        <COMPU-METHOD-REF DEST="COMPU-METHOD">/mymodel_pkg/mymodel_dt/CM3</COMPU-METHOD-REF>
        <DATA-CONSTR-REF DEST="DATA-CONSTR">/mymodel_pkg/mymodel_dt/ApplDataTypes/
                                 DataConstrs/DC_T1Rec_DualScaled</DATA-CONSTR-REF>
      </SW-DATA-DEF-PROPS-CONDITIONAL>
    </SW-DATA-DEF-PROPS-VARIANTS>
  </SW-DATA-DEF-PROPS>
</APPLICATION-PRIMITIVE-DATA-TYPE>

アプリケーション データ型 T1Rec_DualScaled は、T1Rec に対して生成されたパラメーター データ プロトタイプから参照されます。

<PARAMETER-DATA-PROTOTYPE UUID="...">
  <SHORT-NAME>T1Rec</SHORT-NAME>
  <SW-DATA-DEF-PROPS>
    <SW-DATA-DEF-PROPS-VARIANTS>
      <SW-DATA-DEF-PROPS-CONDITIONAL>
        <SW-CALIBRATION-ACCESS>READ-WRITE</SW-CALIBRATION-ACCESS>
        <SW-IMPL-POLICY>STANDARD</SW-IMPL-POLICY>
      </SW-DATA-DEF-PROPS-CONDITIONAL>
    </SW-DATA-DEF-PROPS-VARIANTS>
  </SW-DATA-DEF-PROPS>
  <TYPE-TREF DEST="APPLICATION-PRIMITIVE-DATA-TYPE">/mymodel_pkg/mymodel_dt/ApplDataTypes/
                                                              T1Rec_DualScaled</TYPE-TREF>
  ...
</PARAMETER-DATA-PROTOTYPE>

参考

トピック