プログラミング
Show HN: Instrumation - 計測器のためのPYPIライブラリ
Show HN: Instrumation a PYPI library for Instruments (github.com)
要約
Instrumationは、RFテストステーション向けのPythonライブラリで、PyVISAの定型コードを削減し、ハードウェアの抽象化レイヤー(HAL)を提供します。デジタルツインモードによるオフライン開発や、スマート自動検出機能により、様々なメーカーの計測器を統一APIで扱えるようになります。これにより、テストロジックの開発に集中できるようになります。
全文翻訳
このプロジェクトをサポートする
情熱を込めて作られたすべてのプロジェクト💙
Instrumation
RFテストステーション向けのハイレベルハードウェア抽象化レイヤー(HAL)。PyVISAの定型コードとの格闘をやめ、接続コードではなくテストロジックを記述しましょう。
なぜInstrumationなのか?
RFテストベンチの自動化は苦痛です。すべての計測器ブランドには独自の癖があり、SCPIの方言は様々で、スクリプトのテストには物理的なハードウェアがデスク上にある必要があります。Instrumationはこれら3つすべてを解決します。
すべてに対応する単一API — 同じコードがKeysight、Rigol、その他のサポートされているブランドで動作します
デジタルツインモード — 現実的なガウスノイズを放出するシミュレートされた計測器でオフラインで開発およびデバッグできます
スマート自動検出 — 接続されたデバイスをスキャンし、手動設定なしで適切なドライバーを自動的にロードします
実際のハードウェア検証
Instrumationは実際のラボハードウェアで検証されています。実験レポートをご覧ください:
🔬 AFG ↔ DSOX ループバック検証 — Tektronix AFG3022C + Keysight DSOX2002A によるプラグアンドプレイ自動検出
📡 PXA N9030A スペクトラムアナライザ — 高速での32ビットバイナリトレース転送
🎛️ MXG N5183B シグナルジェネレータ — パルス変調と周波数スイープ
📊 PNA N5232A ネットワークアナライザ — Sパラメータ測定とスミスチャート
PyVISA vs Instrumation: 違いを見る
従来のシグナルジェネレータのプログラミング vs. Instrumationを使用した場合:
側面 PyVISA (生のSCPI) Instrumation
検出 手動 — リソース文字列を見つけ、ResourceManagerを管理します 自動 — "AUTO"を渡すだけで、HALがUSB + LANをスキャンします
接続 rm.open_resource("TCPIP0::192.168.1.100::...") — ハードコードされたアドレス connect_instrument("AUTO", "SG") — 型認識ルーティング
設定 sg.write(":FREQ:CW 2.4e9") — 生のSCPI文字列、検証なし sg.set_frequency(2.4e9) — 境界チェック付きの型指定メソッド
クリーンアップ sg.close() — 忘れやすい コンテキストマネージャ — 自動的なwithブロッククリーンアップ
オフライン開発 接続された実際のハードウェアが必要です デジタルツイン — INSTRUMATION_MODE=SIMを設定して、どこでも開発できます
ポータビリティ ベンダー固有のSCPI — ブランドごとに書き直す必要があります 単一API — Keysight、Rigol、Tektronix、Siglent、R&S、Anritsuで動作します
サイドバイサイドコード
# ─── PyVISA: 8行の定型コード ───
import pyvisa
rm = pyvisa.ResourceManager()
# 正しいリソースを手動で見つけます...
sg = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR")
sg.write("*RST")
sg.write(":FREQ:CW 2.4e9")
sg.write(":POW:AMPL -10")
sg.write(":OUTP ON")
sg.close()
# ─── Instrumation: 5行、設定不要 ───
from instrumation import connect_instrument
with connect_instrument("AUTO", "SG") as sg:
sg.set_frequency(2.4e9)
sg.set_amplitude(-10)
sg.set_output(True)
リソースマネージャなし。SCPI文字列なし。ハードコードされたアドレスなし。テストロジックのみ。
ライブデータストリーミング
Instrumationには、UDP経由でライブ測定値をストリーミングするための組み込みDataBroadcasterが含まれています。これにより、外部依存関係なしでリアルタイムダッシュボードやロガーを構築できます。
ゼロラグ — UDP配信はテストフローをブロックしません。
ゼロコンフィグ — 任意のホスト/ポートにJSONパケットとしてブロードキャストします。
ゼロ依存 — Python標準ライブラリに組み込まれています。
使用方法については、examples/broadcast_demo.pyおよびexamples/dashboard.pyをご覧ください。
機能
自動検出 — VISAおよびシリアルバスをスキャンし、接続されているものを識別します
スマートファクトリ — 計測器ブランドを検出し、正しいドライバーをロードします
デジタルツイン — オフライン開発およびCIパイプラインのための完全なシミュレーションモード
統合API — 一度書けば、サポートされているどのハードウェアでも動作します
組み込みCSVロギング — テスト結果がすぐにログに記録されます
インストール
pip install instrumation
またはソースからインストールします:
git clone https://github.com/abduznik/instrumation.git
cd instrumation
pip install .
Windowsユーザー:物理ハードウェアにアクセスするには、NI-VISAまたはKeysight IO Libraries Suiteが必要になる場合があります。
クイックスタート
実際のハードウェア
import instrumation
sa = instrumation.connect_instrument("USB0::0x2A8D::...")
peak_power = sa.get_peak_value()
print(f"Peak Power: {peak_power} dBm")
デジタルツイン(ハードウェア不要)
# Linux/macOS
export INSTRUMATION_MODE=SIM
# Windows PowerShell
$env:INSTRUMATION_MODE="SIM"
from instrumation.factory import get_instrument
# コンテキストマネージャを使用したより安全な使用法
with get_instrument("DUMMY_ADDRESS", "DMM") as dmm:
print(dmm.get_id())
result = dmm.measure_voltage()
print(f"Voltage: {result}")
ステーションマネージャ(TOML)
station.tomlファイルを使用して、複数の計測器を持つ複雑なテストステーションを管理します。
[instruments.sa_main]
driver = "SA"
address = "USB0::0x2A8D::0x0101::MY12345678::0::INSTR"
[instruments.psu_dut]
driver = "PSU"
address = "TCPIP0::192.168.1.100::inst0::INSTR"
コードでの使用:
from instrumation import Station
station = Station("station.toml")
station.connect()
# ドット表記で計測器にアクセスします
res = station.instr.sa_main.get_peak_value()
print(f"Peak: {res}")
station.disconnect()
コマンドラインインターフェース
Instrumationには、迅速な対話と診断のための強力なCLIが付属しています。
# 接続されているハードウェアをスキャンします
instrumentation scan
# 簡単な測定を行います
instrumentation measure USB0::... DMM measure_voltage
# station.toml内の計測器を一覧表示します
instrumentation station list
# ステーション内の名前付き計測器を使用して測定します
instrumentation station measure sa_main get_peak_value
APIリファレンス
コマンド 説明
scan() すべての接続されているシリアルおよびVISAデバイスを一覧表示します
connect() 汎用テストステーション(ボックス+計測器)に自動接続します
connect_instrument(addr) 自動ドライバー検出で特定の計測器に接続します
プラットフォームサポート
プラットフォーム ステータス
Windows サポートされています
Linux サポートされています
Termux (Android) サポートされています
macOS サポートされています
開発
# 編集可能モードでインストールします(テストでローカルの変更を認識するために必要)
pip install -e .
# このプロジェクトはpyproject.toml(PEP 517/518)を使用しています。setup.pyは不要です。
# テスト依存関係をインストールします
pip install pytest flake8
# テストを実行します(シミュレーションモード)
export INSTRUMATION_MODE=SIM
# Linux/macOS
pytest
関連プロジェクト
instrumentation-report
測定データから構造化されたUUT(Unit Under Test)テストレポートを生成するための軽量Pythonライブラリ。Instrumationと連携してスタンドアロンで動作します。
機能:HTML、Excel、PDFレポート出力
設定可能な条件による自動合否評価
構造化されたセクションとテストテーブル
Instrumation測定との簡単な統合
pip install instrumation-report
from instrumation_report import Report, Section, TestTable, Measurement
report = Report(
header=ReportHeader(
title="RF Subsystem Validation",
engineer="Yan",
uut_serial="SN-2024-001",
)
)
section = Section(number="1", title="Voltage Tests")
table = TestTable(title="Power Supply Checks", sub_number="1.1")
table.add(Measurement("3.3V Rail", 3.31, "V", condition=(3.2, 3.4)))
section.add_table(table)
report.add_section(section)
report.generate_html("report.html")
report.generate_excel("report.xlsx")
技術スタック
言語:Python 3.7+
ライブラリ:PyVISA、PySerial
アーキテクチャ:スマートファクトリパターン、ポリモーフィズム
標準:SCPI(Standard Commands for Programmable Instruments)
プロジェクトのサポート
Instrumationは、フルタイムのRF技術者の仕事と並行して、空き時間にメンテナンスされています。もしそれがあなたの定型コードの時間を節約したり、テストベンチの自動化を容易にしたりしたのであれば、サポートを検討してください:
商用サポートまたはカスタムドライバー開発?GitHubのIssueまたはDiscussionsからお問い合わせください。
貢献
PRおよびドライバーの貢献を歓迎します。大きな変更については、まずIssueを開いて議論してください。
ライセンス
詳細についてはLICENSEを参照してください。