Thorlabs Optical Power Meter について
USBTMC/VISA 経由の SCPI で、Thorlabs 光パワーメーターの読み取り、変化の記録、設定変更を行う MCP サーバーです。レーザー測定ワークフロー向けで、実機では未検証、回線レベルのシミュレーターでテストされています。
主な機能
- 01光パワーとセンサー温度の読み取り
- 02パワー系列と安定性指標の記録
- 03波長補正・平均回数・レンジの設定
- 04センサーの暗電流ゼロ調整
- 05メーターとセンサー情報の確認
活用シーン
- 01指定波長でのレーザーパワー測定
- 02レーザーの暖機ドリフトと安定性の記録
- 03測定前の波長とレンジの設定
- 04サーマルセンサーの暖機状態の確認
MCP 対応
MCP クライアントに Thorlabs 光パワーメーターの読み取り、設定、ゼロ調整ツールを提供し、USBTMC/VISA 経由で SCPI コマンドを送信します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx labmcp-thorlabs-pmLABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)LABMCP_READ_ONLYSet to 1 to disable all state-changing toolsLABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
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 です。フォトダイオードに誤った波長を設定すると、実際の実験台と同じように、読み取り値も設定に比例して誤った値になります。
パワーメーターを接続する
- ドライバー。 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 も使用できます。
- Windows: Thorlabs のドライバー(TLPM/Thorlabs VISA)は PyVISA から認識されません。無料の NI-VISA runtime をインストールし、Thorlabs Driver Switcher(Thorlabs Optical Power Monitor ソフトウェアと一緒にインストールされます)でメーターを NI-VISA ドライバーに切り替えてから、サーバーを
- リソース文字列を確認します:
uvx labmcp ports(またはpython -m pyvisa info)を実行します。次のような文字列が表示されます:USB0::0x1313::0x8078::P0012345::INSTR(製品 ID はモデルによって異なります:PM100D は0x8078、PM100USB は0x8072)。 - 接続をテストします:
PM5020 の 2 つ目の入力を使用する場合は、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--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_s | 600 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"のみです。
ハードウェアでの検証
| モデル | ファームウェア | インターフェース | 検証者 | 日付 |
|---|---|---|---|---|
| まだありません:最初の検証者になる |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。