RTコンポーネントの実装

RTコンポーネントのクラスの実装

RTコンポーネントの実装を見ていきましょう。

RTコンポーネントのひな形

namespace Examples
{
    [Component(Category = "Examples", Name = "ExampleComponent")]
    public class ExampleComponent : DataFlowComponent
    {
    }
}

ここでまず目につくのが、以下のカスタム属性でしょう。

[Component(Category = "Examples", Name = "ExampleComponent")]

このComponentカスタム属性をクラスに付与することにより、このクラスがRTコンポーネントを実装していることを示します。 “Category”にはコンポーネントが属するカテゴリの名前を、“Name”にはコンポーネントの名前を指定します。 この“Name”に指定した名前を、ManagerクラスのCreateComponentメソッドに指定することになります。 なお、CategoryやNameを指定しない場合は、自動的にクラス名が割り当てられることになります。

プロファイルの指定

RTコンポーネントを実装しているクラスには、Component属性以外にも、DetailProfile属性や、CustomProfile属性などを付与し、 詳細なプロファイルを設定することができます。

以下に示すように、Component属性では、カテゴリ名とコンポーネント名以外に、実行コンテキスト、実行周期を指定することができます。 ただし、実行コンテキスト名は、rtc.configで指定したものが優先的に利用されます。 また、DetailProfile属性では、実装プログラミング言語やベンダ名、バージョン情報などを指定することができます。 さらに、CustomProfile属性を利用すると、ユーザー定義のプロファイル項目を追加することができます。

RTコンポーネントのプロファイル指定

using System;
using OpenRTM.Core;

namespace Examples
{
    [Component(
        Category = "Examples",
        Name = "HelloWorld",
        ExecutionContext = "PeriodicExecutionContext",
        Rate=1.0)]
    [DetailProfile(
        ActivityType = "DataFlowComponent",
        Description = "Hello World Component",
        Language = "C#",
        LanguageType = "Compile",
        MaxInstance = 10,
        Vendor = "SEC",
        Version = "1.0.0")]
    [CustomProfile("CreationDate", "2009/03/05")]
    [CustomProfile("Author", "ikezoe")]
    public class ExampleComponent : DataFlowComponent
    {
    }
}

アクティビティの実装

次に、コンポーネントのアクティビティと呼ばれるメソッドの実装をおこないます。 アクティビティは、コンポーネントの状態や外部のイベントに応じて実行されるメソッドです。 アクティビティはOnから始まるメソッド名でDataFlowComponentクラスに定義されており、コンポーネント開発者が必要に応じてオーバーライドします。 OnExecuteメソッドの実装例を以下に示します。

RTコンポーネントのアクティビティ実装

using System;
using OpenRTM.Core;

namespace Examples
{
    [Component(Category = "Examples", Name = "ExampleComponent")]
    public class ExampleComponent : DataFlowComponent
    {
        protected override ReturnCode_t OnExecute(int execHandle)
       {
            Console.WriteLine("Hello World.");
           return ReturnCode_t.RTC_OK;
       }
    }
}

アクティビティには、OnExecute以外に以下に示すメソッドが用意されています。

アクティビティの説明
アクション名 説明
OnInitialize 初期化される際に一度だけ呼ばれます。
OnActivated 非アクティブ状態からアクティブ化されるとき、一度だけ呼ばれます。
OnExecute アクティブ状態時に周期的に呼ばれます。
OnDeactivated アクティブ状態から非アクティブ化されるとき、一度だけ呼ばれます。
OnAborting エラー状態に入る前に一度だけ呼ばれます。
OnReset エラー状態からリセットされ、非アクティブ状態に遷移する際に一度だけ呼ばれます。
OnError エラー状態にいる間、周期的に呼ばれます。
OnFinalize コンポーネントの終了時に一度だけ呼ばれます。
OnStateUpdate OnExecuteの後、毎回呼ばれます。
OnRateChanged 実行コンテキストのrateが変更された際に呼ばれます。
OnStartup 実行コンテキストが実行を開始する際に一度だけ呼ばれます。
OnShutdown 実行コンテキストが実行を停止する際に一度だけ呼ばれます。