
2026/07/13 0:29
Show HN:Instruments にするための Pypi ライブラリ「Instrumation」のご紹介
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Instrumation は、Python ベースのハードウェア抽象化層(HAL)であり、PyVISA の boilerplate コードを抽象化することで RF テストステーションの自動化を簡素化し、Keysight、Rigol、Tektronix、Siglent、R&S、Anritsu など多様なメーカーのインスルメントで動作する移植可能なソフトウェアを提供することを目的としています。その最も重要な特徴は、「すべてのものに統一された API(One API for everything)」を提供することであり、生の SCPI コマンドをより安全な型付きの Python メソッドに置き換え、USB または LAN 経由で接続されたデバイスのスマートな自動検出をサポートし、手動設定なしに正しいドライバーをロードします。
ユニークなのは、「デジタルツインモード」と呼ばれるオフラインでの開発およびデバッグを支援する機能であり、リアルな高斯雑音(Gaussian noise)を出力するシミュレーションされたインスルメントを用いることで、物理機器なしでロジックのテストが可能です。実際のハードウェアによる検証は、Tektronix AFG3022C + Keysight DSOX2002A のループバック構成、Keysight N9030A を用いたバイナリ・トレース転送、N5183B を用いたパルス変調、および N5232A を用いた S パラメータ測定などのセットアップで実証されています。
PyVISA、PySerial、SCPI スタンダードに基づき構築された Instrumation は、Windows、Linux、macOS、Android(Termux 経由)で動作します。内部に搭載されている DataBroadcaster(UDP ベース、ゼロ設定)による遅延ゼロのライブデータストリーミングをダッシュボードへ可能にし、HTML、Excel、PDF などの構造化レポートを生成するためのツールを提供することでワークフローを効率化します。インストールは
pip install . または GitHub からクローンを行うことで行い、Windows 上では物理アクセスのために NI-VISA または Keysight IO Libraries Suite の設置が必要です。高度なテストステーションは station.toml ファイル(Station Manager)を用いて管理でき、パッケージには診断および迅速測定用の CLI(instrumation scan)も含まれています。エコシステムはさらに、自動化されたパス/フェイル評価を行う関連プロジェクト instrumation-report によって拡張されています。
Text to translate:
Instrumation is a Python-based Hardware Abstraction Layer designed to simplify Radio Frequency (RF) test station automation by abstracting PyVISA boilerplate and enabling portable software that works across diverse instrument brands including Keysight, Rigol, Tektronix, Siglent, R&S, and Anritsu. Its most critical feature is providing a unified API ("One API for everything") that replaces raw SCPI commands with safer, typed Python methods and supports smart auto-detection of connected devices via USB or LAN, loading the correct driver without manual configuration.
Uniquely, it supports offline development and debugging via "Digital Twin mode" (simulated instruments emitting realistic Gaussian noise), allowing developers to test logic without physical equipment. Real hardware validation has been demonstrated using setups like a Tektronix AFG3022C + Keysight DSOX2002A loopback, Keysight N9030A for binary trace transfers, N5183B for pulse modulation, and N5232A for S-parameter measurements.
Built on PyVISA, PySerial, and the SCPI standard, Instrumation runs on Windows, Linux, macOS, and Android (via Termux). It streamlines workflows by enabling zero-lag live data streaming to dashboards via its built-in DataBroadcaster (UDP-based, zero-config) and offering tools to generate structured reports in HTML, Excel, or PDF. Installation is done via
pip install . or cloning from GitHub; on Windows, NI-VISA or Keysight IO Libraries Suite are required for physical access. Advanced test stations can be managed using a station.toml file (Station Manager), and the package includes a CLI (instrumation scan) for diagnostics and quick measurements. The ecosystem is further extended by the related instrumation-report project for automated pass/fail evaluation.本文
Instrumation:RF テストステーション用ハードウェア抽象化レイヤー (HAL)
情熱を込めて作成されたプロジェクトです ❤️。 PyVISA のテンプレートコードに振り回されることなく、テストロジックの記述に集中できる環境を提供します。
Instrumation とは?
RF テストステーション向けの上位層 ハードウェア抽象化レイヤー (HAL) です。 接続処理よりも、本質的なテストロジックを書くことにリソースを割きたい場合に最適です。
採用理由:3 つの主要問題を解決
RF テストベンチの自動化において発生しうる課題を一括で解消します。
- 何でも一つの API
- Keysight、Rigol、およびサポートされているすべてのブランドで 同じコード が動作します。
- デジタルツインモード
- リアルな正規分布ノイズを発生させるシミュレーション環境により、オフラインでの開発とデバッグが可能です。
- 賢い自動検出
- 接続されたデバイスをスキャンし、適切なドライバーを自動的に読み込みます。手動設定は不要です。
実ハードウェアによる検証実績
実際のラボ環境で以下のようなデバイスとの互換性を確認済みです:
- 🔬 AFG ↔ DSOX ループバック検証
- Tektronix AFG3022C と Keysight DSOX2002A を使用したプラグ&プレイ式 AUTO 検出。
- 📡 PXA N9030A スペクトラムアナライザ
- 高速な 32 ビットバイナリトレース転送に対応。
- 🎛️ MXG N5183B シグナルジェネレータ
- パルス変調と周波数スキャンの制御。
- 📊 PNA N5232A ネットワークアナライザ
- S パラメータ測定および-Smith チャート機能の確認。
PyVISA と Instrumation の違い
信号ジェネレータをプログラミングする際、従来の PyVISA(生 SCPI)と Instrumation を比較します。
| 項目 | PyVISA (生 SCPI) | Instrumation |
|---|---|---|
| 検出 | 手動 — リソース文字列を手探りで探し、ResourceManager を管理する必要あり | 自動 — を渡すだけで、HAL が USB および LAN をスキャン |
| 接続 | — ハードコーディされたアドレス | — タイプに配慮したルーティング |
| 設定 | — 生 SCPI、検証なし | — バインドチェック付きの typed メソッド |
| 片付け | 手動 — 見落としがち | コンテキストマネージャ — ブロック終了時に自動処理 |
| オフライン開発 | 実際のハードウェア接続必須 | デジタルツイン — でどこからでも開発可能 |
| ポータビリティ | ベンダ固有の SCPI — 各ブランドで書き換えが必要 | 一つの API — Keysight, Rigol, Tektronix など全ブランド共通 |
サイドバイサイドコード比較
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)
- ResourceManager 不要
- SCPI 文字列不要
- ハードコーディされたアドレス不要
- ただあなたのテストロジックだけです
リアルタイムデータストリーミング
UDP を介したライブ読出しのための内蔵
DataBroadcaster を備えています。外部依存関係なしに、リアルタイムダッシュボードやロッガーを構築可能です。
- ゼロレイグ — UDP デリバリーはテストフローをブロックしません
- ゼロ設定 — JSON パケットとして任意のホスト/ポートへブロードキャストします
- ゼロ依存 — Python 標準ライブラリのみで動作
詳細な使い方例:examples/broadcast_demo.py および examples/dashboard.py をご覧ください。
主な特徴
- 自動検出 — VISA とシリアルバスの接続機器をスキャンし、現状の接続状況を識別します。
- スマートファクトリー — 楽器ブランドを検出し、正しいドライバーを読み込みます。
- デジタルツイン — オフライン開発や CI パイプライン向けのフルシミュレーションモードを提供します。
- 統一された API — 一度書くだけで、サポートされているあらゆるハードウェアで動作します。
- 内蔵 CSV ロギング — テスト結果を標準装備でログ出力できます。
インストール
ソースコードからインストールしてください:
git clone https://github.com/abduznik/instrumation.git cd instrumation pip install .
注意: Windows ユーザーの場合、物理ハードウェアへのアクセスには
またはNI-VISAのインストールが必要な場合があります。Keysight IO Libraries Suite
クイックスタート
実ハードウェア使用時
import instrumation # USB アドレスなど具体的なアドレスを指定 sa = instrumation.connect_instrument("USB0::0x2A8D::...") peak_power = sa.get_peak_value() print(f"ピーク電力:{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"電圧:{result}")
駅長マネージャー (TOML)
複数の楽器を備えた複雑なテストステーションは、
station.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"
Python での利用:
from instrumation import Station station = Station("station.toml") station.connect() # ドット記法で楽器にアクセス res = station.instr.sa_main.get_peak_value() print(f"ピーク:{res}") station.disconnect()
コマンドラインインターフェース (CLI)
Instrumation は素早い操作と診断用の強力な CLI を内蔵しています。
- 接続されたハードウェアをスキャン
instrumation scan - 素早い測定を実行
instrumation measure USB0::... DMM measure_voltage - station.toml に定義された楽器の一覧を表示
instrumation station list - Station オブジェクトを使って測定実行
instrumation station measure sa_main get_peak_value
API リファレンス
| コマンド | 説明 |
|---|---|
| 接続されたシリアルおよび VISA デバイスのすべてをリストします |
| ジェネリックテストステーション(ボックス+楽器)に自動接続します |
| 特定の楽器に接続し、自動ドライバー検出を行います |
プラットフォームサポート
| プラットフォーム | ステータス |
|---|---|
| Windows | サポート済み |
| Linux | サポート済み |
| Termux (Android) | サポート済み |
| macOS | サポート済み |
開発環境のセットアップ
テストがローカルの変更を検出できるようにして編集モードでインストール(必須):
pip install -e .
このプロジェクトは
(PEP 517/518) を使用しています。pyproject.tomlは不要です。setup.py
テストの実行(シミュレーションモード):
# テスト依存関係をインストール pip install pytest flake8 export INSTRUMATION_MODE=SIM # Linux/macOS pytest
関連プロジェクト:instrumation-report
測定データからユニットテスト (UUT) のテストレポートを生成するための軽量 Python ライブラリです。Instrumation と連携して使用することも、単独でも動作します。
特徴:
- HTML、Excel、PDF レポート出力
- 設定可能な条件に基づく自動パス/フェイル評価
- 構造化されたセクションとテストテーブル
- Instrumation 測定との簡単な統合
pip install instrumation-report
from instrumation_report import Report, Section, TestTable, Measurement report = Report(header=ReportHeader( title="RF サブシステム検証", engineer="ヤン", uut_serial="SN-2024-001", )) section = Section(number="1", title="電圧テスト") table = TestTable(title="電源チェック", sub_number="1.1") table.add(Measurement("3.3V レール", 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 (プログラマブル機器用標準コマンド)
プロジェクトの支援について
Instrumation は、フルタイムで働く RF 技術者の隙間時間に維持されています。 テンプレートコードの削減やテストベンチの自動化に貢献したい方はご検討ください。
- 商用サポートまたはカスタムドライバー開発のご希望がある場合は、GitHub Issues または Discussions からご連絡ください。
- 寄付については、プルリクエストおよびドライバーへの貢献を歓迎します。大規模な変更については事前に Issue で議論することをお勧めします。