mcpField
T
Thorlabs Optical Power Meter

Thorlabs Optical Power Meter

ローカル
github.com科学・教育235 週間前に更新

Thorlabs Optical Power Meter について

USBTMC/VISA 経由の SCPI で、Thorlabs 光パワーメーターの読み取り、変化の記録、設定変更を行う MCP サーバーです。レーザー測定ワークフロー向けで、実機では未検証、回線レベルのシミュレーターでテストされています。

主な機能

  1. 01光パワーとセンサー温度の読み取り
  2. 02パワー系列と安定性指標の記録
  3. 03波長補正・平均回数・レンジの設定
  4. 04センサーの暗電流ゼロ調整
  5. 05メーターとセンサー情報の確認

活用シーン

  1. 01指定波長でのレーザーパワー測定
  2. 02レーザーの暖機ドリフトと安定性の記録
  3. 03測定前の波長とレンジの設定
  4. 04サーマルセンサーの暖機状態の確認

MCP 対応

MCP クライアントに Thorlabs 光パワーメーターの読み取り、設定、ゼロ調整ツールを提供し、USBTMC/VISA 経由で SCPI コマンドを送信します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"k-dense-ai-labmcp-thorlabs-pm": {
"command": "uvx",
"args": [
"labmcp-thorlabs-pm"
],
"env": {
"LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
"LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
"LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
"LABMCP_LIMITS": "<LABMCP_LIMITS>"
}
}
}
}
起動コマンドuvx labmcp-thorlabs-pm
設定が必要な環境変数
LABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025
LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)
LABMCP_READ_ONLYSet to 1 to disable all state-changing tools
LABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypilabmcp-thorlabs-pm0.1.2

ツール

11

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

Thorlabs Optical Power Meter — MCP サーバー

AI エージェントが、USB(USBTMC/VISA)経由で、文書化された SCPI コマンドセットを使用して、Thorlabs 光パワーメーターのレーザーパワーの読み取り、安定性とウォームアップ時のドリフトの記録、波長補正・平均化・レンジの設定、センサーの暗電流ゼロ調整を行えるようにします。

パッケージlabmcp-thorlabs-pm
計測器C シリーズのフォトダイオードおよびサーマルセンサーを搭載した PM100D、PM100A、PM100USB、PM400 コンソール。PM101 と PM5020 は同じ文書化済みコマンドを使用しますが、未検証です(「注意事項」を参照)
インターフェースUSB(USBTMC、VISA 経由)
プロトコルSCPI:PM100D Operation Manual 17654-D02 §6.4、PM100USB Operation Manual 19570-D02 §6.3、PM400 Operating Manual v1.1 §5.5、および Thorlabs のモデルごとの SCPI コマンドリファレンス
ステータス🧪 シミュレーション済み:ワイヤーレベルの SCPI シミュレーターでテスト済みですが、ハードウェアでは未検証です。ハードウェアでのテストを報告

ハードウェアなしで試す

uvx labmcp-thorlabs-pm --simulate --check
uvx labmcp-thorlabs-pm --simulate --option sim_sensor=S302C --check   # thermal sensor head

シミュレーターは、1.234 mW、632.8 nm の HeNe レーザーを測定する S120C フォトダイオード(または S302C 熱電堆)を搭載した PM100D です。フォトダイオードに誤った波長を設定すると、実際の実験台と同じように、読み取り値も設定に比例して誤った値になります。

