; TestController configuration file for Fluke 8845A and 8846A Digital Multimeters
; Version 1.1
; Date 15-05-2025
; Written by Gertjan Miedema,  info at miedemageluid dot nl,  Username "Gertjan" at EEVblog.
; Menu structure inspired on HP 34401A menu by WA


; For use with TestController, software to control and log data: https://lygte-info.dk/project/TestControllerIntro%20UK.html
;
; This configuration file is for the Fluke 8845A and 8846A DMM's in their native 8846 SCPI command mode. (COMMANDS -> 8846)
; Also support for Tektronix DMM4040 and DMM4050 in native SCPI mode. (COMMANDS -> SCPI)
;
; ALL 8845A / 8846A firmware versions are now supported.
; (The earlier TestController definition for 8845A/8846A worked only with post 2008 firmware models, and lacked a Setup Menu)
;
; Version 1.1: 
; - Added  support for Tektronix DMM4040 and DMM4050
; - Updated #value lines for showing all digits in the Table and Current Values.



; Some tips & info:
;
; - Connection is supported using Ethernet, COM (serial) or GPIB port.
; - Ethernet is the preferable connection: fastest, and with in-built galvanic isolation.
; - For Serial connection use the default 8845A/8846A settings: 9600 Baud, No Parity, 8 bits, 1 stop bit, Flow Control: None.
; - The Meter is shipped from the factory with the GPIB / IEEE-488 port address set to 1.
;
; - All 8845A/8846A port selection and configuration can only be done through the Meters front panel.
;   For detailed port configuration instructions see the Fluke 8845A/8846A Programmers Manual.
;
; - Use manual ranging. This prevents auto ranging during logging, and protects the meter from high input while still in low range.
;   
; - When switching ON the NULL (offset) function, the NULL value will automatically be set to the current measurement value.
;   This value is shown in "Null value:". With NULL function ON, a different offset can be entered with "Null value:".




; Known issues:
;
; - The digital filter is not implemented in this definition.
;   As the digital filter is an averaging filter, it cannot be enabled in one-shot triggered measurement mode.
;
; - DCV Ratio is not implemented. Is anybody ever using this?
;
; - Temperature measurement is not implemented in this version.
;   (I do not use it, and do not have the sensors to verify it)
;
; - 400mA current Range is not available in OutGuard SoftWare versions earlier than 2.0.





; Meta definition for Fluke 8845A
#metadef
#idString FLUKE,8845A,
#name Fluke 8845A
#handle FL8845A

#replace #cmdSetup radio Range_ Volt_AC
:write: VOLT:AC:RANG #;[*OPC]
:read: VOLT:AC:RANG?
:update: Range Volt_AC
100mV 0.1
1V 1
10V 10
100V 100
750V 750
:updatemodechange:

#cmdSetup radio Range Amp_AC
:write: CURR:AC:RANG #;[*OPC]
:read: CURR:AC:RANG?
:tip: Ranges for use with 400mA input terminal
100uA 0.0001
10mA 0.01
100mA 0.1
400mA 0.4
:updatemodechange:

#removeLine 10Ohm
#removeLine 1GOhm

#remove #cmdMode Cap CAP




; Meta definition for Fluke 8846A
#metadef
#idString FLUKE,8846A,
#name Fluke 8846A
#handle FL8846A



; Meta definition for Tektronix DMM4040
#metadef
#idString TEKTRONIX,DMM4040,
#name Tektronix DMM4040
#handle DMM4040

#replace #cmdSetup radio Range_ Volt_AC
:write: VOLT:AC:RANG #;[*OPC]
:read: VOLT:AC:RANG?
:update: Range Volt_AC
100mV 0.1
1V 1
10V 10
100V 100
750V 750
:updatemodechange:

#cmdSetup radio Range Amp_AC
:write: CURR:AC:RANG #;[*OPC]
:read: CURR:AC:RANG?
:tip: Ranges for use with 400mA input terminal
100uA 0.0001
10mA 0.01
100mA 0.1
400mA 0.4
:updatemodechange:

