Skip to content

Latest commit

 

History

History
93 lines (62 loc) · 5.57 KB

File metadata and controls

93 lines (62 loc) · 5.57 KB

💻 シリアル通信デバイスエミュレータ開発仕様書

1. 目的

実際のハードウェアデバイスがなくても、シリアル通信を行うライブラリやアプリケーションの開発および自動テストを可能にする。特定のプロトコルや応答タイミングを柔軟に設定・シミュレートできる、軽量でクロスプラットフォームなエミュレータを提供する。

2. 採用技術

項目 詳細 理由
言語 Python 3.x クロスプラットフォーム性、pyserial の安定性、迅速な開発。
コア通信 pyserial OSに依存しないシリアルポート操作のデファクトスタンダード。
CLI argparse または Click コマンドラインオプションの簡単な定義と解析。
GUI PyQt または Tkinter クロスプラットフォーム対応のGUI構築。
ビルド PyInstaller + GitHub Actions ランタイム内包型の単一実行ファイルを自動生成・配布。

3. 設計アーキテクチャ

コアとなるエミュレーションロジックと、ユーザー操作部分(CLI/GUI)を明確に分離します。

3.1. コアエミュレーションロジック (Core Logic)

  • 役割: エミュレータの心臓部であり、すべてのシリアル通信処理と応答ロジックを担う。CLI/GUIインターフェースから独立している。
  • 機能:
    • ポート初期化: 指定された仮想シリアルポート、ボーレート、データビット、パリティ、ストップビットでポートを開く。
    • データ監視: シリアルポートからの受信データを継続的に監視する。
    • 応答処理: 設定ファイルに定義されたリクエストパターンに受信データが一致した場合、定義されたレスポンスデータを定義された遅延時間の後に送信する。
    • ロギング: すべての送受信データを記録する機能(ファイル出力/標準出力)。

3.2. インターフェース (Interface)

インターフェース 用途 入力(必須)
CLI 自動テスト、サーバー環境、軽量実行 シミュレーション設定ファイルパス、ポート名
GUI 手動デバッグ、リアルタイム監視、設定補助 ポート名、ボーレート (GUIで設定・保存)

4. 機能要件 (フィーチャーリスト)

4.1. エミュレーション設定 (シミュレーション定義ファイル - 例: JSON/YAML)

エミュレータの動作は、外部の設定ファイルによって完全に制御されます。

  • 基本設定:
    • port: 使用する仮想シリアルポート名 (例: COM3, /dev/ttyS0)
    • baudrate, data_bits, parity, stop_bits
  • 応答ルール定義: 複数のルールを定義可能。
    • request_pattern: 受信待機するデータパターン。
      • 例: プレーンな文字列、Hexバイト列 (例: 0xAA 0xBB)、正規表現。
    • response_data: パターン一致時に送信する応答データ。
      • 例: プレーンな文字列、Hexバイト列。
    • delay_ms: リクエスト受信からレスポンス送信までの遅延時間 (ミリ秒単位)。タイミングシミュレーションに必須。

4.2. CLIモード機能

コアロジックの非GUI実行機能。

  1. 起動: $ emulator --port COM3 --config rules.json
  2. ロギング: 標準出力または指定ファイルに出力をリダイレクト可能。
  3. 終了: シグナル (Ctrl+C) 受信時、または指定された時間経過後に自動終了。

4.3. GUIモード機能

手動テストとリアルタイム監視のための機能。

  1. ポート接続・切断: 接続パラメータ(ポート名、ボーレートなど)を設定し、接続/切断ボタンでコアロジックを制御。
  2. リアルタイムログ表示: 送受信されたデータ(リクエストとレスポンス)を、タイムスタンプ付きで一覧表示する。
  3. 設定ファイルのロード/保存: シミュレーション定義ファイルをGUIからロードし、設定内容を編集・保存する機能。
  4. 手動送信: 定義ファイルにない任意のデータをシリアルポートへ手動で送信する入力フィールド。

5. テスト計画

  • ユニットテスト: コアロジック (応答判定、遅延処理) は、仮想ポートを使わず、モックオブジェクトを使用して単体テストを行う。
  • 統合テスト: socat または com0com で仮想ポートペアを作成し、一方に開発中のライブラリを、もう一方にエミュレータを接続して通信シーケンス全体を確認するテストを行う。

6. 配布計画 (自動化)

GitHub Actions を使用し、以下のOS向けにビルドを自動化します。

  • Windows (.exe in .zip)
  • Linux (実行ファイル in .tar.gz)
  • macOS (.app in .zip または .dmg)

この仕様書は、開発に着手するための十分な骨子となります。特に、設定ファイルによる応答ルール定義CLI/GUIの分離が、このエミュレータの最大の強みとなります。

この仕様の中で、特に詳細を詰めたい部分(例えば、設定ファイルの具体的なスキーマ、GUIの画面構成など)はありますか?