パワーメーターを接続する

  1. ドライバー。 Thorlabs のメーターは、USB Test & Measurement Class(USBTMC)デバイスとして列挙され、ベンダー ID は 0x1313 です。
    • Windows: Thorlabs のドライバー(TLPM/Thorlabs VISA)は PyVISA から認識されません。無料の NI-VISA runtime をインストールし、Thorlabs Driver Switcher(Thorlabs Optical Power Monitor ソフトウェアと一緒にインストールされます)でメーターを NI-VISA ドライバーに切り替えてから、サーバーを ?backend=@ivi で起動してください(以下を参照)。これは Thorlabs が PyVISA 向けに文書化している方法です。
    • Linux: pyvisa-py が USBTMC と直接通信します(このパッケージと一緒にインストールされます)。ユーザーがデバイスにアクセスできるようにします。例として、/etc/udev/rules.d/99-thorlabs-pm.rules に次の内容を記述します。
      SUBSYSTEM=="usb", ATTR{idVendor}=="1313", MODE="0666"
      
      その後、sudo udevadm control --reload-rules を実行し、メーターを再接続します。NI-VISA も使用できます(?backend=@ivi)。
    • macOS: pyvisa-py と libusb を使用します(brew install libusb)。NI-VISA も使用できます。
  2. リソース文字列を確認します: uvx labmcp ports(または python -m pyvisa info)を実行します。次のような文字列が表示されます:USB0::0x1313::0x8078::P0012345::INSTR(製品 ID はモデルによって異なります:PM100D は 0x8078、PM100USB は 0x8072)。
  3. 接続をテストします:
    uvx labmcp-thorlabs-pm --address USB0::0x1313::0x8078::P0012345::INSTR --check
    uvx labmcp-thorlabs-pm --address "visa://USB0::0x1313::0x8078::P0012345::INSTR?backend=@ivi" --check   # NI-VISA
    
    PM5020 の 2 つ目の入力を使用する場合は、--option channel=2 を追加してください。

MCP クライアントに追加する

Claude Code

claude mcp add power-meter -- uvx labmcp-thorlabs-pm --address USB0::0x1313::0x8078::P0012345::INSTR

Claude Desktop / Cursor / Windsurf(claude_desktop_config.json、.cursor/mcp.json、…)

{
  "mcpServers": {
    "power-meter": {
      "command": "uvx",
      "args": ["labmcp-thorlabs-pm", "--address", "USB0::0x1313::0x8078::P0012345::INSTR"]
    }
  }
}

読み取りは許可しつつ、波長、平均化、レンジ、ゼロ調整の変更を禁止するには、--read-only を追加してください。その他のクライアントでは、uvx labmcp config thorlabs-pm --address <resource> --client vscode を実行して設定スニペットを生成してください(cursor、codex、claude-code も指定できます)。

ツール

ツール種類説明
get_command_log👁 読み取り装置に送信されたコマンドと装置から受信した応答のうち、直近のものを新しい順に返します。デバッグや、実行内容の記録に役立ちます。
get_connection_info👁 読み取り接続中の装置(識別情報、アドレス、シミュレーションか実機か)、サーバーが読み取り専用かどうか、有効な安全制限を報告します。最初に呼び出してください。
get_device_info👁 読み取りメーターコンソールと、接続されているセンサーヘッド(モデル、シリアル番号、種類、波長範囲、パワー範囲)を識別し、現在の波長、平均化、レンジ、ゼロ値を報告します。
log_power_series👁 読み取りレーザーの安定性、ウォームアップ、ドリフトを評価するため、一連のパワー測定値を記録します。平均、標準偏差、最小値/最大値、RMS、ピーク・ツー・ピーク安定性(%)、ドリフト(%/分)と、測定値(max_points 件に間引き済み)を返します。すべての測定値を保持するには、save_path に新しい .csv ファイルを指定してください。
read_power👁 読み取り光パワーを1回測定します(W、dBm、書式設定済みの文字列)。測定には設定済みの補正波長と平均化が使われるため、先に波長を設定してください。
read_sensor_temperature👁 読み取りセンサーヘッドの温度を℃で読み取ります(サーマルセンサーおよび温度センサーを内蔵したその他のヘッドのみ)。
reconnect🛑 安全装置との接続を閉じて、再度開きます(電源の再投入後や、ケーブルの再接続後など)。
set_averaging🎛 制御メーターが各測定値の算出に平均するサンプル数を設定します。平均化を増やすとノイズは減りますが、測定に時間がかかります(PM100シリーズ:約3 ms/サンプル、PM400/PM101/PM5020:1 ms)。
set_range🎛 制御オートレンジ、またはrange_wに適合する固定パワーレンジを選択します(メーターはそのパワーを測定できる範囲で最も感度の高いレンジを選択します)。固定レンジでは、上限を超えるとレンジ超過が報告されます。
set_wavelength🎛 制御センサー信号をパワーに変換する際にメーターが使用する補正波長(nm)を設定します。センサーの校正範囲内(get_device_infoを参照)である必要があります。整数のnm単位で送信されます。
zero_sensor🎛 制御センサーの暗ゼロ調整を行います(暗電流/熱オフセットを除去します)。呼び出す前に、ユーザーにビームを遮断してセンサーの開口部を完全に覆うよう依頼し、確認を待ってください。センサーに光が当たった状態でゼロ調整すると、その後の測定値がすべて不正になります。数秒かかります。

