🧪 mocker.py の設計と連携可能性の整理#

✅ 目的と背景#

  • 実機がない環境でも haniwers daq, haniwers scan の機能を開発・テスト・デモできるようにする。

  • 実験データやスキャンデータの取得処理(sampler.py, scan)に自然に差し替えて利用可能とする。

  • 特に リアルタイムモニター の動作デモで 測定間隔を再現した再生ができるようにする。


📦 mocker.py に追加する主なクラス・関数#

  • MockSerial

  • FileBackedMockSerial

  • create_mock_device

  • create_mock_from_file

  • load_csv_lines

  • parse_timestamps

  • compute_time_deltas

  • is_mock_port

  • inject_noise

  • drop_columns


🛠 主な2種類のモックデバイス#

クラス名

用途

特徴

MockSerial

実CSVの再利用

実データの再現、タイミングの復元、シャッフル対応など

RandomMockSerial

ランダム生成

自由なダミーデータ生成に最適


🔁 実データの再利用と拡張オプション#

  • シャッフル: 実データの順序をランダム化して使用

  • スピード変更: speed=2.0 で倍速再生、speed=0.0 で sleep 無効化

  • ループ再生: ファイル末尾で先頭に戻るオプションも検討可能

  • ノイズ追加 / 列の削除: より多様なテストパターンの再現に対応可能


🔗 sampler.py, scan, daq との統合性#

  • MockSerial, RandomMockSerialserial.Serial と同等のインターフェースを提供

  • sampler.sample()for_events(), for_duration() などの既存関数に そのまま渡せる

  • run_session()device 引数に渡すことで haniwers daqhaniwers scan も動作可能

  • 実際の接続処理 device.connect()port == "mock" などによりモック自動切り替えも可能


💡 将来的な拡張アイデア#

拡張項目

説明

mock: プレフィクス構文

port = "mock:file.csv?shuffle=true&speed=2.0" のような設定で柔軟に

エラーパターン生成

欠損データ、異常ADC、時間逆転なども再現可能に

mocker_utils.py の分離

補助関数群を分けてテスト性・再利用性を向上


✅ 結論#

  • mocker.pysampler, scan, daq とシームレスに統合可能な設計

  • 実データ再利用・測定タイミングの再現により、リアルタイムモニターやスレッショルドスキャンの動作確認が実用的に可能

  • 開発・CI・ドキュメント用途でのデモにおいても、非常に有用なモジュールになる