Skip to main content

E-Load simulator

The E-Load simulator is a local SCPI server for development, tests, and demos. It listens on a TCP socket, exposes a programmable electronic-load command set, and includes a terminal UI for editing the simulated source and channel limits while your code is running. Each channel sinks current from a simulated Thevenin source: an open-circuit voltage behind a series resistance. The channel regulates in constant current (CC), constant voltage (CV), constant power (CP), or constant resistance (CR) mode. When the source cannot satisfy the setpoint, the channel reports the UNREG state.

Quickstart

Start the simulator in one terminal:
It binds to 127.0.0.1:5026 by default. If you are working from a source checkout, run the same command through uv:
Connect from another terminal or script with the SimulatedELoad driver. This small Python client opens an InstroELoad, configures a 2 A constant-current draw, and reads voltage and current measurements:
Use CLI flags to change the bind address, port, or initial channel count:

Usage

The simulator runs a terminal UI while the TCP server listens in the background. The UI is organized by panel header. E-Load simulator terminal UI showing the E-Load panel, channel panels, and SCPI log Filled labels are selectable actions. Use the arrow keys to move between controls. Focused actions use a light highlight. Press Enter to select an action, Escape to close an edit prompt, and q to quit.

E-Load

The ⟢ NOMINAL E-LOAD panel shows the simulator identity and VISA resource string. Use the resource string when driver code connects to the simulator.

Channel

Each CHANNEL panel shows the live state for one input. The panel is split into status, setpoint, and measurement sections. Changing I MAX or V MAX runs *RST. The input turns off, setpoints return to zero, and ranges and the CV current limit return to the configured ceilings.

Source

The SOURCE panel shows the simulated Thevenin source feeding the channel. Select V to edit the open-circuit voltage in volts. Select R to edit the series resistance in ohms.

+ channel

The + CHANNEL panel adds a new input channel with the next available channel ID.

SCPI log

The SCPI LOG panel records incoming commands, responses, and queued errors. It is read-only.

Programming guide

Brackets mark optional SCPI path components. For example, [SOURce:]CURRent[:LEVel] accepts CURR, CURR:LEV, SOUR:CURR, and SOUR:CURR:LEV. Angle brackets mark command arguments. They are notation only; do not include the angle brackets in the command.
  • <NRf+> is a positive flexible numeric value, such as 0, 1.25, or 1e-3.
  • <literal|literal> is one literal value from the listed options.
The pipe character (|) means OR. For example, <0|1|OFF|ON> accepts 0, 1, OFF, or ON, and <NRf+|MIN|MAX> accepts one numeric value, MIN, or MAX. Do not send the pipe character in the command. For level commands, MIN maps to 0 and MAX maps to the active range for that function. For range and current-limit commands, MAX maps to the channel ceiling (I MAX, V MAX, and the fixed power and resistance ceilings). For slew commands, MIN and MAX map to the slew-rate bounds. Do not send MIN or MAX to queries. Setting a range below the current setpoint clamps the setpoint down to the new range.

Defaults and reset

On startup and after *RST, each channel uses the reset operating state: *RST preserves simulator configuration, including channel count, channel IDs, source voltage, source resistance, and configured channel ceilings.

Error queue

Errors are queued and returned one at a time by SYSTem:ERRor?. The simulator can emit these error codes:

Common commands

*IDN?
Query simulator identityResponse: String
*RST
Reset channel operating state and clear errorsResponse: None
*CLS
Clear the error queueResponse: None

MEASure subsystem

MEASure:CURRent?
Measure input currentResponse: Number
MEASure:VOLTage?
Measure terminal voltageResponse: Number
MEASure:POWer?
Measure input powerResponse: Number
With the input off, MEASure:VOLTage? returns the source open-circuit voltage and MEASure:CURRent? returns 0.

INPut subsystem

INPut[:STATe] <0|1|OFF|ON>
Enable or disable the inputResponse: None
INPut[:STATe]?
Query input stateResponse: 0 or 1
INPut:SHORt[:STATe] <0|1|OFF|ON>
Apply or release the input shortResponse: None
INPut:SHORt[:STATe]?
Query short stateResponse: 0 or 1

SOURce subsystem

[SOURce:]FUNCtion <CURRent|VOLTage|POWer|RESistance>
Select the regulation function (CC, CV, CP, CR)Response: None
[SOURce:]FUNCtion?
Query the regulation functionResponse: CURR, VOLT, POW, or RES
[SOURce:]CURRent[:LEVel][:IMMediate] <NRf+|MIN|MAX>
Set the CC setpoint (amperes)Response: None
[SOURce:]CURRent[:LEVel][:IMMediate]?
Query the CC setpointResponse: Number
[SOURce:]VOLTage[:LEVel][:IMMediate] <NRf+|MIN|MAX>
Set the CV setpoint (volts)Response: None
[SOURce:]VOLTage[:LEVel][:IMMediate]?
Query the CV setpointResponse: Number
[SOURce:]POWer[:LEVel][:IMMediate] <NRf+|MIN|MAX>
Set the CP setpoint (watts)Response: None
[SOURce:]POWer[:LEVel][:IMMediate]?
Query the CP setpointResponse: Number
[SOURce:]RESistance[:LEVel][:IMMediate] <NRf+|MIN|MAX>
Set the CR setpoint (ohms)Response: None
[SOURce:]RESistance[:LEVel][:IMMediate]?
Query the CR setpointResponse: Number
[SOURce:]CURRent:RANGe <NRf+|MIN|MAX>
Set the CC range (amperes)Response: None
[SOURce:]CURRent:RANGe?
Query the CC rangeResponse: Number
[SOURce:]VOLTage:RANGe <NRf+|MIN|MAX>
Set the CV range (volts)Response: None
[SOURce:]VOLTage:RANGe?
Query the CV rangeResponse: Number
[SOURce:]POWer:RANGe <NRf+|MIN|MAX>
Set the CP range (watts)Response: None
[SOURce:]POWer:RANGe?
Query the CP rangeResponse: Number
[SOURce:]RESistance:RANGe <NRf+|MIN|MAX>
Set the CR range (ohms)Response: None
[SOURce:]RESistance:RANGe?
Query the CR rangeResponse: Number
[SOURce:]CURRent:LIMit <NRf+|MIN|MAX>
Set the CV-mode current limit (amperes)Response: None
[SOURce:]CURRent:LIMit?
Query the CV-mode current limitResponse: Number
[SOURce:]CURRent:SLEW[:BOTH] <NRf+|MIN|MAX>
Set the rise and fall slew rates together (A/μs)Response: None
[SOURce:]CURRent:SLEW:RISE <NRf+|MIN|MAX>
Set the rising-edge slew rate (A/μs)Response: None
[SOURce:]CURRent:SLEW:RISE?
Query the rising-edge slew rateResponse: Number
[SOURce:]CURRent:SLEW:FALL <NRf+|MIN|MAX>
Set the falling-edge slew rate (A/μs)Response: None
[SOURce:]CURRent:SLEW:FALL?
Query the falling-edge slew rateResponse: Number

SYSTem subsystem

SYSTem:ERRor?
Pop one error from the error queueResponse: code,“message”