diff --git a/README.md b/README.md index 66cc42f..45255b3 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,25 @@ # HIOKI 3193-10 Power Analyzer Tools -GPIB/USB control tools for the HIOKI 3193-10 power analyzer, built for solar MPPT converter efficiency testing. +GPIB control tools for the HIOKI 3193-10 power analyzer, built for solar MPPT converter efficiency testing. + +## Hardware Setup + +- **HIOKI 3193-10** power analyzer with 9600 input units +- **GPIB-USB adapter**: [UsbGpib](https://github.com/xyphro/UsbGpib) — open-source USB-GPIB adapter +- **NI-VISA runtime** — provides the VISA layer (`visa32.dll`) + +The UsbGpib adapter connects to the HIOKI's rear GPIB port and appears as a USB-TMC device. NI-VISA handles the communication. ## Requirements - Python 3.12+ - [uv](https://docs.astral.sh/uv/) package manager - NI-VISA runtime (already installed if `visa32.dll` exists) -- HIOKI 3193-10 connected via USB +- UsbGpib adapter connected between PC and HIOKI 3193-10 ## Install ```bash -cd C:\dev\hioki_3193-10 uv sync ``` @@ -44,9 +51,12 @@ Show instrument identity, installed options, clock, wiring mode, and response sp ### `hioki setup-mppt` One-command setup for MPPT efficiency testing: -- Ch5: 150V, 10A, DC coupling, SLOW (solar panel input) -- Ch6: 30V, 50A, DC coupling, SLOW (MPPT converter output) +- Ch5: V-auto, I-auto, DC coupling, SLOW (solar panel input) +- Ch6: V-auto, I-auto, DC coupling, SLOW (MPPT converter output) - EFF1 = P6/P5 x 100% +- Display: Ch5 items on left, Ch6 items on right, with EFF1 + +Both voltage and current auto-range for best accuracy across the full sweep range. ### `hioki measure [items...]` @@ -65,7 +75,7 @@ uv run hioki measure U1 I1 P1 U2 I2 P2 U3 I3 P3 U4 I4 P4 U5 I5 P5 U6 I6 P6 ### `hioki monitor [items...]` -Continuous text-based monitoring with optional CSV logging. +Continuous text-based monitoring with optional CSV logging. When logging to CSV, voltage and current ranges are recorded per sample. ```bash # Default 1-second interval @@ -81,7 +91,7 @@ uv run hioki monitor P5 P6 EFF1 Options: - `-i, --interval` - Seconds between readings (default: 1.0) - `-n, --count` - Number of readings, 0 = infinite (default: 0) -- `-o, --output` - CSV output file path +- `-o, --output` - CSV output file path (includes U/I range columns) ### `hioki live [items...]` @@ -100,9 +110,25 @@ uv run hioki live -i 0.5 --history 100 U5 U6 P5 P6 EFF1 Options: - `-i, --interval` - Seconds between readings (default: 1.0) -- `-o, --output` - CSV output file path +- `-o, --output` - CSV output file path (includes U/I range columns) - `--history` - Max data points on graph (default: 300) +### `hioki display-select [items...]` + +Configure the instrument's front panel display. + +```bash +# MPPT preset: Ch5 left, Ch6 right, EFF1 +uv run hioki display-select --mppt + +# Custom 16-item layout +uv run hioki display-select U5 I5 P5 U6 I6 P6 EFF1 +``` + +Options: +- `-c, --count` - Number of display slots: 4, 8, or 16 (default: 16) +- `--mppt` - Preset: Ch5 on left, Ch6 on right, with EFF1 + ### `hioki efficiency` Configure efficiency calculation formula. @@ -139,9 +165,19 @@ uv run hioki send *RST ## Global Options -- `-a, --address` - VISA address (auto-detects HIOKI USB if omitted) +- `-a, --address` - VISA address (auto-detects HIOKI if omitted) - `--timeout` - Communication timeout in ms (default: 5000) +## CSV Output Format + +When using `-o` with `monitor` or `live`, the CSV includes: +- `timestamp` - Date and time of each reading +- Measurement values (e.g., `U5`, `I5`, `P5`, `EFF1`) +- `U_range` - Active voltage range per channel (e.g., 150, 300) +- `I_range` - Active current range per channel (e.g., 0.2, 5, 50) + +Range columns help identify auto-range transitions and assess measurement accuracy. + ## Python API Use the driver directly in your own scripts: @@ -149,17 +185,17 @@ Use the driver directly in your own scripts: ```python from hioki3193 import Hioki3193 -with Hioki3193("USB0::0x03EB::0x2065::HIOKI_3193-10_140110825_V1.50::INSTR") as meter: +with Hioki3193("GPIB0::1::INSTR") as meter: print(meter.idn()) # Configure meter.set_wiring_mode("1P2W") meter.set_coupling(5, "DC") - meter.set_voltage_range(5, 150) - meter.set_current_range(5, 10) + meter.set_voltage_auto(5, True) + meter.set_current_auto(5, True) meter.set_coupling(6, "DC") - meter.set_voltage_range(6, 30) - meter.set_current_range(6, 50) + meter.set_voltage_auto(6, True) + meter.set_current_auto(6, True) meter.set_response_speed("SLOW") meter.set_efficiency(1, "P6", "P5")