7 内部ビヘイビア
ソフトウェアコンポーネントの「内部ビヘイビア」は、そのコンポーネントを実装するコードとポートとのインタラク ションの方法を定義するものです。本章では、この内部ビヘイビアを設定する方法について説明します。
実行時のソフトウェアコンポーネントとRTEとのインタラクションは、内部ビヘイビアエレメントを用いて定義され ます。ソフトウェアコンポーネントの内部ビヘイビアには以下のものが定義されます。
そのソフトウェアコンポーネントに属するランナブルエンティティ、また各ランナブルとそのソフトウェアコ ンポーネントのポートとの間にインタラクションがある場合は、そのインタラクション
実行時にランナブルエンティティを起動するイベント
ランナブルエンティティが他のランナブルエンティティと相互排他的にコードの全体または一部を実行で きるようにするための排他領域
1つの内部ビヘイビアディスクリプションは1つのソフトウェアコンポーネントにのみ適用されるので、適用され るソフトウェアコンポーネント型を参照する必要があります。この参照は<COMPONENT-REF>エレメントを使用 して定義されます。
以下に、ソフトウェアコンポーネントSwcの内部ビヘイビアディスクリプションの例を紹介します。
内部ビヘイビアの名前は<SHORT-NAME>エレメントで定義されます。この名前は、このビヘイビアを参照する 他のエレメントの中で使用されます。ASCETはソフトウェアコンポーネント名の前にプレフィックスbを付けた名 前を、自動的にそのソフトウェアコンポーネントの内部ビヘイビア名とします。
内部ビヘイビアのショート名は有効なC識別子である必要はありませんが、XMLスキーマにより実施される構 文チェックをパスするものでなくてはなりません。
以下の項では、イベントとランナブルエンティティの基本的枠組みを概説し、さらにランナブルエンティティとイン ターフェースとの間で行われる各種インタラクションを実現するためのRTEの設定方法を紹介します。
または単純に内部的なソフトウェアコンポーネント機能を実行したりできます。タイミングイベントに応え て起動されるランナブルエンティティは「タイムトリガードである("time-triggered")」と表現されます。
OPERATION-INVOKED-EVENT (オペレーション呼び出しイベント) – ランナブルエンティティを起動 し、クライアント/サーバーインターフェースを使用するPポートに対するオペレーションを実行するた めのサーバーコールを行います。
MODE-SWITCH-EVENT (モード切り替えイベント) – アプリケーションモードの入口か出口のいずれ かでランナブルエンティティを起動します。
イベントは以下の構造で定義されます。
イベントを使用すると、そのイベントの発生時にランナブルエンティティを起動させることができます。各イベント は、そのイベントの発生時に起動されるランナブルエンティティを参照します。
7.1.1 タイミングイベント
「タイミングイベント」は、ランナブルエンティティが周期的にOSにより起動されることを示すものです。RTEジェ ネレータはこの情報を使用して適切なスケジュールテーブルを生成します。このテーブルは、アプリケーション コードによって「チック」(カウントアップ)される必要があります。
タイミングイベントを作成する:
“Software Component Editor for: Swc”ウィンドウの“Event Specification”
タブを選択します。
Event → Add Event を選択し、そのイベントの名前をCyclic_10msにし ます。
Event Kind コンボボックスから“Timing”を選択します。
Period を0.01秒にします。
タイミングイベントCyclic_10msが“Event Specification”タブに次のように 定義されます。
図35: タイミングイベント“Cyclic_10ms”の定義
ASCETでは、このタイミングイベントがどのモード内で起動されるようにするかを指定することができます。アプ
リケーションモードの使用については第 8章「モード」を参照してください。
タイミングイベントがランナブルエンティティにマッピングされると( 7.2項「ランナブルエンティティ」を参照してく ださい)、ASCETはコンフィギュレーション言語で以下の<TIMING-EVENT>エレメントを生成します。
タイミングイベントの名前は<SHORT-NAME>エレメントで定義されます。この名前は、このタイミングイベントを 参照する他のエレメントの中で使用されます。タイミングイベントのショート名は有効なC識別子である必要は ありません。
<START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">では、このイベントの発生時に起動されるランナ ブルエンティティを定義します。<PERIOD>では、RTEジェネレータに使用されるタイムラスタを定義します。
7.1.2 オペレーション呼び出しイベント
「オペレーション呼び出しイベント」は、サーバーポート作成時にASCETソフトウェアコンポーネント内に自動的 に挿入されます(サーバーポートの作成方法については、6.1.1項「Pポート」を参照してください)。
図36: サーバーオペレーション“MaximumVal”および“Notification”のためのオペレーション呼び出しイベ ント
オペレーション呼び出しイベントは、<OPERATION-INVOKED-EVENT>エレメントで定義されます。各
<OPERATION-INVOKED-EVENT>エレメントには以下のものが定義されている必要があります。
このイベントを参照する際に使用する<SHORT-NAME> - ASCET上でユーザーがマニュアル操作で 編集できます。
ランナブルエンティティへの参照<START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">
オペレーションプロトタイプおよびサーバーポートへの参照<OPERATION-IREF>
オペレーションMaximumValue用のオペレーション呼び出しイベントは、コンフィギュレーション言語で以下の ように定義されます。
7.1.3 モード切り替えイベント
「モード切り替えイベント」は、アプリケーションモードの入口または出口でランナブルエンティティを起動します。
モード切り替えイベントを作成する:
“Software Component Editor for: Swc”ウィンドウの “Event Specification”
Activation: Entry
Assigned Mode: On::OnOffMode
図37: アプリケーションモード “OnOffMode”のモード “on”の入口の“ModeEvent”をモデリングする このモードイベントがランナブルエンティティにマッピングされると(7.3項「タイミングイベント」を参照してくださ い)、ASCETはコンフィギュレーション言語で以下の<MODE-SWITCH-EVENT>エレメントを生成します。
モード切り替えイベントの名前は<SHORT-NAME>エレメントで定義されます。この名前は、このモード切り替え イベントを参照する他のエレメントの中で使用されます。モード切り替えイベントのショート名は有効なC識別 子である必要はありません。
各<MODE-SWITCH-EVENT>エレメントには以下のものが定義されている必要があります。
モード宣言への参照<MODE-DEPENDENCY>
ランナブルエンティティへの参照<START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">
起動の種類を表す値<ACTIVATION>(ENTRYまたはEXIT)