# VirtualDMM

## class VirtualDMM( stimulus: dict[MeasurementFunction, float] | None = None, )[source]

Bases: [`DMMDriverBase`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.DMMDriverBase.md#instro.dmm.DMMDriverBase "instro.dmm.dmm.DMMDriverBase")

DMM simulated in-process: no transport, server, or hardware.

Each function reads its stimulus value plus noise (0.5%, the SCPI simulator’s level).
Range, NPLC, digits, and aperture settings are accepted and have no effect on readings,
so any `InstroDMM` call works. To exercise the VISA transport as well, use `SimulatedDMM`
with the bundled SCPI simulator.

Create a virtual DMM.

Parameters:
:   **stimulus** ([*dict*](https://docs.python.org/3/builtins/stdtypes.html#dict "(in Python v3.15)")*[*[*MeasurementFunction*](https://dev.nominal.io/instro/ref/instruments/instro.dmm.types.MeasurementFunction.md#instro.dmm.types.MeasurementFunction "instro.dmm.drivers.virtual.MeasurementFunction")*,* [*float*](https://docs.python.org/3/builtins/functions.html#float "(in Python v3.15)")*]* *|* *None*)

    The value each function measures
    before noise, in volts, amperes, or ohms. Functions left out keep their defaults
    (1.25 V DC, 0.5 V AC, 0.1 A DC, 0.05 A AC, 1000 ohms).

Example:

```
from instro.dmm import InstroDMM, MeasurementFunction
from instro.dmm.drivers import VirtualDMM

dmm = InstroDMM(name="dmm", driver=VirtualDMM({MeasurementFunction.DC_VOLTAGE: 3.3}))
with dmm:
    print(dmm.read_dc_voltage().latest)  # about 3.3
```

Methods

| [`close`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.close "instro.dmm.drivers.virtual.VirtualDMM.close") | Nothing to disconnect. |
| --- | --- |
| [`measure_ac_current`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.measure_ac_current "instro.dmm.drivers.virtual.VirtualDMM.measure_ac_current") | Trigger an AC-current measurement and return the value (amperes RMS, vendor-dependent). |
| [`measure_ac_voltage`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.measure_ac_voltage "instro.dmm.drivers.virtual.VirtualDMM.measure_ac_voltage") | Trigger an AC-voltage measurement and return the value (volts RMS, vendor-dependent). |
| [`measure_dc_current`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.measure_dc_current "instro.dmm.drivers.virtual.VirtualDMM.measure_dc_current") | Trigger a DC-current measurement and return the value (amperes). |
| [`measure_dc_voltage`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.measure_dc_voltage "instro.dmm.drivers.virtual.VirtualDMM.measure_dc_voltage") | Trigger a DC-voltage measurement and return the value (volts). |
| [`measure_four_wire_resistance`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.measure_four_wire_resistance "instro.dmm.drivers.virtual.VirtualDMM.measure_four_wire_resistance") | Trigger a 4-wire-resistance measurement and return the value (ohms). |
| [`measure_resistance`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.measure_resistance "instro.dmm.drivers.virtual.VirtualDMM.measure_resistance") | Trigger a 2-wire-resistance measurement and return the value (ohms). |
| [`open`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.open "instro.dmm.drivers.virtual.VirtualDMM.open") | Nothing to connect to. |
| [`set_ac_current_nplc`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_ac_current_nplc "instro.dmm.drivers.virtual.VirtualDMM.set_ac_current_nplc") | Accepted; no effect on readings. |
| [`set_ac_current_range`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_ac_current_range "instro.dmm.drivers.virtual.VirtualDMM.set_ac_current_range") | Accepted; no effect on readings. |
| [`set_ac_voltage_nplc`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_ac_voltage_nplc "instro.dmm.drivers.virtual.VirtualDMM.set_ac_voltage_nplc") | Accepted; no effect on readings. |
| [`set_ac_voltage_range`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_ac_voltage_range "instro.dmm.drivers.virtual.VirtualDMM.set_ac_voltage_range") | Accepted; no effect on readings. |
| [`set_aperture_seconds`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_aperture_seconds "instro.dmm.drivers.virtual.VirtualDMM.set_aperture_seconds") | Accepted; no effect on readings. |
| [`set_dc_current_nplc`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_dc_current_nplc "instro.dmm.drivers.virtual.VirtualDMM.set_dc_current_nplc") | Accepted; no effect on readings. |
| [`set_dc_current_range`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_dc_current_range "instro.dmm.drivers.virtual.VirtualDMM.set_dc_current_range") | Accepted; no effect on readings. |
| [`set_dc_voltage_nplc`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_dc_voltage_nplc "instro.dmm.drivers.virtual.VirtualDMM.set_dc_voltage_nplc") | Accepted; no effect on readings. |
| [`set_dc_voltage_range`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_dc_voltage_range "instro.dmm.drivers.virtual.VirtualDMM.set_dc_voltage_range") | Accepted; no effect on readings. |
| [`set_digits`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_digits "instro.dmm.drivers.virtual.VirtualDMM.set_digits") | Accepted; no effect on readings. |
| [`set_four_wire_resistance_nplc`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_four_wire_resistance_nplc "instro.dmm.drivers.virtual.VirtualDMM.set_four_wire_resistance_nplc") | Accepted; no effect on readings. |
| [`set_four_wire_resistance_range`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_four_wire_resistance_range "instro.dmm.drivers.virtual.VirtualDMM.set_four_wire_resistance_range") | Accepted; no effect on readings. |
| [`set_measurement_function`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_measurement_function "instro.dmm.drivers.virtual.VirtualDMM.set_measurement_function") | Accept any function; `InstroDMM` calls the matching `measure_*` method to read it. |
| [`set_two_wire_resistance_nplc`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_two_wire_resistance_nplc "instro.dmm.drivers.virtual.VirtualDMM.set_two_wire_resistance_nplc") | Accepted; no effect on readings. |
| [`set_two_wire_resistance_range`](https://dev.nominal.io/instro/ref/instruments/instro.dmm.drivers.virtual.VirtualDMM.md#instro.dmm.drivers.virtual.VirtualDMM.set_two_wire_resistance_range "instro.dmm.drivers.virtual.VirtualDMM.set_two_wire_resistance_range") | Accepted; no effect on readings. |

### open() → None[source]

Nothing to connect to.

### close() → None[source]

Nothing to disconnect.

### set_measurement_function( function: MeasurementFunction, ) → None[source]

Accept any function; `InstroDMM` calls the matching `measure_*` method to read it.

### set_digits(n: int) → None[source]

Accepted; no effect on readings.

### set_aperture_seconds(seconds: float) → None[source]

Accepted; no effect on readings.

### set_dc_voltage_range(value: float | None) → None[source]

Accepted; no effect on readings.

### set_ac_voltage_range(value: float | None) → None[source]

Accepted; no effect on readings.

### set_dc_current_range(value: float | None) → None[source]

Accepted; no effect on readings.

### set_ac_current_range(value: float | None) → None[source]

Accepted; no effect on readings.

### set_two_wire_resistance_range(value: float | None) → None[source]

Accepted; no effect on readings.

### set_four_wire_resistance_range(value: float | None) → None[source]

Accepted; no effect on readings.

### set_dc_voltage_nplc(nplc: float) → None[source]

Accepted; no effect on readings.

### set_ac_voltage_nplc(nplc: float) → None[source]

Accepted; no effect on readings.

### set_dc_current_nplc(nplc: float) → None[source]

Accepted; no effect on readings.

### set_ac_current_nplc(nplc: float) → None[source]

Accepted; no effect on readings.

### set_two_wire_resistance_nplc(nplc: float) → None[source]

Accepted; no effect on readings.

### set_four_wire_resistance_nplc(nplc: float) → None[source]

Accepted; no effect on readings.

### measure_dc_voltage() → float[source]

Trigger a DC-voltage measurement and return the value (volts).

### measure_ac_voltage() → float[source]

Trigger an AC-voltage measurement and return the value (volts RMS, vendor-dependent).

### measure_dc_current() → float[source]

Trigger a DC-current measurement and return the value (amperes).

### measure_ac_current() → float[source]

Trigger an AC-current measurement and return the value (amperes RMS, vendor-dependent).

### measure_resistance() → float[source]

Trigger a 2-wire-resistance measurement and return the value (ohms).

### measure_four_wire_resistance() → float[source]

Trigger a 4-wire-resistance measurement and return the value (ohms).

Default raises `NotImplementedError`; override on drivers whose
instrument has dedicated sense leads (e.g. Agilent 34401A).
