MCP Servers

模型上下文协议服务器、框架、SDK 和模板的综合目录。

D
Dho804 Ecu MCP
作者 @todateman

MCP server by todateman

创建于 3/22/2026
更新于 about 5 hours ago
Repository documentation and setup instructions

dho804_ecu_mcp

DHO804 デジタルオシロスコープを Claude Code から制御し、
UNOR4_Chtbi-T_EFI (Arduino UNO R4 エコラン車両用 ECU) の
信号タイミングを測定・評価する MCP サーバー。


概要

ECU プログラム (main.cpp) のソースコードに基づいた理論値と、
DHO804 で実測した統計値を自動比較し、処理遅れの有無を判定する。

Claude Code
    │  MCP (stdio)
    ▼
dho804_ecu_mcp  ──VISA (LAN/USB)──▶  DHO804
                                         │ プローブ
                                         ▼
                                    UNO R4 ECU
                                  (Chibi-T International)

測定対象信号

| CH | 信号 | ピン | 論理 | 説明 | |-----|------------|------|--------|---------------------------------| | CH1 | NE_Z_IN | 9 | HIGH | クランク 0° 基準 / トリガ基準 | | CH2 | G_IN | 5 | LOW | カムパルス (74HC14 反転入力) | | CH3 | INJ_OUT | A0 | LOW=ON | 燃料噴射出力 | | CH4 | IGN_OUT | A1 | LOW=ON | 点火出力 |

注意: INJ/IGN は LOW アクティブ出力のため、パルス幅は NWIDth(負パルス幅)で測定する。


評価項目

ECU ソースコード (main.cpp) から導出した理論値と実測値を比較する。

| 測定項目 | 理論値 / 根拠 | OK 判定 | |----------|---------------|---------| | NE_Z↑ → INJ↓ 処理遅れ | ROUTINE_CYCLE_US = 24 μs (AGTimer 周期) | < 72 μs | | NE_Z↑ → IGN↓ 点火タイミング | MAP 進角角度から計算した予測値 | 差 < 500 μs | | INJ パルス幅 | calculatedINJ_time × 100 μs | 差 < 200 μs | | IGN パルス幅 | IGNITION_HOLD_US = 5000 μs | 差 < 100 μs | | 噴射 → 点火 順序 | INJ 終了後に IGN 開始 (正の値) | > 0 ms | | NZ→INJ ジッタ (σ) | AGTimer 周期以内 | σ < 24 μs |

処理フロー (ソースコード由来)

[ISR] NE_A_IN RISING → ReadNe_ISR()
  Ne_deg += 1
  NE_Z_IN=HIGH && Ne_deg>360 && G_Pulse_Flag
    → CycleReset = true

[24 μs 周期] Routine()
  if CycleReset:
    cycleReset()          ← Ne_deg=0, INJ_His=false, IGN_His=false
  if Ne_deg >= INJ_STR_CA(=0):
    INJ_OUT = LOW         ← ★ NE_Z_IN↑ からの処理遅れ: 0〜24 μs のはず
  if Ne_deg >= (360 - calculatedIGN_CA):
    IGN_OUT = LOW         ← ★ MAP 進角角度に達したタイミングで発火

ディレクトリ構成

dho804_ecu_mcp/
├── .gitignore                      # Git無視ファイル設定
├── CLAUDE.md                       # Claude Code スキル定義・操作手順
├── pyproject.toml                  # パッケージ設定
├── README.md                       # このファイル
├── src/dho804_ecu_mcp/
|   ├── __init__.py
|   ├── ecu_config.py               # ECU 定数・MAP テーブル (main.cpp より抽出)
|   ├── oscilloscope.py             # DHO804 VISA/SCPI ラッパー
|   ├── evaluator.py                # 理論値 vs 実測値 評価ロジック
|   └── server.py                   # FastMCP サーバー本体 (7 ツール)
└── doc/
    ├── DHO800_ProgrammingGuide_EN.pdf  # DHO800のVISAプログラミングガイド
    ├── DHO800_QuickGuide_EN.pdf        # DHO800のクイックガイド
    └── DHO800_UserGuide_EN.pdf         # DHO800のユーザーが緯度

インストール

依存ライブラリ

  • Python 3.11+
  • mcp >= 1.0.0
  • pyvisa >= 1.13.0
  • pyvisa-py >= 0.7.0 (LAN 接続の場合)
  • pyusb >= 1.2.1 (USB 接続の場合、pyproject.toml のコメントを外す)

インストール手順

cd dho804_ecu_mcp
pip install -e .

