実際のハードウェアデバイスがなくても、シリアル通信を行うライブラリやアプリケーションの開発および自動テストを可能にする。特定のプロトコルや応答タイミングを柔軟に設定・シミュレートできる、軽量でクロスプラットフォームなエミュレータを提供する。
| 項目 | 詳細 | 理由 |
|---|---|---|
| 言語 | Python 3.x | クロスプラットフォーム性、pyserial の安定性、迅速な開発。 |
| コア通信 | pyserial |
OSに依存しないシリアルポート操作のデファクトスタンダード。 |
| CLI | argparse または Click |
コマンドラインオプションの簡単な定義と解析。 |
| GUI | PyQt または Tkinter |
クロスプラットフォーム対応のGUI構築。 |
| ビルド | PyInstaller + GitHub Actions |
ランタイム内包型の単一実行ファイルを自動生成・配布。 |
コアとなるエミュレーションロジックと、ユーザー操作部分(CLI/GUI)を明確に分離します。
- 役割: エミュレータの心臓部であり、すべてのシリアル通信処理と応答ロジックを担う。CLI/GUIインターフェースから独立している。
- 機能:
- ポート初期化: 指定された仮想シリアルポート、ボーレート、データビット、パリティ、ストップビットでポートを開く。
- データ監視: シリアルポートからの受信データを継続的に監視する。
- 応答処理: 設定ファイルに定義されたリクエストパターンに受信データが一致した場合、定義されたレスポンスデータを定義された遅延時間の後に送信する。
- ロギング: すべての送受信データを記録する機能(ファイル出力/標準出力)。
| インターフェース | 用途 | 入力(必須) |
|---|---|---|
| CLI | 自動テスト、サーバー環境、軽量実行 | シミュレーション設定ファイルパス、ポート名 |
| GUI | 手動デバッグ、リアルタイム監視、設定補助 | ポート名、ボーレート (GUIで設定・保存) |
エミュレータの動作は、外部の設定ファイルによって完全に制御されます。
- 基本設定:
port: 使用する仮想シリアルポート名 (例:COM3,/dev/ttyS0)baudrate,data_bits,parity,stop_bits
- 応答ルール定義: 複数のルールを定義可能。
request_pattern: 受信待機するデータパターン。- 例: プレーンな文字列、Hexバイト列 (例:
0xAA 0xBB)、正規表現。
- 例: プレーンな文字列、Hexバイト列 (例:
response_data: パターン一致時に送信する応答データ。- 例: プレーンな文字列、Hexバイト列。
delay_ms: リクエスト受信からレスポンス送信までの遅延時間 (ミリ秒単位)。タイミングシミュレーションに必須。
コアロジックの非GUI実行機能。
- 起動:
$ emulator --port COM3 --config rules.json - ロギング: 標準出力または指定ファイルに出力をリダイレクト可能。
- 終了: シグナル (Ctrl+C) 受信時、または指定された時間経過後に自動終了。
手動テストとリアルタイム監視のための機能。
- ポート接続・切断: 接続パラメータ(ポート名、ボーレートなど)を設定し、接続/切断ボタンでコアロジックを制御。
- リアルタイムログ表示: 送受信されたデータ(リクエストとレスポンス)を、タイムスタンプ付きで一覧表示する。
- 設定ファイルのロード/保存: シミュレーション定義ファイルをGUIからロードし、設定内容を編集・保存する機能。
- 手動送信: 定義ファイルにない任意のデータをシリアルポートへ手動で送信する入力フィールド。
- ユニットテスト: コアロジック (応答判定、遅延処理) は、仮想ポートを使わず、モックオブジェクトを使用して単体テストを行う。
- 統合テスト:
socatまたはcom0comで仮想ポートペアを作成し、一方に開発中のライブラリを、もう一方にエミュレータを接続して通信シーケンス全体を確認するテストを行う。
GitHub Actions を使用し、以下のOS向けにビルドを自動化します。
- Windows (
.exein.zip) - Linux (
実行ファイルin.tar.gz) - macOS (
.appin.zipまたは.dmg)
この仕様書は、開発に着手するための十分な骨子となります。特に、設定ファイルによる応答ルール定義とCLI/GUIの分離が、このエミュレータの最大の強みとなります。
この仕様の中で、特に詳細を詰めたい部分(例えば、設定ファイルの具体的なスキーマ、GUIの画面構成など)はありますか?