Main Content

AUTOSAR ランナブル実装のバリアントの設定

AUTOSAR ランナブルの実装を変更するには、AUTOSAR ソフトウェア コンポーネントでランナブル内にバリアント条件ロジックを指定できます。Simulink® では、ランナブル内でバリアント条件ロジックをモデル化するには次を行います。

  • サブシステムまたはモデルのバリアント実装を表し、バリアント条件ロジックを定義するにはVariant Subsystem, Variant Model, Variant Assembly Subsystemブロックを使用します。

  • AUTOSAR システム定数をモデル化するには、ストレージ クラスが SystemConstantAUTOSAR.Parameterデータ オブジェクトを使用します。システム定数は、アクティブなサブシステムまたはモデル実装を決定する条件値を表します。

たとえば、サブシステムの 2 つのバリアント実装をモデル化する Variant Subsystem ブロックを含む AUTOSAR コンポーネント モデルを示します。このモデルを開くには、MATLAB® コマンド ラインで次のコードを実行します。

open_system("mAutosarVariantSubsystem")

バリアントの選択はサブシステム VAR1 および VAR2 です。接続はシミュレーションの最中にアクティブなバリアントに基づいて決められるため、ブロックは接続されていません。

autosar_var_subsys_contents.png

AUTOSAR システム定数をモデル化するために、このモデルは AUTOSAR.Parameter データ オブジェクト rainSensor を定義します。

rainSensor = AUTOSAR.Parameter;
rainSensor.CoderInfo.StorageClass = 'Custom';
rainSensor.CoderInfo.CustomStorageClass = 'SystemConstant';
rainSensor.DataType = 'uint8';
rainSensor.Value = 2;

Variant Subsystem ブロック ダイアログ ボックスで、システム定数値を基にしたバリアント条件ロジックを定義します。式または式が含まれるSimulink.VariantExpressionオブジェクトを指定できます。

モデルのコードを生成すると、次のようになります。

  • ARXML コードの中で、バリアントの選択肢は省略名が c0 および c1 の VARIATION-POINT-PROXY エントリとして記述されます。rainSensor は関連付けられた条件値を表すシステム定数として記述されます。次に例を示します。

<VARIATION-POINT-PROXYS>
    <VARIATION-POINT-PROXY UUID="...">
        <SHORT-NAME>c0</SHORT-NAME>
        <CATEGORY>CONDITION</CATEGORY>
        <CONDITION-ACCESS BINDING-TIME="PRE-COMPILE-TIME">
          <SYSC-REF DEST="SW-SYSTEMCONST">/vss_pkg/vss_dt/SystemConstants/rainSensor</SYSC-REF>
          == 1</CONDITION-ACCESS>
    </VARIATION-POINT-PROXY>
    <VARIATION-POINT-PROXY UUID="...">
        <SHORT-NAME>c1</SHORT-NAME>
        <CATEGORY>CONDITION</CATEGORY>
        <CONDITION-ACCESS BINDING-TIME="PRE-COMPILE-TIME">
          <SYSC-REF DEST="SW-SYSTEMCONST">/vss_pkg/vss_dt/SystemConstants/rainSensor</SYSC-REF>
          == 2</CONDITION-ACCESS>
    </VARIATION-POINT-PROXY>
</VARIATION-POINT-PROXYS>
  • RTE 互換の C コードの中で、省略名 c0 および c1 は、バリアント条件のロジック内で使用されるプリプロセッサ シンボルの名前にエンコードされます。次に例を示します。

#if Rte_SysCon_c0
...
#elif Rte_SysCon_c1
...
#endif

参考

|

関連する例

詳細