動作確認

# 構文チェック
python -m py_compile src/dho804_ecu_mcp/server.py

# MCP Inspector でツール一覧を確認
npx @modelcontextprotocol/inspector python -m dho804_ecu_mcp.server

Claude Code への登録

プロジェクトルート (または ~/.claude/) の .mcp.json に追加する。

{
  "mcpServers": {
    "dho804_ecu": {
      "command": "python",
      "args": ["-m", "dho804_ecu_mcp.server"],
      "env": {
        "DHO804_ADDRESS": "TCPIP::192.168.1.100::INSTR"
      }
    }
  }
}

DHO804 の IP アドレスは Utility > Setup > LAN で確認する。
USB 接続の場合: USB0::0x1AB1::0x0515::<シリアル番号>::INSTR


MCP ツール一覧

| ツール | 説明 | |--------|------| | dho804_connect | DHO804 に VISA 接続する (最初に呼ぶ) | | dho804_setup_ecu | CH・タイムベース・トリガ・統計を一括設定 | | dho804_set_timebase | wide (5ms/div) ↔ zoom (20μs/div) 切り替え | | dho804_collect | 統計サンプルの収集を待機する | | dho804_measure | 全測定項目の統計値を取得する | | dho804_evaluate | ECU 理論値と比較して処理遅れを評価する | | dho804_run_full_measurement | 上記を一括実行するショートカット |

MCP リソース (ecu://channel_map, ecu://default_map, ecu://thresholds) も提供する。


使い方

基本計測 (最短手順)

Claude Code に話しかけるだけ:

「DHO804 に接続して ECU の処理遅れを測定して」

内部では以下のシーケンスが実行される:

1. dho804_connect       address="TCPIP::..."
2. dho804_run_full_measurement   wait_seconds=8, timebase="wide"
3. evaluation.overall_status を確認 → OK / WARN / NG を報告

処理遅れ詳細確認 (ズームモード)

1. dho804_connect
2. dho804_setup_ecu      timebase="wide",  stat_count=300
3. dho804_collect        wait_seconds=8
4. dho804_evaluate       → NE_Z↑→INJ↓ の avg/stddev を確認
5. dho804_set_timebase   timebase="zoom"   # 20μs/div に拡大
6. dho804_collect        wait_seconds=5,   reset_first=true
7. dho804_evaluate       → ジッタ(stddev) を詳細確認

回転数別評価

エンジン回転数を変えながら dho804_run_full_measurement を繰り返し、
各回転数での処理遅れ・点火タイミング差を比較する。


よくある問題

| 症状 | 原因 | 対処 | |------|------|------| | NZ_to_INJ が負値 | CH1/CH3 の接続またはトリガ設定ミス | 配線確認・トリガレベル調整 | | NZ_to_INJ > 1 ms | ISR と FreeRTOS の優先度競合 | AGTimer 優先度・vTaskSuspendAll 確認 | | INJ_Width が MAP 理論値と大きく乖離 | calculatedINJ_time の更新タイミング | cycleReset() 内の updateEngineMap() 確認 | | IGN_Width ≠ 5000 μs | IGNITION_HOLD_US または AGTimer 周期 | ROUTINE_CYCLE_US の実測確認 | | 全項目 NO_DATA | ENG_ON = false | ENGOFF_IN(pin7)=LOW + STR_IN(pin6)=LOW を確認 | | rpm = 0 | NE_Z_IN 未接続またはトリガレベル不一致 | CH1 波形を zoom で確認後、トリガレベル調整 |


README 記載の既知課題との対応

UNOR4_Chtbi-T_EFI の README には次の記載がある:

処理遅れに起因すると思われる過大な進角角度を設定している

dho804_evaluate"NE_Z↑→IGN↓ 点火タイミング" チェックの diff 値が
実際の進角補正量に相当する。この値を参考に defaultMapign_ca を調整することで
点火タイミング精度の改善が期待できる。


対応ハードウェア

| 機器 | 型番 / 備考 | |------|-------------| | オシロスコープ | RIGOL DHO804 (DHO800 シリーズ) | | ECU | Arduino UNO R4 Minima / カスタム RA4M1 ボード | | 接続 | LAN (推奨) または USB DEVICE |


ライセンス

MIT

快速设置
此服务器的安装指南

安装包 (如果需要)

uvx dho804_ecu_mcp

Cursor 配置 (mcp.json)

{ "mcpServers": { "todateman-dho804-ecu-mcp": { "command": "uvx", "args": [ "dho804_ecu_mcp" ] } } }