アーキテクチャと使用方法

en ja

責務の分離

src/tango_frame/
    再利用可能な TANGO 適応フレームワーク

device package/
    通常の機器制御クラス
    server_tango/
        機器固有の TANGO server/client 適応層

再利用可能なフレームワークは、具体的な機器クラスに依存してはならない。

サーバー側

機器固有の TANGO Device クラスは、通常の Python 機器クラスを AutoDispatchDevice に結び付ける。

class TangoDevice(AutoDispatchDevice):
    device_class = DeviceClass

tango-frame は公開 API を調べ、TANGO command と attribute を動的に生成する。

リモートコマンドとして公開しないメソッドは、機器固有のサーバークラスで除外できる。

class TangoDevice(AutoDispatchDevice):
    device_class = DeviceClass
    excluded_commands = {"save"}

クライアント側

機器固有のクライアントは、同じ機器クラスを AutoDispatchClient に結び付ける。

class DeviceClient(AutoDispatchClient):
    device_class = DeviceClass

呼び出しは TANGO DeviceProxy を介して転送される。

機器固有のクライアントに明示的に実装したメソッドは、自動リモートディスパッチより優先される。これは、リモートから取得したデータをローカルパスに保存する処理など、クライアント側の計算機に属する操作に使用する。

型変換

対応するスカラー値と同種要素の配列には、TANGO 互換のネイティブ型を使用する。

TANGO command の入力値は1つであるため、複数の異種引数を必要とする Python 呼び出しは、1つの JSON 文字列にエンコードする。直接表現できない複雑な戻り値にも、同じ JSON フォールバックを使用する。

この変換は Python API を TANGO command モデルへ適応させるためのものであり、独立した RPC プロトコルではない。