A safety-focused Qt 6 desktop application for the Sorensen Mi-BEAM Series. It implements the USB virtual-COM and RS-232 transports described in programming manual M587352-01 Rev B (March 2026). Ethernet, GPIB, and CAN transports are intentionally not implemented.
- A simple first screen with auto-updating measured voltage, measured current, measured power, clearly separate voltage/current request controls, and timestamped device-confirmed setpoint readbacks (including an unambiguous confirmed zero-current target).
- Native Qt/platform styling with no application-wide custom color theme.
- Live voltage, current, power, capacity, state-of-charge, energy, output, mode, and trip status.
- Device-discovered voltage/current/power/protection ranges; values outside the instrument's reported limits cannot be sent.
- Output controls with deliberate enable confirmation, prominent trip state, fault decoding, error queue access, and protection masks.
- Source/eLoad/bidirectional setup, slew and ramp control, transient lists, PV simulation, battery simulation, battery test profiles/sequences, analog programming, DIO, relays, remote inhibit, sensing, and isolation-relay control.
- Searchable graphical command workbench covering every SCPI subsystem in the manual. Each query response and every transmitted/received byte is visible and exportable.
- Manual-derived technician warning and explicit confirmation for every calibration/service write. Persistent writes require output-off; only documented energized calibration steps are permitted while the output is on.
- Read-only monitoring on connect: connecting never changes an already-running supply.
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/mibeam-controlUSB uses 115200 baud. RS-232 defaults to 9600 and supports 9600, 19200, 38400, 57600, and 115200 baud; the application setting must match the front-panel RS-232 setting. Both are 8 data bits, no parity, one stop bit, and no flow control. Following the manual's tested terminal setup, the application transmits commands with CR+LF and accepts CR, LF, or CR+LF replies.
On connect, the application sends only the harmless *IDN? probe. It does not start discovery or
live polling until that response succeeds. If it fails, the connection banner reports the active
interface, baud, framing, and termination settings, and the Raw TX / RX tab preserves the exact
bytes for diagnosis.
Response parsing accepts both the Programming Manual's numeric/positional forms and observed
Mi-BEAM firmware forms: labeled VMEAS/IMEAS/PMEAS measurements, word or numeric state
values, and chassis-prefixed status/error values. Parsed output configuration and rear-panel I/O
also retain their exact device-returned text beside the editable controls.
The application does not assume a model rating. On connection it asks the instrument for each
available MINimum? and MAXimum? value and only enables programming after those limits
are known. User soft limits further constrain setpoints. Cross-field checks require low limits to
remain below high limits, set voltage to remain below OVP, and set current to remain within OCP.
The instrument remains the final safety authority.
Before enabling an output, independently verify wiring, grounding, polarity, remote-sense leads, load ratings, interlocks, and protection limits. Hazardous voltage may remain after output-off or AC disconnection. Calibration is for qualified service personnel only and requires the external equipment and procedures in Chapter 11 of the manual.
The non-GUI safety and protocol tests use only the standard library:
python3 -m unittest discover -s tests -v