#removeLine 10Ohm
#removeLine 1GOhm

#remove #cmdMode Cap CAP



; Meta definition for Tektronix DMM4050
#metadef
#idString TEKTRONIX,DMM4050,
#name Tektronix DMM4050
#handle DMM4050




#meta
#idString
#name
#handle
#port 3490 com GPIB

#driver SCPIx

#author Gertjan Miedema



#notes  This configuration file is for the Fluke 8845A and 8846A DMM's in their native 8846 SCPI command mode. (COMMANDS -> 8846)
Also support for Tektronix DMM4040 and DMM4050 in native SCPI mode. (COMMANDS -> SCPI)

Connection is supported using Ethernet, COM (serial) or GPIB port.
Ethernet is the preferable connection: fastest, and with in-built galvanic isolation.
For Serial connection use the default 8845A/8846A settings: 9600 Baud, No Parity, 8 bits, 1 stop bit, Flow Control: None.
The Meter is shipped from the factory with the GPIB / IEEE-488 port address set to 1.

All 8845A/8846A port selection and configuration can only be done through the Meters front panel.
For detailed port configuration instructions see the Fluke 8845A/8846A Programmers Manual.

More info and tips in the header of this configuration file. (Fluke8845A-8846A.txt)

Version 1.1 d.d. 15-05-2025.





; A list of possible column name with unit and formatter (SI, Time, Int, D0..D6)
; code: #value name unit format {selector}
#value Volt_DC VDC SI8 Volt_DC
#value Volt_AC VAC SI7 Volt_AC
#value dB dB D3 Volt_AC_dB_rel
#value dBm dBm D3 Volt_AC_dBm
#value Amp_DC ADC SI8 Amp_DC_mA,Amp_DC_10A
#value Amp_AC AAC SI7 Amp_AC_mA,Amp_AC_10A
#value Ohm-2W Ohm SI8 Ohm-2W
#value Ohm-4W Ohm SI8 Ohm-4W
#value Freq Hz SI8 Freq
#value Period s SI8 Period
#value Cap F SI5 Cap,CAP




; How to poll for data, this is used for table and #values?
; a #askMode, #cmdMode and #prepareSample is used before this is string is used.
; This is a single line command
; READ?  Set trigger system to "wait-for-trigger", Take a measurement, Reading is placed in output buffer. 
#askValues READ?


; You can change the timeout with (time in seconds, default is 1 second)
; Set 10 seconds time-out time, to accommodate 100NPLC and AC 3Hz slow filter.
#readingDelay 10
#modeChangeDelay 10



; Program to add DB, DBM and CURR_10A modes to the FUNCtion? output.

#scpiCmd MODE? #pgm#
var mode = deviceRead(handle,"FUNC?");
if deviceRead(handle,"CALC:FUNC?")=="DB"
   mode="DB";
elseif deviceRead(handle,"CALC:FUNC?")=="DBM"
   mode="DBM";
elseif unQuote(deviceRead(handle,"FUNC?"))=="CURR" && double(deviceRead(handle,"CURR:DC:RANG?"))>=1
   mode="CURR_10A";
elseif unQuote(deviceRead(handle,"FUNC?"))=="CURR:AC" && double(deviceRead(handle,"CURR:AC:RANG?"))>=1
   mode="CURR:AC_10A";
endif;
print(mode);



; String to ask about actual meter mode, 
; This is a single line command
#askMode MODE?





#interfaceType DMM BMM
#interface readValue 0




;--- Init commands ---
; SYST:REM   Put the 8846A in remote. Only needed for RS-232 or Ethernet. Required for READ? or MEAS? commands.

#scpiCmd LanSerialInit #pgm#
if (portType!="GPIB")
  deviceWrite(handle,"SYST:REM");
endif;

; Initial commands to meter when establishing connection
; [1000]  1000ms pause
; [*OPC]  delay until previous commands are done.
; L1      Selects SCPI language
; FUNC2 "NON"  Turn off secondary display

