gRPC連携の設計と実装状況

English | 日本語

利用目的

PIXet SDKを導入した検出器接続PCで MiniPixCtrl を動かし、別PCから制御する構成を想定する。ローカル制御とネットワーク公開を分離する設計は維持する。

Application → DeviceProxy(構想・実装未確認)
            → gRPC client(実装未確認)
            → gRPC server(実装未確認)
            → MiniPixCtrl(pixet_ctrl.pyで確認済み)
            → pypixet / PIXet → MiniPIX D08-W0313

ローカルで確認できる使用法

import logging
from mini_pix.pixet_ctrl import MiniPixCtrl

logger = logging.getLogger("mini_pix")
ctrl = MiniPixCtrl(logger=logger)
if not ctrl.connect():
    raise RuntimeError("Detector connection failed")
try:
    if not ctrl.set_mode_all("Energy"):
        raise RuntimeError("Mode configuration failed")
    result = ctrl.acquire_frames(count=1, sec=1.0)
finally:
    ctrl.disconnect()

上記はローカルAPIの使用例であり、gRPCクライアントの実行例ではない。しきい値・バイアスは実験条件と校正に応じて設定する。

将来の拡張

SyncPixetGrpcClient / AsyncPixetGrpcClient、pixet_grpc_server.py、DeviceProxyを利用する構成は従来の設計案として保持する。添付ソースだけでは実装の有無が確定しないため、import例や接続先を捏造しない。通信時の画像シリアライズ、同時操作の排他、停止要求の取り扱いは別途定義する。

gRPCの透過性とローカルAPI

grpc_frame はローカル制御APIを透過的に呼び出すための通信基盤であり、検出器制御機能を独自に追加しません。したがって、リモートから実行可能な検出器操作は、サーバー側のローカル制御クラスに実装された操作に限られます。RPCの公開名や引数がローカルメソッドと一致するかは、対応するクライアント・サーバーのソースコードによる確認が必要です。

現行の正式なAPIは pixet_ctrl.py の MiniPixCtrl を基準とします。ローカル制御に存在しない機能を、gRPCだけで提供できるものとして記述しません。通信層の実装状況についても、pixet_ctrl.py だけでは断定しません。