get_connection_info、get_command_log、reconnectは、すべてのLabMCPサーバーに組み込まれています。

パワーメーターは測定のみを行うため、このサーバーに危険を伴うツールはありません。危険なのはレーザーです。適切な保護眼鏡を着用し、センサーの定格パワーまたはパワー密度を決して超えないでください。

安全制限

制限デフォルト意味
max_series_duration_s600 sエージェントが開始できる最長のパワー記録時間です。測定回数 × max(間隔、測定時間)として推定されます。1回の測定時間は、平均化回数 × 3 ms に約10 msを加えた時間です。

起動時に上書きできます:--limit max_series_duration_s=3600。1回の呼び出しで記録できるのは最大3640 sです(ツールのタイムアウト時間から余裕分を差し引いた値)。これより長い推定時間は拒否されます。シリーズの実行が推定より遅い場合は途中で停止し、測定済みのデータを返します(completed: false)。save_pathは.csvで終わる必要があり、ファイルがまだ存在してはいけません(既存ファイルは上書きされません)。記録の開始前に検証されます。

プロンプトの例

  • 「メーターを1064 nmに設定して、対物レンズの後のパワーを教えてください。」
  • 「レーザーパワーを10分間、2秒ごとに記録して、RMSとピーク・ツー・ピーク安定性を報告してください。データを~/data/laser_warmup.csvに保存してください。」
  • 「センサーにキャップをしています。ゼロ調整してください。そのあとキャップを外すので、パワーを読み取ってください。」
  • 「このNDフィルターの透過率を測定してください。フィルターなしでパワーを読み取り、挿入後にもう一度読み取って、光学濃度を教えてください。」
  • 「サーマルセンサーヘッドはまだ温まっていますか?安定するまで毎分、温度を読み取ってください。」

注意事項

  • 波長は重要です。 フォトダイオードの感度はセンサーの測定範囲全体で数倍変動するため、波長設定を間違えると電力値も誤ります。サーバーは整数ナノメートルを送信するため(PM400/PM101/PM5020 のリファレンスでは整数が指定されています)、632.8 nm は 633 nm に設定されます。これによる感度の変化は、センサーの校正不確かさよりはるかに小さいものです。
  • 単位。 MEAS:POW? は、メーターで設定されている単位(W または dBm)で応答します。ドライバーは最初に SENS:POW:UNIT? を読み取り、常にワットで値を返すため、フロントパネルの単位を変更してもエージェントが誤解することはありません。
  • 測定範囲外。 信号が手動で選択した測定範囲を超えると、メーターは INFINITY / 9.9E37 と応答します。サーバーは、自動レンジ設定を提案するエラーとしてこれを報告します。
  • ゼロ調整(SENS:CORR:COLL:ZERO)はバックグラウンドで実行されます。サーバーは …:ZERO:STAT? をポーリングし、エラーキューを確認して、ゼロ値(…:ZERO:MAGN?)を返します。ゼロ値はメーターの再起動時に失われます。
  • エネルギー(焦電型)センサーは認識されますが、サポートされていません。単一パルスのエネルギー測定には、このサーバーではまだ実装されていないトリガー/取得ワークフローが必要です。
  • 平均化には SENS:AVER:COUN を使用します。PM100 シリーズでは 1 サンプルに約 3 ms、PM400/PM101/PM5020 では 1 ms かかります。応答タイムアウトは平均化回数に応じて延長されます。
  • PM101 および PM5020: Thorlabs のこれらのコマンドリファレンスには、ここで使用しているコマンドがすべて記載されています。PM5020 ではチャンネルサフィックス(SENS2、MEAS2、SYST:SENS2:IDN?)が追加され、--option channel=2 で選択します。どちらもまだテストされておらず、PM5020 の LAN/シリアル接続も試されていません。PM100D の Windows TLPM DLL ドライバーは使用しません。このサーバーは SCPI のみを使用します。
  • 範囲外の値に対するシミュレーターのエラー応答(-222,"Data out of range")は、標準の SCPI コードを使用します。Thorlabs のドキュメントに明記されているのは -113,"Undefined header" のみです。

ハードウェアでの検証

モデルファームウェアインターフェース検証者日付
まだありません:最初の検証者になる

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。