#initCmd *RST;[1000];L1;LanSerialInit;[*OPC];FUNC2 "NON"



;---- Final commands ----
; SYST:LOC  Places the Meter in the local mode. Only needed for LAN and COM connections.
; [LOC]     Go to Local, Set device in local control mode. Only sent if GPIB port is in use.

#scpiCmd LanSerialExit #pgm#
if (portType!="GPIB")
  deviceWrite(handle,"SYST:LOC");
endif;


#scpiCmd gpibExit
[LOC]


; Final command to meter before breaking connection
; [1000]  1000ms pause

#finalCmd *cls;*rst;[1000];LanSerialExit;gpibExit;[1000]




;================ MODE MENU ===================

; Strings to configure device in different modes.
; First parameter must match a #value (4 parameter) and second parameter must match what #askMode returns.
; First parameter is also used in shortcut menu.
; [*OPC]         Delay until previous commands are done.
; CALC:STAT 0|1  Statistic functions OFF|ON

#cmdMode Volt_DC VOLT
*CLS;
FUNC "VOLT:DC";[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Volt_AC VOLT:AC
*CLS;
FUNC "VOLT:AC";[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Volt_AC_dB_rel DB
*CLS;
FUNC "VOLT:AC";[*OPC];
CALC:FUNC DB;CALC:STAT 1;[*OPC]

#cmdMode Volt_AC_dBm DBM
*CLS;
FUNC "VOLT:AC";[*OPC];
CALC:FUNC DBM;CALC:STAT 1;[*OPC]

#cmdMode Amp_DC_mA CURR
*CLS;
CONF:CURR:DC 0.4;[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Amp_DC_10A CURR_10A
*CLS;
CONF:CURR:DC 10;[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Amp_AC_mA CURR:AC
*CLS;
CONF:CURR:AC 0.4;[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Amp_AC_10A CURR:AC_10A
*CLS;
CONF:CURR:AC 10;[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Ohm-2W RES
*CLS;
FUNC "RES";[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Ohm-4W FRES
*CLS;
FUNC "FRES";[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Freq FREQ
*CLS;
FUNC "FREQ";[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Period PER
*CLS;
FUNC "PER";[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]

#cmdMode Cap CAP
*CLS;
FUNC "CAP";[*OPC];
CALC:FUNC NULL;CALC:STAT 0;[*OPC]





 
; ========== Setup menu  ===========


#cmdSetup info Active_Mode
:read: MODE?
:readmath: getElement("Volt DC;Volt AC;Volt AC, dB relative;Volt AC, dBm;Ohm 2W;Ohm 4W;Amp DC, 400mA input;Amp DC, 10A input;Amp AC, 400mA input;Amp AC, 10A input;Diode;Continuity;Frequency;Period;Ratio;Temperature;Capacitance",listIndex(unQuote(value),"VOLT VOLT:AC dB dBm RES FRES CURR CURR_10A CURR:AC CURR:AC_10A DIOD CONT FREQ PER VOLT:RAT TEMP CAP"," "),";")
:updatemodechange:
 

 ; ----- Volt DC -----

#cmdSetup radio Range Volt_DC
:read: VOLT:DC:RANG:AUTO?
:write: VOLT:DC:RANG:AUTO #;[*OPC]
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Volt_DC
:write: VOLT:DC:RANG #;[*OPC]
:read: VOLT:DC:RANG?
100mV 0.1
1V 1
10V 10
100V 100
1000V 1000
:updatemodechange:

#cmdSetup separator Range Volt_DC
2 100 Raised

#cmdSetup radio Null_(Offset) Volt_DC
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Volt_DC
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Volt_DC
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Volt -1000 1000
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Volt_DC
2 100 Raised

; #cmdSetup radio Digi_Filter Volt_DC
; :write: FILT:DC:DIG:STAT #;[500]
; :read:  FILT:DC:DIG:STAT?
; :tip:<html>The Digital filter averages readings to reduce reading noise<br>Only available when in immediate trigger mode or trigger mode with an unending number of triggers
; Off 0
; On 1
; :updatemodechange:

#cmdSetup radio Analog_Filter Volt_DC
:write: FILT:DC:STAT #;[*OPC]
:read:  FILT:DC:STAT?
:tip:<html>A 3-pole analog filter for improving noise immunity<br>May introduce additional offset (most on low NPLC values)<br> If so, the DMM must first be Zeroed (NULLed) in the used range & NLPC
Off 0
On 1
:updatemodechange:

#cmdSetup radio Auto_Zero Volt_DC
:write: ZERO:AUTO #;[*OPC]
:read: ZERO:AUTO?
:tip:<html>Activates (default) or deactivates the AutoZero mode<br>ONCE: initiates a zero measurement immediately
Off 0
On 1
Once ONCE
:updatemodechange:

#cmdSetup radio Input_impedance Volt_DC
:write: INP:IMP:AUTO #;[*OPC]
:read: INP:IMP:AUTO?
:tip: With AUTO ON, input impedance is set to >10G for the 100 mV, 1 V, and 10 V ranges
10M 0
Auto 1
:updatemodechange:

#cmdSetup radio NPLCycles Volt_DC
:write: VOLT:DC:NPLC #;[*OPC]
:read: VOLT:DC:NPLC?
:tip: <html>Set measurement cycle time (integration time) based on Number of Power Line Cycles<br>Higher NPLC is higher resolution, but longer measurement time (slower)
100PLC 100
10PLC 10
1PLC 1
0.2PLC 0.2
0.02PLC 0.02
:updatemodechange:


; ----- Volt AC -----

#cmdSetup radio Range Volt_AC
:write: VOLT:AC:RANG:AUTO #;[*OPC]
:read: VOLT:AC:RANG:AUTO?
:update: Range_ Volt_AC
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range_ Volt_AC
:write: VOLT:AC:RANG #;[*OPC]
:read: VOLT:AC:RANG?
:update: Range Volt_AC
100mV 0.1
1V 1
10V 10
100V 100
1000V 1000
:updatemodechange:

#cmdSetup separator Range Volt_AC
2 100 Raised

#cmdSetup radio Null_(Offset) Volt_AC
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Volt_AC
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Volt_AC
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Volt -1000 1000
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Volt_AC
2 100 Raised

#cmdSetup radio AC_Filter Volt_AC
:write: DET:BAND #;[*OPC]
:read:  DET:BAND?
:tip: <html>For best accuracy and stable readings,<br>choose a filter based on the lowest frequency to be measured<br>Measuring speed: 3Hz=Slow, 20Hz=Medium. 200Hz=Fast
Slow_3Hz 3
Med_20Hz 20
200Hz 200
:updatemodechange:



; ----- Volt AC dB rel -----

#cmdSetup radio Range Volt_AC_dB_rel
:write: VOLT:AC:RANG:AUTO #;[*OPC]
:read: VOLT:AC:RANG:AUTO?
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Volt_AC_dB_rel
:write: VOLT:AC:RANG #;[*OPC]
:read: VOLT:AC:RANG?
100mV 0.1
1V 1
10V 10
100V 100
1000V 1000
:updatemodechange:

#cmdSetup button Set_0dB_reference Volt_AC_dB_rel
:write: CALC:STAT 0;READ?;[*OPC];CALC:STAT 1;[*OPC];READ?
:tip: Reset 0dB reference to current AC input Voltage
:updatemodechange:

#cmdSetup radio AC_Filter Volt_AC_dB_rel
:write: DET:BAND #;[*OPC]
:read:  DET:BAND?
:tip: <html>For best accuracy and stable readings,<br>choose a filter based on the lowest frequency to be measured<br>Measuring speed: 3Hz=Slow, 20Hz=Medium. 200Hz=Fast
Slow_3Hz 3
Med_20Hz 20
200Hz 200
:updatemodechange:


; ----- Volt AC dBm -----

#cmdSetup radio Range Volt_AC_dBm
:write: VOLT:AC:RANG:AUTO #;[*OPC]
:read: VOLT:AC:RANG:AUTO?
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Volt_AC_dBm
:write: VOLT:AC:RANG #;[*OPC]
:read: VOLT:AC:RANG?
100mV 0.1
1V 1
10V 10
100V 100
1000V 1000
:updatemodechange:

#cmdSetup separator Range Volt_AC_dBm
2 100 Raised

#cmdSetup comboboxhot dBm_Reference Volt_AC_dBm
:write: CALC:DBM:REF #;[*OPC]
:read: CALC:DBM:REF?
:update: Math Volt_DC, Math_Function Volt_AC_dBm
:tip:<html>Set the dBm reference impedance (0dBm=1mW into reference)<br> When set to 1000 Ohm, the read-out will be in dBV (0dBV=1V)
4_Ohm +4.00000000E+00
16_Ohm +1.60000000E+01
50_Ohm +5.00000000E+01
75_Ohm +7.50000000E+01
93_Ohm +9.30000000E+01
100_Ohm +1.00000000E+02
110_Ohm +1.10000000E+02
150_Ohm +1.50000000E+02
300_Ohm +3.00000000E+02
600_Ohm +6.00000000E+02
1000_Ohm +1.00000000E+03
8000_Ohm +8.00000000E+03
:updatemodechange:

#cmdSetup separator Null_Value Volt_AC_dBm
2 100 Raised

#cmdSetup radio AC_Filter Volt_AC_dBm
:write: DET:BAND #;[*OPC]
:read:  DET:BAND?
:tip: <html>For best accuracy and stable readings,<br>choose a filter based on the lowest frequency to be measured<br>Measuring speed: 3Hz=Slow, 20Hz=Medium. 200Hz=Fast
Slow_3Hz 3
Med_20Hz 20
200Hz 200
:updatemodechange:


; ----- Ohm-2W -----

#cmdSetup radio Range Ohm-2W
:read: RES:RANG:AUTO?
:write: RES:RANG:AUTO #;[*OPC]
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Ohm-2W
:write: RES:RANGE #;[*OPC]
:read: RES:RANGE?
10Ohm 10
100Ohm 100
1kOhm 1000
10kOhm 10000
100kOhm 100000
:updatemodechange:

#cmdSetup radio Range Ohm-2W
:write: RES:RANGE #;[*OPC]
:read: RES:RANGE?
1MOhm 1000000
10MOhm 10000000
100MOhm 100000000
1GOhm 1000000000
:updatemodechange:

#cmdSetup separator Range Ohm-2W
2 100 Raised

#cmdSetup radio Null_(Offset) Ohm-2W
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Ohm-2W
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Ohm-2W
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Ohm 0 1000M
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Ohm-2W
2 100 Raised

#cmdSetup radio Analog_Filter Ohm-2W
:write: RES:FILT #;[*OPC]
:read:  RES:FILT?
:tip:<html>A 3-pole analog filter for improving noise immunity<br>May introduce additional offset (most on low NPLC values)<br> If so, the DMM must first be Zeroed (NULLed) in the used range & NLPC
Off 0
On 1
:updatemodechange:

#cmdSetup radio Auto_Zero Ohm-2W
:write: ZERO:AUTO #;[*OPC]
:read: ZERO:AUTO?
:tip:<html>Activates (default) or deactivates the AutoZero mode<br>ONCE: initiates a zero measurement immediately
Off 0
On 1
Once ONCE
:updatemodechange:

#cmdSetup radio NPLCycles Ohm-2W
:write: RES:NPLC #;[*OPC]
:read: RES:NPLC?
:tip: <html>Set measurement cycle time (integration time) based on Number of Power Line Cycles<br>Higher NPLC is higher resolution, but longer measurement time (slower)
100PLC 100
10PLC 10
1PLC 1
0.2PLC 0.2
0.02PLC 0.02
:updatemodechange:


; ----- Ohm-4W -----

#cmdSetup radio Range Ohm-4W
:read: FRES:RANG:AUTO?
:write: FRES:RANG:AUTO #;[*OPC]
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Ohm-4W
:write: FRES:RANGE #;[*OPC]
:read: FRES:RANGE?
10Ohm 10
100Ohm 100
1kOhm 1000
10kOhm 10000
100kOhm 100000
:updatemodechange:

#cmdSetup radio Range Ohm-4W
:write: FRES:RANGE #;[*OPC]
:read: FRES:RANGE?
1MOhm 1000000
10MOhm 10000000
100MOhm 100000000
1GOhm 1000000000
:updatemodechange:

#cmdSetup separator Range Ohm-4W
2 100 Raised

#cmdSetup radio Null_(Offset) Ohm-4W
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Ohm-4W
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Ohm-4W
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Ohm 0 1000M
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Ohm-4W
2 100 Raised

#cmdSetup radio Analog_Filter Ohm-4W
:write: FRES:FILT #;[*OPC]
:read:  FRES:FILT?
:tip:<html>A 3-pole analog filter for improving noise immunity<br>May introduce additional offset (most on low NPLC values)<br> If so, the DMM must first be Zeroed (NULLed) in the used range & NLPC
Off 0
On 1
:updatemodechange:

#cmdSetup radio Auto_Zero Ohm-4W
:write: ZERO:AUTO #;[*OPC]
:read: ZERO:AUTO?
:tip:<html>Activates (default) or deactivates the AutoZero mode<br>ONCE: initiates a zero measurement immediately
Off 0
On 1
Once ONCE
:updatemodechange:

#cmdSetup radio NPLCycles Ohm-4W
:write: FRES:NPLC #;[*OPC]
:read: FRES:NPLC?
:tip: <html>Set measurement cycle time (integration time) based on Number of Power Line Cycles<br>Higher NPLC is higher resolution, but longer measurement time (slower)
100PLC 100
10PLC 10
1PLC 1
0.2PLC 0.2
0.02PLC 0.02
:updatemodechange:


; ----- Amp_DC 400mA -----

#cmdSetup radio Range Amp_DC
:write: CURR:DC:RANG:AUTO #;[*OPC]
:read: CURR:DC:RANG:AUTO?
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Amp_DC
:write: CURR:DC:RANG #;[*OPC]
:read: CURR:DC:RANG?
:tip: Ranges for use with 400mA input terminal
100uA 0.0001
1mA 0.001
10mA 0.01
100mA 0.1
400mA 0.4
:updatemodechange:

#cmdSetup separator Range Amp_DC
2 100 Raised

#cmdSetup radio Null_(Offset) Amp_DC
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Amp_DC
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Amp_DC
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Amp -0.4 0.4
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Amp_DC
2 100 Raised

#cmdSetup radio Analog_Filter Amp_DC
:write: CURR:FILT #;[*OPC]
:read:  CURR:FILT?
:tip:<html>A 3-pole analog filter for improving noise immunity<br>May introduce additional offset (most on low NPLC values)<br> If so, the DMM must first be Zeroed (NULLed) in the used range & NLPC
Off 0
On 1
:updatemodechange:

#cmdSetup radio Auto_Zero Amp_DC
:write: ZERO:AUTO #;[*OPC]
:read: ZERO:AUTO?
:tip:<html>Activates (default) or deactivates the AutoZero mode<br>ONCE: initiates a zero measurement immediately
Off 0
On 1
Once ONCE
:updatemodechange:

#cmdSetup radio NPLCycles Amp_DC
:write: CURR:DC:NPLC #;[*OPC]
:read: CURR:DC:NPLC?
:tip: <html>Set measurement cycle time (integration time) based on Number of Power Line Cycles<br>Higher NPLC is higher resolution, but longer measurement time (slower)
100PLC 100
10PLC 10
1PLC 1
0.2PLC 0.2
0.02PLC 0.02
:updatemodechange:


; ----- Amp_DC 10A -----

#cmdSetup radio Range Amp_DC_10A
:write: CURR:DC:RANG:AUTO #;[*OPC]
:read: CURR:DC:RANG:AUTO?
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Amp_DC_10A
:write: CURR:DC:RANG #;[*OPC]
:read: CURR:DC:RANG?
:tip: Ranges for use with 10A input terminal
1A 1
3A 3
10A 10
:updatemodechange:

#cmdSetup separator Range Amp_DC_10A
2 100 Raised

#cmdSetup radio Null_(Offset) Amp_DC_10A
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Amp_DC_10A
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Amp_DC_10A
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Amp -10 10
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Amp_DC_10A
2 100 Raised

#cmdSetup radio Analog_Filter Amp_DC_10A
:write: CURR:FILT #;[*OPC]
:read:  CURR:FILT?
:tip:<html>A 3-pole analog filter for improving noise immunity<br>May introduce additional offset (most on low NPLC values)<br> If so, the DMM must first be Zeroed (NULLed) in the used range & NLPC
Off 0
On 1
:updatemodechange:

#cmdSetup radio Auto_Zero Amp_DC_10A
:write: ZERO:AUTO #;[*OPC]
:read: ZERO:AUTO?
:tip:<html>Activates (default) or deactivates the AutoZero mode<br>ONCE: initiates a zero measurement immediately
Off 0
On 1
Once ONCE
:updatemodechange:

#cmdSetup radio NPLCycles Amp_DC_10A
:write: CURR:DC:NPLC #;[*OPC]
:read: CURR:DC:NPLC?
:tip: <html>Set measurement cycle time (integration time) based on Number of Power Line Cycles<br>Higher NPLC is higher resolution, but longer measurement time (slower)
100PLC 100
10PLC 10
1PLC 1
0.2PLC 0.2
0.02PLC 0.02
:updatemodechange:


; ----- Amp_AC 400mA -----
#cmdSetup radio Range Amp_AC
:write: CURR:AC:RANG:AUTO #;[*OPC]
:read: CURR:AC:RANG:AUTO?
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Amp_AC
:write: CURR:AC:RANG #;[*OPC]
:read: CURR:AC:RANG?
:tip: Ranges for use with 400mA input terminal
100uA 0.0001
1mA 0.001
10mA 0.01
100mA 0.1
400mA 0.4
:updatemodechange:

#cmdSetup separator Range Amp_AC
2 100 Raised

#cmdSetup radio Null_(Offset) Amp_AC
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Amp_AC
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Amp_AC
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Amp -0.4 0.4
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Amp_AC
2 100 Raised

#cmdSetup radio AC_Filter Amp_AC
:write: DET:BAND #;[*OPC]
:read:  DET:BAND?
:tip: <html>For best accuracy and stable readings,<br>choose a filter based on the lowest frequency to be measured<br>Measuring speed: 3Hz=Slow, 20Hz=Medium. 200Hz=Fast
Slow_3Hz 3
Med_20Hz 20
200Hz 200
:updatemodechange:


; ----- Amp_AC 10A -----

#cmdSetup radio Range Amp_AC_10A
:write: CURR:AC:RANG:AUTO #;[*OPC]
:read: CURR:AC:RANG:AUTO?
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Amp_AC_10A
:visible: MODE?=="CURR:AC_10"
:write: CURR:AC:RANG #;[*OPC]
:read: CURR:AC:RANG?
:tip: Ranges for use with 10A input terminal
1A 1
3A 3
10A 10
:updatemodechange:


#cmdSetup separator Range Amp_AC_10A
2 100 Raised

#cmdSetup radio Null_(Offset) Amp_AC_10A
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Amp_AC_10A
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Amp_AC_10A
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Amp -10 10
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Amp_AC_10A
2 100 Raised

#cmdSetup radio AC_Filter Amp_AC_10A
:write: DET:BAND #;[*OPC]
:read:  DET:BAND?
:tip: <html>For best accuracy and stable readings,<br>choose a filter based on the lowest frequency to be measured<br>Measuring speed: 3Hz=Slow, 20Hz=Medium. 200Hz=Fast
Slow_3Hz 3
Med_20Hz 20
200Hz 200
:updatemodechange:



; ----- Frequency -----

; #cmdSetup radio Range Freq
; :write: FREQ:VOLT:RANG:AUTO #;[*OPC]
; :read: FREQ:VOLT:RANG:AUTO?
; :update: Range Frequency
; Auto 1
; Manual 0
; :updatemodechange:

; #cmdSetup radio Range Freq
; :write: FREQ:VOLT:RANG #;[*OPC]
; :read: FREQ:VOLT:RANG?
; :update: Range_Auto Freq
; 100mV 0.1
; 1V 1
; 10V 10
; 100V 100
; 1000V 1000
; :updatemodechange:

; #cmdSetup separator Range Freq
; 2 100 Raised

#cmdSetup radio Null_(Offset) Freq
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Freq
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Freq
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Hz 0 1.2M
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Freq
2 100 Raised

#cmdSetup radio Gate_Time Freq
:write: FREQ:APER #;[*OPC]
:read: FREQ:APER?
10ms 0.01
100ms 0.1
1s 1
:updatemodechange:


; ----- Period -----

#cmdSetup radio Null_(Offset) Period
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC];READ?;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Period
:tip:<html>Use the present reading as an offset to zero the following readings
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Period
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
sec 0 1
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:

#cmdSetup separator Null_Value Period
2 100 Raised

#cmdSetup radio Gate_Time Period
:write: PER:APER #;[*OPC]
:read: PER:APER?
10ms 0.01
100ms 0.1
1s 1
:updatemodechange:


; ----- Capacitance -----

#cmdSetup radio Range Cap
:read: CAP:RANG:AUTO?
:write: CAP:RANG:AUTO #;[*OPC]
Auto 1
Manual 0
:updatemodechange:

#cmdSetup radio Range Cap
:write: CAP:RANGE #;[*OPC]
:read: CAP:RANGE?
1nF 1E-9
10nF 1E-8
100nF 1E-7
1uF 1E-6
10uF 1E-5
:updatemodechange:

#cmdSetup radio Range Cap
:write: CAP:RANGE #;[*OPC]
:read: CAP:RANGE?
100uF 1E-4
1mF 1E-3
10mF 1E-2
100mF 1E-1
:updatemodechange:

#cmdSetup separator Range Cap
2 100 Raised

#cmdSetup radio Null_(Offset) Cap
:write: CALC:FUNC NULL;CALC:STAT #;[*OPC]
:read:  CALC:STAT?
:update: Null_Value Cap
:tip:<html>Use the present reading as an offset to zero the following readings<br>If no reading is available, use "Current Values" tab to get some
Off 0
On 1
:updatemodechange:

#cmdSetup number Null_Value Cap
:read:  CALC:NULL:OFFS?
:write: CALC:NULL:OFFS #;[*OPC]
Farad 0 100m
:tip:Show offset value / Enter a new value into the offset register
:updatemodechange:




; ------- Mode Selector --------

#cmdSetup selector Mode_settings 
:read: MODE?
:readmath: unQuote(value)
:updatemodechange:
VOLT Volt_DC.
VOLT:AC Volt_AC.
DB Volt_AC_dB_rel.
DBM Volt_AC_dBm.
CURR Amp_DC.
CURR_10A Amp_DC_10A.
CURR:AC Amp_AC.
CURR:AC_10A Amp_AC_10A.
DIOD Diode.
FREQ Freq.
RES Ohm-2W.
FRES Ohm-4W.
CONT Continuity.
PER Period.
VOLT:RAT Ratio.
TEMP Temperature.
CAP Cap.
