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 theUNREG state.
Quickstart
Start the simulator in one terminal:127.0.0.1:5026 by default. If you are working from a source checkout, run the same command through uv:
SimulatedELoad driver. This small Python client opens an InstroELoad, configures a 2 A constant-current draw, and reads voltage and current measurements:
Usage
The simulator runs a terminal UI while the TCP server listens in the background. The UI is organized by panel header.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 as0,1.25, or1e-3.<literal|literal>is one literal value from the listed options.
|) 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 bySYSTem:ERRor?. The simulator can emit these error codes:
Common commands
*IDN? | |
| Query simulator identity | Response: String |
*RST | |
| Reset channel operating state and clear errors | Response: None |
*CLS | |
| Clear the error queue | Response: None |
MEASure subsystem
MEASure:CURRent? | |
| Measure input current | Response: Number |
MEASure:VOLTage? | |
| Measure terminal voltage | Response: Number |
MEASure:POWer? | |
| Measure input power | Response: Number |
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 input | Response: None |
INPut[:STATe]? | |
| Query input state | Response: 0 or 1 |
INPut:SHORt[:STATe] <0|1|OFF|ON> | |
| Apply or release the input short | Response: None |
INPut:SHORt[:STATe]? | |
| Query short state | Response: 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 function | Response: 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 setpoint | Response: Number |
[SOURce:]VOLTage[:LEVel][:IMMediate] <NRf+|MIN|MAX> | |
| Set the CV setpoint (volts) | Response: None |
[SOURce:]VOLTage[:LEVel][:IMMediate]? | |
| Query the CV setpoint | Response: Number |
[SOURce:]POWer[:LEVel][:IMMediate] <NRf+|MIN|MAX> | |
| Set the CP setpoint (watts) | Response: None |
[SOURce:]POWer[:LEVel][:IMMediate]? | |
| Query the CP setpoint | Response: Number |
[SOURce:]RESistance[:LEVel][:IMMediate] <NRf+|MIN|MAX> | |
| Set the CR setpoint (ohms) | Response: None |
[SOURce:]RESistance[:LEVel][:IMMediate]? | |
| Query the CR setpoint | Response: Number |
[SOURce:]CURRent:RANGe <NRf+|MIN|MAX> | |
| Set the CC range (amperes) | Response: None |
[SOURce:]CURRent:RANGe? | |
| Query the CC range | Response: Number |
[SOURce:]VOLTage:RANGe <NRf+|MIN|MAX> | |
| Set the CV range (volts) | Response: None |
[SOURce:]VOLTage:RANGe? | |
| Query the CV range | Response: Number |
[SOURce:]POWer:RANGe <NRf+|MIN|MAX> | |
| Set the CP range (watts) | Response: None |
[SOURce:]POWer:RANGe? | |
| Query the CP range | Response: Number |
[SOURce:]RESistance:RANGe <NRf+|MIN|MAX> | |
| Set the CR range (ohms) | Response: None |
[SOURce:]RESistance:RANGe? | |
| Query the CR range | Response: Number |
[SOURce:]CURRent:LIMit <NRf+|MIN|MAX> | |
| Set the CV-mode current limit (amperes) | Response: None |
[SOURce:]CURRent:LIMit? | |
| Query the CV-mode current limit | Response: 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 rate | Response: 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 rate | Response: Number |
SYSTem subsystem
SYSTem:ERRor? | |
| Pop one error from the error queue | Response: code,“message” |