あるソフトウェアコンポーネントを、所定のモード切り替えによって起動されるようにすることができます。本項で は、ソフトウェアコンポーネント内でのモードの使用法について説明します。
ソフトウェアコンポーネント内にモードグループインターフェースを挿入する:
3.1.2項「AUTOSAR用のコード生成に関する設定」の手順に従い、プロジェク
トを作成してそこにソフトウェアコンポーネントSwcを挿入します。
プロジェクト内のソフトウェアコンポーネントSwcを開きます。
“Software Component Editor for: Swc”ウィンドウから Insert → Compo-nent を選択します。
“Select item…”ダイアログボックスが開きます。
ツリーペインをナビゲートしてインターフェースModeInterfaceを選択し、
OKをクリックします。
“Properties for complex element: ModeInterface”ダイアログボックスが開 きます。
OK をクリックします。
8.3.1 ソフトウェアコンポーネントの初期化と終了
AUTOSARのモードを使用すると、RTE起動時に内部データ構造の初期化などを行う処理を実行することでき
ます。同様に、システム終了時にはデータを保存したりオペレーション結果をログに記録したりするような処理 を実行することも可能です。
各モード宣言グループには「初期モード」を定義し、システム開始時に、<MODE-SWITCH-EVENT>で初期化モ ードの入り口として定義されたランナブルが起動されるようにします。
モード切り替えイベントを作成する:
“Software Component Editor for: Swc”ウィンドウの“Event Specification”
タブを選択します。
Event → Add Eventを選択し、そのイベントの名前をModeEventにしま す。
Event KindコンボボックスからModeSwitchを選択します。
モード切り替えについて以下のように設定します。
Activation: Entry
図53: アプリケーションモード “OnOffMode”のモード “on”の入口に“ModeEvent”をモデリングする
初期モード入口用の<MODE-SWITCH-EVENT>を宣言することにより、ソフトウェアコンポーネント内のランナ ブルエンティティがRTE開始時に起動されるようにすることができます。
8.3.2 モード切り替え時にランナブルエンティティをトリガする
設定されているモード切り替えイベントを、他のすべてのイベントと同様にソフトウェアコンポーネントの
<INTERNAL-BEHAVIOR>エレメント内で使用して、ランナブルエンティティをモードの入口か出口のどちらか に起動されるようにすることができます。
ランナブルエンティティを作成する:
“Software Component Editor for: Swc”ウィンドウのツリーペイン内からダイ アグラムMainを選択します。
Insert → Runnableを選択し、そのランナブルの名前を RunnableEntityにします。
ランナブルエンティティの詳細については、7.2項「ランナブルエンティティ」を参照してください。
RunnableEntityを入口用に定義する場合、このランナブルエンティティはカテゴリ1である必要がありま
す。つまり、RTEのブロッキング呼び出しを行ったり、他のアプリケーションコンポーネントにアクセスしたりする ことはできません。
同様に、出口用に定義されたシステムの場合、ソフトウェアコンポーネントには、データを格納して終了(ターミ ネーション)をログに記録するなどの処理が必要になります。「終了」は、「シャットダウン」に関連付けられた新 しいモードへのトランジションである、という見方をすれば、基本原理は初期化の場合と同じです。
ランナブルにモード切り替えイベントを割り当てる:
“Software Component Editor for: Swc”ウィンドウの“Event Specification” タブで、“Events”フィールドからModeEventを選択します。
“Runnables”フィールドからランナブルRunnableEntityを選択します。
Event → Assign Event を選択します。
図54: “RunnableEntity”に“ModeEvent” を割り当てる
モードイベントがランナブルエンティティにマッピングされると、ASCETはコンフィギュレーション言語で以下の
<MODE-SWITCH-EVENT>エレメントを生成します。
<MODE-SWITCH-EVENT>エレメントには以下の3つの情報が定義されます。
1. <START-ON-EVENT-REF>エレメントで、起動すべきランナブルエンティティが定義されます。これは 同じソフトウェアコンポーネント型内のランナブルエンティティへの参照です。
2. <ACTIVATION>エレメントでは、ランナブルエンティティがモードの入口と出口のどちらでトリガされる かが定義されます。ASCETはENTRYまたはEXITというテキストをサポートしています。モード切り替 えイベントはモードの入口か出口のどちらにも適用できますが、1つのモード切り替えイベントを入口と 出口の両方に適用することはできません。ランナブルの起動が入口と出口の両方に必要な場合は、モ ード切り替えイベントを2つ定義する必要があります。
3. <MODE-IREF>エレメントで、モード切り替えイベントに関連付けられるモードが定義されます。
<MODE-IREF>には3つの参照(ポートプロトタイプ、モード宣言グループプロトタイプ、そのモード宣言 グループプロトタイプを型分けするモード宣言グループ)が含まれている必要があります。
<MODE-DECLARATION-GROUP>エレメント内の1つのモードが、そのグループの初期モードとしてマークさ れます。Rte_StartによりRTEが起動されると、グループ内で初期モードの入口に関連付けられているす
注記
同じモードの入口(または出口)で2つ以上のランナブルエンティティがトリガされる場合、各ランナブルエン ティティの実行順序は指定できません。移植性を持たせるためには、システムがそれらの実行順序に影響さ れないようにしてください。
8.3.3 モードの無効化
<MODE-DEPENDENCY>により、イベントのビヘイビアをモードごとに変えることができます。これにより、アクテ ィブモードに応じてランナブルエンティティの起動を抑止することができます。
ランナブルの起動を無効にする:
“Software Component Editor for: Swc”ウィンドウの“Event Specification”
タブで、“Events”フィールドからイベントModeEventを選択します。
モードoffを無効にします。
図55: “ModeEvent”のモード “off” を無効にする
以下の<MODE-DEPENDENCY>エレメントに、この無効化されたモードが指定されています。
<MODE-DEPENDENCY>エレメント内に指定されているモードがアクティブになっても、RTEはランナブルを起動 しません。つまり起動要求は破棄されます。
モードインスタンスの詳しい実装方法については、『RTA-RTE User Guide』を参照してください。
9 ソフトウェアコンポーネントの実装
本章では、ASCETでソフトウェアコンポーネントをモデリングして、RTEが必要とするオブジェクトを宣言する方 法、およびRTEジェネレータにより生成されるRTE APIの使用法について説明します。