UP | HOME

Test Equipment
Hardware, Usage, & Automation Notes

Author: Mitch Richling
Generated: 2026-03-24 13:22:04
Updated: 2026-03-24 12:40:22

Copyright 2026 Mitch Richling. All rights reserved.

This document originally started as a place to keep operational notes about my test equipment. The sort of stuff I found myself looking up while at the bench like DMM resister test current or the IP address I used for my counter. Later I added web links to product information & downloads. After discovering Zotero, I added documentation links to my local laptop's Zotero repository. When I developed mrSCPI I started adding little bits of executable code to the notes for various equipment configurations and measurements.

I decided to publish these notes as a response to requests for mrSCPI examples – the mrSCPI blocks below being ready-made examples! I expect most of the remaining content here isn't very useful to anyone other than myself.

1. Table of Contents

Detailed TOC

Table of Contents

2. SCPI Connected Instruments

2.1. Rohde & Schwarz HMC8043 Power Supply

2.1.3. Local LAN Settings & Addresses (These links only work on my home network)

2.1.4. Notes

2.1.4.1. Back Ports

MSIDhmc8043-BP.png

  • Bottom (Right To Left)
    • 2x8 Rectangular Connector – Wago 713-1108 (non-latching), 713-1108/037-000 (latching), 713-1108/037-9037/033-000 (latching + strain relief plate)
    • 10/100 Base-T Ethernet
    • USB Type B 2.0 Device
  • Center: IEC C14/C13: AC Power Connector

The pinout of the rectangular connector, as viewed from the back:

CH3+ CH3 SENSE+ CH2+ CH2 SENSE+ CH1+ CH1 SENSE+ U+ interface / Trigger I+ interface
CH3- CH3 SENSE- CH2- CH2 SENSE- CH1- CH1 SENSE- U- interface I- interface
2.1.4.2. Remote control notes

This instrument has a very robust SCPI stack. It has never crashed on me from poor network communication or invalid SCPI commands.

Results are always terminated by a single newline character. If a SCPI command line with multiple, semicolon separated commands has a result, then it is returned as a single line with the individual results separated by semicolons.

2.1.5. Remote Control

2.1.5.1. *IDN?
:url @hmc8043
:cmd *IDN?
>>*IDN?>>
Rohde&Schwarz,HMC8043,042973185,HW42000000,SW01.400
2.1.5.2. Default Setup
:url @hmc8043
:result_type nil
:echo false
:delay_after_complete 50
:cmd *RST
2.1.5.3. Set voltage & current for each channel
:url @hmc8043
:result_type nil
:delay_after_complete 200
:cmd :OUTPut:MASTer:STATe OFF
:cmd :INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${avol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${acur}; :OUTPut:CHANnel:STATe ON
:cmd :INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${avol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${acur}; :OUTPut:CHANnel:STATe ON
:cmd :INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${dvol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${dcur}; :OUTPut:CHANnel:STATe ON
:result_type :string
:delay_after_complete 10
:cmd :INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?
:cmd :INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?
:cmd :INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?
>>:OUTPut:MASTer:STATe OFF>>
>>:INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude 15.0; :SOURce:CURRent:LEVel:IMMediate:AMPLitude 0.15; :OUTPut:CHANnel:STATe ON>>
>>:INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude 15.0; :SOURce:CURRent:LEVel:IMMediate:AMPLitude 0.15; :OUTPut:CHANnel:STATe ON>>
>>:INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude 5.0; :SOURce:CURRent:LEVel:IMMediate:AMPLitude 0.07; :OUTPut:CHANnel:STATe ON>>
>>:INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?>>
1.5000E+01;1.5000E-01
>>:INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?>>
1.5000E+01;1.5000E-01
>>:INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?>>
5.000E+00;7.0000E-02
2.1.5.4. Turn on master output

Check the values above to make sure the settings are correct, and then activate the supply output like this:

:url @hmc8043
:result_type nil
:delay_after_complete 50
:cmd :OUTPut:MASTer:STATe ON
:result_type string
:delay_after_complete 10
:cmd :OUTPut:MASTer:STATe?
>>":OUTPut:MASTer:STATe ON\n">>
>>":OUTPut:MASTer:STATe?\n">>
1
2.1.5.5. Check voltage and current

We can check the current voltage and current like so:

:url @hmc8043
:delay_after_complete 10
:read_timeout_next_byte 20
:result_type nil
:cmd :INSTrument:NSELect 1
:result_split :ssv # Note: R&S devices return semicolon seporated values from compound SCPI statements
:result_type :float
:cmd :MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?
:result_type nil # Note: We don't have to turn off split because a nil type means we don't even try and read a result
:cmd :INSTrument:NSELect 2
:result_type :float
:cmd :MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?
:result_type nil
:cmd :INSTrument:NSELect 3
:result_type :float
:cmd :MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?
>>:INSTrument:NSELect 1>>
>>:MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?>>
[0.0, 0.0]
>>:INSTrument:NSELect 2>>
>>:MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?>>
[0.0, 0.0]
>>:INSTrument:NSELect 3>>
>>:MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?>>
[0.0, 0.0]
2.1.5.6. Sequenceing

Here we sequence the thrid channel to come on 90ms after the first two.

:url @hmc8043
:echo false
:result_type nil
:delay_after_complete 200
:cmd :OUTPut:MASTer:STATe OFF
# Set 9V & 08mA on Ch1 & Ch2.  Set 5V @ 60mA on Ch1.
:cmd :INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${avol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${acur};
:cmd :INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${avol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${acur};
:cmd :INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${dvol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${dcur};
# Set Ch1 & Ch2 to start first, and then Ch3 90ms later.
:cmd :SEQuence:STATe OFF
:cmd :INSTrument:NSELect 1; :SEQuence:CHANnel:STATe ON; :SEQuence:DELay ${del1}; :SEQuence:TRIGgered OFF
:cmd :INSTrument:NSELect 2; :SEQuence:CHANnel:STATe ON; :SEQuence:DELay ${del1}; :SEQuence:TRIGgered OFF
:cmd :INSTrument:NSELect 3; :SEQuence:CHANnel:STATe ON; :SEQuence:DELay ${del2}; :SEQuence:TRIGgered OFF
:cmd :SEQuence:STATe ON
# Activate all the channels
:cmd :INSTrument:NSELect 1; :OUTPut:CHANnel:STATe ON
:cmd :INSTrument:NSELect 2; :OUTPut:CHANnel:STATe ON
:cmd :INSTrument:NSELect 3; :OUTPut:CHANnel:STATe ON
# At this point, the master enable needs to be pressed.

2.2. Agilent 33210A Arbitrary Waveform Generator

2.2.3. Local LAN Settings & Addresses (These links only work on my home network)

2.2.4. Notes

2.2.4.1. Performance & Operational Facts
  • Primary Output
    • 50 Ω typical
    • Isolation 42 Vp maximum to earth
    • Short-circuit protected. Overload disables main output.
    • Typical Current
      • 10 Vpp sine wave at 1 kHz into a 0.5 Ω load: 135 mArms
      • 1 Vpp sine wave at 1 kHz into a 0.5 Ω load: 13 mArms
      • Current is a linear function of V between 1 Vpp and 10 Vpp
  • 10 MHz Reference Clock (input/output)
    • Input
      • Lock range: 10 MHz ± 500 Hz;
      • Level: 100 mVpp to 5 Vpp
      • Impedance: 1 kΩ
    • Output
      • Frequency: 10 MHz
      • Level: 632 mVpp
      • Impedance: 50 Ω AC coupled
  • Arb Spec
    • Frequency: 1 mHz to 3 MHz
    • Points: 2 pts to 8 kPts
    • Resolution: 14 bits
    • Sample rate: 50 MSa/s
    • Minimum rise/fall time: 70 ns (vs 20 ns for square & pulse waveforms)
2.2.4.2. Back Ports

MSID33210a-BP.png

  • Right Side Top (4 ports arranged in a square)
    • Top Right: BNC External 10 MHz Reference Input (Option 001)
    • Top Left: BNC External 10 MHz Reference Output (Option 001)
    • Bottom Right: BNC External Modulation Input Terminal
    • Bottom Left: BNC External Trigger Input, Burst Gate Input, or rigger Output
  • Bottom Center Right To Left
    • USB 2.0 Device
    • 10/100 Base-T Ethernet
    • GPIB Interface
  • Left Side Top: IEC C14/C13: AC Power Connector

2.2.5. Remote Control

2.2.5.1. *IDN?
:url @33210a
:cmd *IDN?
>>"*IDN?\n">>
Agilent Technologies,33210A,MY48001014,1.04-1.02-22-2
2.2.5.2. Standard Waveforms

APPLy arguments are frequency, amplitude, and offset:

:url @33210a
:echo false
:result_type nil
:cmd :APPLy:SINusoid 5 KHZ, 3.0 VPP, -1.0V
2.2.5.3. ARB

We use the command DATA for floating point values in the range [-1.0, 1.0].

:url @33210a
:echo false
:result_type nil
# Turn off the output
:cmd :OUTPut OFF
# upload 4 floating point values for the waveform to VOLATILE memory
:cmd :DATA VOLATILE,-1.0,1.0,0.0
# Select the waveform in VOLATILE memory
:cmd :FUNCtion:USER VOLATILE
# Set waveform properties
:cmd :FREQuency 5 kHz
:cmd :VOLTage 3.0 VPP
:cmd :VOLTage:OFFS 0
# Turn on the output
:cmd :OUTPut ON

We use the command DATA:DAC for integer values in the range [-8191, 8191].

:url @33210a
:result_type nil
# Turn off the output
:cmd :OUTPut OFF
# upload 4 (up to 8k supported) integer values for the waveform
:cmd :DATA:DAC VOLATILE,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,8191
# Move the VOLATILE waveform into non-VOLATILE storage.  The system can store 4 non-VOLATILE waveforms.  Names for waveforms may be up to 12 characters.
:cmd :DATA:COPY AN_ARB_NAME
:result_type :string
# List non-VOLATILE waveforms stored.
:cmd :DATA:NVOLatile:CATalog?
:result_type nil
# Select the waveform we just saved
:cmd :FUNCtion:USER AN_ARB_NAME
# Set waveform properties
:cmd :FREQuency 5 kHz
:cmd :VOLTage 3.0 VPP
:cmd :VOLTage:OFFS 0
# Turn on the output
:cmd :OUTPut ON
>>":OUTPut OFF\n">>
>>":DATA:DAC VOLATILE,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,8191\n">>
>>":DATA:COPY AN_ARB_NAME\n">>
>>":DATA:NVOLatile:CATalog?\n">>
"AN_ARB_NAME"
>>":FUNCtion:USER AN_ARB_NAME\n">>
>>":FREQuency 5 kHz\n">>
>>":VOLTage 3.0 VPP\n">>
>>":VOLTage:OFFS 0\n">>
>>":OUTPut ON\n">>

2.3. Keysight 34401A Bench Digital Multimeter

2.3.3. Local LAN Settings & Addresses (These links only work on my home network)

  • Serial over IP access: soip://serial.home.mitchr.me:10001 (DIRECT) or soip://127.0.0.1:9004 (SSH)

2.3.4. Serial Settings (Lantronix console server)

Parameter Setting
Cable crossover (null modem)
Line 1
TCP/IP Port 10001
Serial RS232
Baud 9600
Parity Even
Data Bits 7
Stop Bits 2
Flow Control SOFT
Xon ^Q
Xof ^S

2.3.5. Notes

2.3.5.1. Performance & Operational Facts
  • Voltage Measurement Input Impedance
    • With INPut:IMPedance:AUTO set to OFF (startup default), 10MΩ for all ranges
    • With INPut:IMPedance:AUTO set to ON, 10 Gohm for 100 mVdc, 1 Vdc, and 10 Vdc ranges and 10MΩ for the rest.
  • Front Panel Digits Buttons (Resolution) for DC measurements
Digits Description Integration Time
4 Slow 4 Digit 1 PLC
5 Slow 5 Digit 10 PLC
6 Fast 6 Digit 10 PLC
  • Digits/Resolution for AC measurements
    • Fixed at 6.5 digits
    • Fixed at 5.5 digits for continuity and diode tests
  • AC Current Shunt Resistance: 0.1Ωfor 1A& 3 A. 5Ωfor 10mA and 100mA.
  • AC Bandwidth: 300kHz
  • Resistance Test Current
Range Current
100Ω 1mA
1kΩ 1mA
10kΩ 100μA
100kΩ 10μA
1MΩ 5μA
10MΩ 500nA
100MΩ 500nA
  • Continuity & Diode Test Current: 1mA
  • VM Complete Output: 5V TTL normally high. 2 μs low pulse after the completion of each measurement.
  • External Trigger Terminal: 5V TTL normally high. Trigger measurement via a low pulse with a width greater than 1 μs. This low pulse may be created by shorting the input to ground.
2.3.5.2. Back Ports

MSID34401a-BP.png

  • Right Side (6 ports arranged 3x2 grid mirroring the front banana inputs)
    • Top Right: Banana HI Sense (4W Ω)
    • Top Left: Banana HI Input (V Ω Diode)
    • Middle Right: Banana Sense LO
    • Middle Left: Banana Input LO
    • Bottom Right: Current Fuse
    • Bottom Left: Banana 3A input
  • Bottom Center (Right To Left)
    • BNC VM Complete Output
    • BNC External Trigger
  • Bottom Left (Right To Left)
    • GPIB Interface
    • DB9 Serial Interface
  • Center: Chassis Ground Screw
  • Top (Left of center): IEC C14/C13: AC Power Connector
2.3.5.3. Remote control notes

Results read from this instrument use MS-DOS line ending conventions – i.e. they end with a carriage return and newline (\r\n). For this reason I generally set :result_chomp to true in mrSCPI scripts.

For reliable results over the serial interface, the instrument must be set to "remote" mode before any other commands are issued. When finished, the instrument should be released to "local" mode. Simple, single SCPI command sessions may sometimes be preformed without this mode switching – for example, sending a simple *IDN? command generally works. See: .

I have tested the Prologix Ethernet adapter with this meter's GPIB interface and it works perfectly. That said, I normally use the serial interface.

2.3.5.4. Undocumented
2.3.5.4.1. PEEK & POKE
SCPI Command Function
DIAG:POKE 25,0,<1/0> Enable/Disable 10mA AC range
DIAG:POKE 27,0,<1/0> Enable/Disable 10kHz AC filter
DIAG:POKE 28,0,<1191/0> Enable/Disable standard deviation and peak-to-peak
DIAG:POKE 30,0,<1191/0> Enable/Disable internal and external temperature sensors
DIAG:POKE 31,0,<1191/0> Enable/Disable scale calculations
DIAG:POKE 32,0,<1191/0> Enable/Disable custom conversion apertures
DIAG:POKE 33,0,<1191/0> Enable/Disable state storage and power-on auto-recall
DIAG:POKE 29,0,1 Display original measured values in temperature measurement mode
DIAG:PEEK? -10,1,0 Check feature: Standard deviation and peak-to-peak
DIAG:PEEK? -10,2,0 Check feature: Internal temperature and external temperature sensors
DIAG:PEEK? -10,3,0 Check feature: Scale calculation
DIAG:PEEK? -10,4,0 Check feature: Custom conversion aperture
DIAG:PEEK? -10,5,0 Check feature: state store
DIAG:PEEK? 0,<ADDR>,0 Read RAM byte
DIAG:PEEK? 1,<ADDR>,0 Read RAM word
DIAG:PEEK? 2,<ADDR>,0 Read RAM double word
DIAG:PEEK? 3,<ADDR>,0 Read RAM floating-point
DIAG:PEEK? -1,<ADDR>,0 reads the EEPROM low zone (set) word and returns it in decimal
DIAG:PEEK? -2,<ADDR>,0 reads the EEPROM high zone (calibration) word and returns it in a specific format
DIAG:PEEK? -3,<BLOCK>,0 ROM ref values for specified block
DIAG:PEEK? -4,0,0 reads power line frequency 1=50/400Hz
DIAG:PEEK? -5,0,0 Whether there is a waiting interrupt
DIAG:PEEK? -6,0,0 Read the stack dump from the previous interrupt
DIAG:PEEK? -7,0,0 reads ADC raw data
DIAG:PEEK? -8,0,0 DANGEROUS: [unsecured] enable: ZERO DCV
DIAG:PEEK? -9,0,0 Number of rows in the block table
DIAG:PEEK? -11,0,0 lookup NVRAM data by block using the index to stored address
DIAG:PEEK? -12,0,0 lookup block table in ROM data using index to stored address
DIAG:POKE 34,0,0 DANGEROUS: reset CPU
DIAG:POKE 23,0,0 DANGEROUS: resets calibration count
DIAG:POKE 0,0,0 DANGEROUS: increases the calibration count
DIAG:POKE -2,<ADDR>,<DATA> DANGEROUS: Write RAM bytes
DIAG:POKE -3,<ADDR>,<DATA> DANGEROUS: Write RAM words
DIAG:POKE -4,<ADDR>,<DATA> DANGEROUS: Write RAM floating-point
DIAG:PEEK? -2,<RANGE>,0 Obtain 34401 calibration data

The range numbers for "DIAG:PEEK? -2" are:

Func RANGE values
DCV 75-79
DCI 82-85
OHM 87-92
OHM4 94-99
ACV 104-108

The returned value for "DIAG:PEEK? -2" is: "<coefficient>,<left shift number>,<0>,<front panel offset>,<rear panel offset>".

NVRAM storage is split into numbered blocks. The low part is for safe changes. The high part is for calibration data and can only be written when unsecured.

Example blocks:

BLOCK Description
70 Count gain between T2 ticks and residual on 80C196 AD
71 Non-linear correction coeff1 (quadratic)
73 Non-linear correction coeff2 (cubic)
76 Transform params for DC 1V range (multiplier, shift, NA, offset, ?) must be scaled for line/NPLC
2.3.5.4.2. Features
Standard deviation and peak-to-peak (DIAG:POKE 28)
  • New SCPI Commands:
    CALCulate:AVERage:SDEViation?
    CALCulate:AVERage:PTPeak?
  • New Menu:
    math menu -> min-max: sdev, pp
Internal and external temperature sensors (DIAG:POKE 30)
  • New SCPI Commands:
    CONF:TEMPerature?
    CONF:TEMPerature {TCouple|RTD|FRTD|THERmistor|DEFault},{TC type, or (F)RTD alpha, or Thermistor type},{<range>|MIN|MAX|DEF},{<resolution>|MIN|MAX|DEF}
    Temperature measurement mode/transducer/subtype.
    No query possible.
    Transducer value of DEFault means "last used"
    Range is ignored
    CONF?
    With temperature enabled, this also returns transducer type and subtype in addition to range/resolution (range fixed as "1")
    UNIT:TEMPerature?
    UNIT:TEMPerature {Cel|Far|K}
    SENSe:TEMPerature:TRANsducer:TYPE?
    SENSe:TEMPerature:TRANsducer:TYPE {TCouple|RTD|FRTD|THERmistor|DEFault}
    FRTD is 4W RTD
    RTD is 2W
    DEFault = TC – WARNING: this behaviour is diffrent from CONF:TEMP
    SENSe:TEMPerature:NPLCycles?
    SENSe:TEMPerature:NPLCycles {0.02|0.2|1|10|100|MINimum|MAXimum}
    SENSe:TEMPerature:TRANsducer:TCouple:TYPE?
    SENSe:TEMPerature:TRANsducer:TCouple:TYPE {B|E|J|K|N|R|S|T}
    SENSe:TEMPerature:TRANsducer:TCouple:RJUNction?
    SENSe:TEMPerature:TRANsducer:TCouple:RJUNction {MIN|MAX}
    [SENSe]:TEMPerature:TRANsducer:TCouple:RJUNction?
    [SENSe]:TEMPerature:TRANsducer:TCouple:RJUNction {<temperature>|MIN|MAX}
    Reference junction temperature for TC, -1 to 55C range
    SENSe:TEMPerature:TRANsducer:RTD:TYPE?
    SENSe:TEMPerature:TRANsducer:RTD:TYPE {85|91}
    RTD alpha value, 0.00385 or 0.00391
    SENSe:TEMPerature:TRANsducer:RTD:RESistance:REFerence?
    SENSe:TEMPerature:TRANsducer:RTD:RESistance:REFerence {R0 resistance>|MIN|MAX}
    RTD reference (25C) resistance, 4.9 - 2100 ohm range
    SENSe:TEMPerature:TRANsducer:THERMistor:TYPE?
    SENSe:TEMPerature:TRANsducer:THERMistor:TYPE {2200,5000,10000}
    Thermistor type (in ohms)
    The first two are B=3975. The last is B=3695
    DIAGnostic:TEMPerature?
    Read internal on-chip temperature sensor.
    This causes relay(s) to activate regardless of selected function.
  • New Menu:
    • temp menu
Scale calculations (DIAG:POKE 31)
  • New SCPI Commands:
    CALCulate:FUNCtion SCALe?
    CALCulate:FUNCtion SCALe
    Only one math operation is available at a time. For example min/max can't be used at the same time as SCALE.
    CALCulate:SCALe:GAIN?
    CALCulate:SCALe:GAIN
    CALCulate:SCALe:OFFSet?
    CALCulate:SCALe:OFFSet
  • New Menu:
    • menu -> scale
Custom conversion apertures (DIAG:POKE 32)
  • New SCPI Commands:
    <Measure>:APERture?
    <Measure>:APERture {<Time>|MIN|MAX}
    Without the custom aperture option enabled: Only accepts values which correspont to the standard NPLC settings.
    When the custom aperture option is enabled: Accepts values anywhere in the range of 0.4ms to 2s.
    The NPLC option will not accept "non-standard" values - when set to a non-standard value the next highest standard value will be used instead.
  • New Menu:
    • resolution menu -> custom aperture
State storage and power-on auto-recall (DIAG:POKE 33)
  • New SCPI Commands:
    *RCL 0
    *SAV 0
    MEMory:STATe:RECall:AUTO?
    MEMory:STATe:RECall:AUTO {OFF|0|ON|1}
  • New Menu:
    • system menu -> store state, recall state

2.3.6. Remote Control

2.3.6.1. *IDN?
:url @34401a
:result_chomp true
:cmd *IDN?
>>*IDN?>>
HEWLETT-PACKARD,34401A,0,11-5-2
2.3.6.2. Default Setup
:url @34401a
:result_type nil
:cmd :SYSTem:REMote
:cmd *RST
:cmd *CLS
:cmd :SYSTem:BEEPer:STATe ON
:cmd :CALCulate:DBM:REFerence 600
:cmd :SYSTem:LOCal
2.3.6.3. Query For Errors
:url @34401a
:result_chomp true
:cmd :SYSTem:ERRor?
>>:SYSTem:ERRor?>>
+0,"No error"

Here is an example showing an error

>>:SYSTem:ERRor?>>
-113,"Undefined header"

Note: In mrSCPI we can use :result_split :csv to split this result into components.

2.3.6.4. Serial Remote Control Best Practice

For RS-232 remote control, one must run:

:url bench@34401a
:result_type nil
:cmd :SYSTem:REMote
:cmd :DISPlay:TEXT "Remote" # It's good to display a message when in remote mode so it's easy to notice:

Return to local control by pressing the "shift/local" button on the front panel or running the following SCPI command:

:url bench@34401a
:result_type nil
:cmd :SYSTem:LOCal
2.3.6.5. Measure DC Voltage

Normal accuracy: Read a voltage with high resolution and 10 NPLC.

For more accuracy, bump :SENSe:VOLTage:DC:NPLCycles up to 100, and the :delay_before_first_read up to 3500.

:url @34401a
:result_type nil
:cmd :SYSTem:REMote                        # Only required for rs-232, but no harm over GPIB
:cmd *CLS
:cmd :SENSe:FUNCtion "VOLTage:DC"
:cmd :SENSe:VOLTage:DC:RANGe:AUTO ON
:cmd :INPut:IMPedance:AUTO ON
:cmd :SENSe:VOLTage:DC:RESolution MAXimum
:cmd :SENSe:ZERO:AUTO ON
:cmd :SENSe:VOLTage:DC:NPLCycles 10
:result_chomp true
:result_type :string
:delay_before_first_read 600               # It takes about 600ms for the meter to respond
:read_timeout_first_byte 500
:read_timeout_next_byte 20
:cmd :READ?
:result_type nil
:cmd :SYSTem:LOCal                          # Only required for rs-232, but no harm over GPIB
>>":SYSTem:REMote\n">>
>>"*CLS\n">>
>>":SENSe:FUNCtion \"VOLTage:DC\"\n">>
>>":SENSe:VOLTage:DC:RANGe:AUTO ON\n">>
>>":INPut:IMPedance:AUTO ON\n">>
>>":SENSe:VOLTage:DC:RESolution MAXimum\n">>
>>":SENSe:ZERO:AUTO ON\n">>
>>":SENSe:VOLTage:DC:NPLCycles 10\n">>
>>":READ?\n">>
-2.87309150E-02
>>":SYSTem:LOCal\n">>
2.3.6.6. Measure AC Voltage

For AC voltage, we should be carefull about setting the bandwidth.

:url @34401a
:result_type nil
:cmd :SYSTem:REMote                        # Only required for rs-232, but no harm over GPIB
:cmd *CLS
:cmd :SENSe:FUNCtion "VOLTage:AC"
:cmd :SENSe:VOLTage:AC:RANGe:AUTO ON
:cmd :SENSe:DETector:BANDwidth 200         # Typical values are 3, 20, & 200
:cmd :SENSe:VOLTage:AC:RESolution MAXimum
:result_chomp true
:result_type :string
:delay_before_first_read 1000               # 1000 for BANDwidth of 200, 1300 for BW of 10, 700 for BW of 3 TODO?????
:read_timeout_first_byte 500
:read_timeout_next_byte 20
:cmd :READ?
:result_type nil
:cmd :SYSTem:LOCal                          # Only required for rs-232, but no harm over GPIB
>>":SYSTem:REMote\n">>
>>"*CLS\n">>
>>":SENSe:FUNCtion \"VOLTage:AC\"\n">>
>>":SENSe:VOLTage:AC:RANGe:AUTO ON\n">>
>>":SENSe:DETector:BANDwidth 200\n">>
>>":SENSe:VOLTage:AC:RESolution MAXimum\n">>
>>":READ?\n">>
+1.15295240E-02
>>":SYSTem:LOCal\n">>
2.3.6.7. Measure Frequency
:url @34401a
:result_type nil
:cmd :SYSTem:REMote                          # Only required for rs-232, but no harm over GPIB
:cmd *CLS
:cmd :SENSe:FUNCtion "FREQuency"
:cmd :SENSe:FREQuency:APERture 1             # Use 1, 0.1, or 0.01
:cmd :SENSe:FREQuency:VOLTage:RANGe:AUTO ON
:result_chomp true
:result_type :string
:delay_before_first_read 2000                # 2000 for APERture of 1, 1000 for 0.1 & 0.01
:read_timeout_first_byte 500
:read_timeout_next_byte 20
:cmd :READ?
:result_type nil
:cmd :SYSTem:LOCal                           # Only required for rs-232, but no harm over GPIB
>>":SYSTem:REMote\n">>
>>"*CLS\n">>
>>":SENSe:FUNCtion \"FREQuency\"\n">>
>>":SENSe:FREQuency:APERture 1\n">>
>>":SENSe:FREQuency:VOLTage:RANGe:AUTO ON\n">>
>>":READ?\n">>
+2.15933960E+02
>>":SYSTem:LOCal\n">>
2.3.6.8. Measure Period
:url @34401a
:result_type nil
:cmd :SYSTem:REMote                          # Only required for rs-232, but no harm over GPIB
:cmd *CLS
:cmd :SENSe:FUNCtion "PERiod"
:cmd :SENSe:PERiod:APERture 1                # Use 1, 0.1, or 0.01
:cmd :SENSe:PERiod:VOLTage:RANGe:AUTO ON
:result_chomp true
:result_type :string
:delay_before_first_read 2000                # 2000 for APERture of 1, 1000 for 0.1 & 0.001
:read_timeout_first_byte 1000
:read_timeout_next_byte 20
:cmd :READ?
:result_type nil
:cmd :SYSTem:LOCal                            # Only required for rs-232, but no harm over GPIB
>>:SYSTem:REMote>>
>>*CLS>>
>>:SENSe:FUNCtion "PERiod">>
>>:SENSe:PERiod:APERture 1>>
>>:SENSe:PERiod:VOLTage:RANGe:AUTO ON>>
>>:READ?>>
+4.99999720E-03
>>SYSTem:LOCal>>

2.4. HP 53131A Counter

2.4.3. Local LAN Settings & Addresses (These links only work on my home network)

  • GPIB adapter host name & port: gpib-rover.home.mitchr.me :1234

2.4.4. Notes

2.4.4.1. Performance & Operational Facts
  • Channel 1-3 Input Characteristics
    • 50 ohm OR 1MΩ + 30pF
    • Damage level 5 Vrms
  • External Time Base Input
    • Voltage Range: 200 mVrms to 10 Vrms
    • Damage Level: 10Vrms
    • Impedance: 1kΩ + 23pF
  • Time base output
    • Voltage > 1 Vpp into 50Ω (centered around 0V)
2.4.4.2. Back Ports

MSID53131a-BP.png

  • Bottom Right To Left
    • BNC External Arm Trigger
    • BNC External 10 MHz Reference Input
    • BNC External 10 MHz Reference Output
    • GPIB Interface (near center)
    • RS232 Output
  • Center: IEC C14/C13: AC Power Connector
2.4.4.3. Quirks

When it's plugged in, it consume power and runs the fan. Presumably this is to keep a fancy OCXO warmed up and ready for when the unit is needed. At least the fan is pretty quiet. Still, I don't have a fancy oscillator option installed in my unit making the fan wear and tear a waste. My solution is an IEC C14 to IEC C13 power cable with an inline switch.

2.4.4.4. Remote control notes

The RS-232 interface is "talk-only" – i.e. for logging, printing, or limit-detect output. It can not be used for SCPI control.

A Prologix Ethernet to GPIB adapter works well with this device. I have one of these adapters semi-permanently attached.

2.4.5. Remote Control

2.4.5.1. *IDN?
:url @53131a
:cmd *IDN?
>>*IDN?>>
HEWLETT-PACKARD,53131A,0,3703
2.4.5.2. Default Setup & Measure Frequency
:url @53131a
:result_type nil
:cmd *RST                              # Reset the counter
:cmd *CLS                              # Clear event registers and error queue
:cmd *SRE 0                            # Clear service request enable register
:cmd *ESE 0                            # Clear event status enable register
:cmd :STATus:PRESet                    # Preset enable registers and transition filters for operation and questionable status structures
:cmd :SENSe:FUNCion 'FREQuency 1'      # Measure frequency on channel 1
:cmd :SENSe:EVENt1:LEVel:ABSolute 0.0  # Set trigger level 
:cmd :INITiate:IMMediate               # Trigger a measurement
:result_type :float
:cmd :FETCh:SCALar:VOLTage:FREQuency?  # Pull the frequency
:cmd :FETCh:SCALar:VOLTage:PERiod?     # Pull the period

>>*RST>>
>>*CLS>>
>>*SRE 0>>
>>*ESE 0>>
>>:STATus:PRESet>>
>>:SENSe:FUNCion 'FREQuency 1'>>
>>:SENSe:EVENt1:LEVel:ABSolute 0.0>>
>>:INITiate:IMMediate>>
>>:FETCh:SCALar:VOLTage:FREQuency?>>
1000.000419
>>:FETCh:SCALar:VOLTage:PERiod?>>
0.000999999581

2.5. Keithley DMM6500 Bench Digital Multimeter

2.5.3. Local LAN Settings & Addresses (These links only work on my home network)

2.5.4. Notes

2.5.4.1. Performance & Operational Facts
  • Voltage Measurement Input Impedance
    • 100 mV to 10V Ranges: Selectable: (>10GΩ or 10MΩ ±1%) in parallel with <400pF.
    • 100V to 1000V Ranges: 10MΩ ±1% in parallel with <400pF
  • Current Shunt Resistance:
Range Resistance
10μA 10kΩ
100μA 1kΩ
1mA 100Ω
10mA 10Ω
100mA
1A 100mΩ
3A 100mΩ
10A 5mΩ
  • AC Bandwidth: 300kHz
  • Resistance Test Current
Range Current
10mA
10Ω 10mA
100Ω 1mA
1kΩ 1mA
10kΩ 100μA
100kΩ 10μA
1MΩ 10μA
10MΩ 700nA
100MΩ 700nA
  • Continuity Test Current: 1mA @ 9.2V
  • Diode Test (bias) Current (selectable):
Bias Current Test Voltage
10μA 12V
100μA 10V
1mA 7V
10mA 7V
  • Capacitance Test Current:
Range Charge Current
1nF 1μA
10nF 10μA
100nF 100μA
1µF 100μA
10µF 1mA
100µF 1mA
2.5.4.2. Back Ports

MSIDdmm6500-BP.png

  • Right Side Bottom (6 ports arranged 2x3 grid mirroring the front banana inputs rotated clockwise 90 degrees)
    • Top Right: Banana 10A
    • Top Middle: Banana LO Sense
    • Top Left: Banana HI Sense (4W Ω)
    • Bottom Right: Fuse
    • Bottom Middle: Banana LO Input
    • Bottom Left: Banana HI Input
  • Top Left (Right To Left)
    • 10/100 Base-T Ethernet
    • BNC External Trigger IN
    • BNC External Trigger OUT
    • USB Type B 2.0 Device
  • Bottom Left (Right To Left)
    • GPIB Interface
    • DB9 Serial Interface
  • Center: Chassis Ground Screw
  • Bottom Left: IEC C14/C13: AC Power Connector

2.5.5. Remote Control

2.5.5.1. *IDN?
:url @dmm6500
:cmd *idn?
>>*idn?>>
KEITHLEY INSTRUMENTS,MODEL DMM6500,04467350,1.7.12b
2.5.5.2. High accruacy DCV Measurement (10V Range)

For this one, we set NPLC 1o 10 with 100 averages – that takes about 17 seconds.

:url @dmm6500
:result_type nil
:cmd *RST
:cmd :SENS:FUNCtion "VOLT:DC"
:cmd :SENSe1:VOLTage:DC:RANGe:UPPer 10
:cmd :SENSe1:VOLTage:DC:INPutimpedance AUTO
:cmd :SENSe1:VOLTage:DC:NPLCycles 10
:cmd :SENSe1:VOLTage:DC:AZERo:STATe ON
:cmd :SENSe1:VOLTage:DC:AVERage:TCONtrol REP
:cmd :SENSe1:VOLTage:DC:AVERage:COUNt 100
:cmd :SENSe1:VOLTage:DC:AVERage:STATe ON
:result_type :string
# It takes 17 seconds to get measurement
:delay_before_first_read 20000
:read_timeout_first_byte 1000
:cmd :READ?
>>*RST>>
>>:SENS:FUNCtion "VOLT:DC">>
>>:SENSe1:VOLTage:DC:RANGe:UPPer 10>>
>>:SENSe1:VOLTage:DC:INPutimpedance AUTO>>
>>:SENSe1:VOLTage:DC:NPLCycles 10>>
>>:SENSe1:VOLTage:DC:AZERo:STATe ON>>
>>:SENSe1:VOLTage:DC:AVERage:TCONtrol REP>>
>>:SENSe1:VOLTage:DC:AVERage:COUNt 100>>
>>:SENSe1:VOLTage:DC:AVERage:STATe ON>>
>>:READ?>>
1.000837E+00

2.6. Rigol DHO4204 High Resolution Digital Oscilloscope

2.6.3. Local LAN Settings & Addresses (These links only work on my home network)

2.6.4. Notes

2.6.4.1. Performance & Operational Facts
  • Trigger Input
    • Sensitivity: 200 mVpp from DC-100 MHz, and 500 mVpp from 100 MHz - 200 MHz
    • Input Impedance: 1 MΩ
    • Voltage Limit: ±5 V
    • Bandwidth: 200 MHz
    • Jitter: <1 nsrms
  • 10 MHz Reference Clock (input/output mode)
    • Input Mode: 50 Ω impedance with the amplitude 130 mVpp to 4.1 Vpp at 10 MHz ± 10 ppm
    • Output Mode: 50 Ω impedance with a 1.5 Vpp sine waveform
  • Trigger & Pass/Fail output:
    • High: ≥ 2.5 V open circuit; ≥ 1.0 V 50 Ω to GND
    • Low: ≤ 0.7 V to load ≤ 4 mA; ≤ 0.25 V 50 Ω to GND
    • Pulse polarity and width are user selectable. Rise Time is ≤ 1.5 ns
2.6.4.2. Sampleing Modes
Single Channel
Only one channel is turned on.
  • Max sample rate: 4 GSa/s
  • Max record length: 500 Mpts
Half Channel
Two channels are turned on.
  • Max sample rate: 2 GSa/s
  • Max record length: 250 Mpts
All Channel
Three or four channels are turned on.
  • Max sample rate: 1 GSa/s
  • Max record length: 125 Mpts
  • Maximum analog bandwidth is only 400MHz.
2.6.4.3. Back Ports

MSIDdho4204-BP.png

  • Back
    • Right Side Top To Bottom
      • BNC 10 MHz Reference Clock Output
      • BNC 10 MHz Reference Clock Input
      • BNC External Trigger Input
      • BNC Trigger Output
    • Left Side Top To Bottom
      • HDMI output
      • USB 3.0 Device
      • 10/100/1000 Base-T Ethrenet
      • IEC C14/C13: AC Power Connector
2.6.4.4. Undocumented: Test mode

"Test mode" is enabled via 3 taps on "About" under "Utility".

  • Enables "Advanced Settings" in XY dialog.
  • Utility -> Debug (new menu)
    • XY: This dialog is the same one that is available from other locations in the UI (like the hamburger menu on XY-windows).
    • DDR: Text in Chinese (address, length, name, file path, load). duno what this is for
    • ADC Clock: duno what this is for
    • ADC Ser: For each ADC channel, TCMP 0 to 4, TDMX on or off, "save" button
    • Logcat: logging with a filter textbox. The buttons, labeled in Chinese, are "refresh" and "save" on the right.
  • Utility -> SelfCal
    • Adds a checkbox selection of what things to calibrate
    • Adds Default, User, & Export option buttons at the bottom
  • Utility -> Other
    • HDMI resolution can be adjusted
    • DSP option (on/off) – duno what this is for.
  • Utility -> About
    • Adds more information

2.6.5. Remote Control

2.6.5.1. *IDN?
:url @dho4204
:cmd *idn?
>>*idn?>>
RIGOL TECHNOLOGIES,DHO4204,HDO4A244801592,00.02.14
2.6.5.2. Screenshot

The :DISPlay:DATA? TYPE command returns a screenshot (TYPE is PNG, JPG, or BMP). The return is wrapped with a TMC header, and the binary payload is followed by a terminator.

:url @dho4204
:result_macro_block true
# For mrSCPI "scripts", :print_cmd and :print_result are set to true.
:print_cmd false
:out_file screenshot.png
:cmd :DISPlay:DATA? PNG

screenshot-dho4k.png

2.6.5.3. Two sinusoidal waveforms
:url  @dho4204
# Setup the measurements
:print_cmd false
:verbose 1
:result_type nil
:cmd :MEASure:CLEar
:cmd :MEASure:AMSource OFF
:cmd :MEASure:ITEM RRPHase,${chan1},${chan2}
:cmd :MEASure:ITEM VRMS,${chan1}
:cmd :MEASure:ITEM VRMS,${chan2}
:cmd :MEASure:ITEM FREQuency,${chan1}
:cmd :MEASure:ITEM FREQuency,${chan2}
:cmd :MEASure:STATistic:COUNt 50
# Wait 3 seconds after we reset the stats before we measure things
:delay_after_complete 3000
:cmd :MEASure:STATistic:RESet
:delay_after_complete 0
:print_cmd true
:result_type :string
:read_timeout_next_byte 10
:delay_before_first_read 10
:delay_after_complete 0
:read_retry_delay 100
:cmd :MEASure:STATistic:ITEM? CNT,RRPHase,${chan1},${chan2}
:cmd :MEASure:STATistic:ITEM? AVERages,RRPHase,${chan1},${chan2}
:cmd :MEASure:STATistic:ITEM? AVERages,VRMS,${chan1}
:cmd :MEASure:STATistic:ITEM? AVERages,VRMS,${chan2}
:cmd :MEASure:STATistic:ITEM? AVERages,FREQuency,${chan1}
:cmd :MEASure:STATistic:ITEM? AVERages,FREQuency,${chan2}
>>:MEASure:STATistic:ITEM? CNT,RRPHase,CHANnel1,CHANnel2>>
5.000E+01
>>:MEASure:STATistic:ITEM? AVERages,RRPHase,CHANnel1,CHANnel2>>
3.350E+01
>>:MEASure:STATistic:ITEM? AVERages,VRMS,CHANnel1>>
6.974E-01
>>:MEASure:STATistic:ITEM? AVERages,VRMS,CHANnel2>>
5.753E-01
>>:MEASure:STATistic:ITEM? AVERages,FREQuency,CHANnel1>>
5.000E+03
>>:MEASure:STATistic:ITEM? AVERages,FREQuency,CHANnel2>>
4.999E+03

2.7. Siglent SDS2504X Plus Super Phosphor Oscilloscope

2.7.3. Local LAN Settings & Addresses (These links only work on my home network)

2.7.4. Notes

2.7.4.1. Performance & Operational Facts
  • Triger Inputs
    • Sensitivity
      • EXT: 200 mVpp for DC-10 MHz, and 300 mVpp for 10 MHz - 300 MHz
      • EXT/5: 1 Vpp for DC-10 MHz, and 1.5 Vpp for 10 MHz - 300 MHz
    • Level
      • EXT: ±0.61 V
      • EXT/5: ±3.05 V
    • Voltage Limits
      • Ext: ≤ 1.5 Vrms
      • EXT/5: ≤ 7.5 Vrms
  • Analog Output
    • Triger: 3.3 V LVCMOS (Hi: 2.4 V, Low: 0.4 V)
    • PASS/FAIL: 3.3 V TTL (Hi: 2.4 V, Low: 0.4 V)
    • Probe compensation: 3 Vpp square wave at 1 kHz
  • C1-C2 Max Voltage
    • 1 MΩ: ≤ 400 Vpk (DC+AC), DC-10 kHz
    • 50 Ω: ≤ 5 Vrms, ±10 V Peak
  • C1-C2 frequency responce at 50 Ω in single-channel mode
    • Bandwidth: 500 MHz
    • Risetime: 800 ps
2.7.4.2. Back Ports

MSIDsds2504xp-BP.png

  • Right Side Top (4 ports arranged in a square)
    • Top Right: BNC Auxilaury Output (Trigger (default) or pass/fail)
    • Top Left: BNC External Trigger Input
    • Bottom Right USB 2.0 Device
    • Bottom Left: 10/100 Base-T Ethrenet
  • Right Side Bottom: IEC C14/C13: AC Power Connector
2.7.4.3. Sampleing Modes
Single-channel mode (interleaving mode)
Only one of C1/C2 is turned on, and only one of C3/C4 is turned on.
  • Max sample rate: 2 GSa/s
  • Max record length: 200M
Dual-channel mode (non-interleaving mode)
Both C1/C2 are turned on, or both C3/C4 are turned on.
  • Max sample rate: 1 GSa/s
  • Max record length: 100M
  • If channel bandwidth is set to 350MHz on a 500MHz scope, the anti-aliasing filter with bandwidth of 350MHz is automatically turned on.
2.7.4.4. Record Length & Memory Management

Vocabulary:

Acquisition memory
All of the scope's memory used for trace storage. Size is measured in terms of samples.
Record
A single capture associated with a trigger event. Size is measured in terms of samples.
Sequence Mode
Acquisition memory contains multiple records. These records generally have time gaps (dead space) between them.
Continuous Capture
Acquisition memory contains a single record.

SDS2000X+ record length is fixed (not user adjustable) to the screen width, and the scope operates in segmented memory mode by default. In this mode the scope displays one record width of data on screen and automatically stores as many records (available to view via the "history" button) as will fit in acquisition memory.

Many scopes allow the record length to be larger than the screen size, and provide a way to scroll the screen around to view these longer records. This is usually achieved in the UI with a small (just a few pixels tall) schematic of the record at the top or bottom of the screen with a little box indicating the part of the record currently being displayed.

Sequence mode can usually meet my needs for off screen data. That said, the dead space gaps between records can miss fast waveform features. In addition, smoothly scrolling in time can be more natural than flipping through the records for some waveforms. In these cases the solution provided by the SDS2000X+ is to simply expand the time base (and thus the record length) to include the data in question and then hit the "zoom" key to see the details.

Time Base Time Base Screen Width Max Record Length @2Gs Max Signal Frequency
2e-10 200ps/div 2ns 4 pt 500MHz
5e-10 500ps/div 5ns 10 pt 200MHz
1e-09 1ns/div 10ns 20 pt 100MHz
2e-09 2ns/div 20ns 40 pt 50MHz
5e-09 5ns/div 50ns 100 pt 20MHz
1e-08 10ns/div 100ns 200 pt 10MHz
2e-08 20ns/div 200ns 400 pt 5MHz
5e-08 50ns/div 500ns 1 Kpt 2MHz
1e-07 100ns/div 1us 2 Kpt 1MHz
2e-07 200ns/div 2us 4 Kpt 500kHz
5e-07 500ns/div 5us 10 Kpt 200kHz
1e-06 1us/div 10us 20 Kpt 100kHz
2e-06 2us/div 20us 40 Kpt 50kHz
5e-06 5us/div 50us 100 Kpt 20kHz
1e-05 10us/div 100us 200 Kpt 10kHz
2e-05 20us/div 200us 400 Kpt 5kHz
5e-05 50us/div 500us 1 Mpt 2kHz
1e-04 100us/div 1ms 2 Mpt 1kHz
2e-04 200us/div 2ms 4 Mpt 500 Hz
5e-04 500us/div 5ms 10 Mpt 200 Hz
1e-03 1ms/div 10ms 20 Mpt 100 Hz
2e-03 2ms/div 20ms 40 Mpt 50 Hz
5e-03 5ms/div 50ms 100 Mpt 20 Hz
1e-02 10ms/div 100ms 200 Mpt 10 Hz
2e-02 20ms/div 200ms 400 Mpt 5 Hz
5e-02 50ms/div 500ms 1 Gpt 2 Hz
1e-01 100ms/div 1s 2 Gpt 1 Hz

2.7.5. VNC Movie

Put vnc viewer at upper left of screen – if using RealVNC set the autoscale to "off", and drag to left of the screen, hit escape to get out of the "select second window" bit, and it will put it at the top left. On windows the border is 36px. Capture with VLC via the media capture device "display". The advanced options should be something like this:

:screen-fps=12.000000 :live-caching=300 :screen-left=265 :screen-top=75 :screen-width=490 :screen-height=490 :stop-time=30.000

Set fps to whatever works for the application (5fps is good for a rotating Lorenz demonstration).

2.7.6. Remote Control

2.7.6.1. *IDN?
:url @sds2504xp
:cmd *idn?
>>*idn?>>
Siglent Technologies,SDS2504X Plus,SDS2PCBX4R0395,5.4.0.1.6.2
2.7.6.2. Simple AWG Use
:url @sds2504xp
:echo false
:result_type nil
# Turn off output:
:cmd :C1:OUTPut OFF
# Set waveform type (SINE, SQUARE, RAMP, PULSE, NOISE, ARB, DC, PRBS, IQ)
:cmd :C1:BaSic_WaVe WVTP,SQUARE
# Set frequency
:cmd :C1:BaSic_WaVe FRQ,30000
# Set Vpp:
:cmd :C1:BaSic_WaVe AMP,1.5
# Set offset
:cmd :C1:BaSic_WaVe OFST,0.2
# Turn on output:
:cmd :C1:OUTPut ON
2.7.6.3. Two sinusoidal waveforms
:url @sds2504xp
# Setup the measurements
:print_cmd false
:verbose 1
:result_type nil
:cmd :MEASure ON
:cmd :MEASure:MODE ADVanced
:cmd :MEASure:ADVanced:LINenumber 5
:cmd :MEASure:ADVanced:P1 ON; :MEASure:ADVanced:P1:SOURce1 ${chan1}; :MEASure:ADVanced:P1:SOURce2 ${chan2}; :MEASure:ADVanced:P1:TYPE PHA
:cmd :MEASure:ADVanced:P2 ON; :MEASure:ADVanced:P2:SOURce1 ${chan1}; :MEASure:ADVanced:P2:TYPE CRMS
:cmd :MEASure:ADVanced:P3 ON; :MEASure:ADVanced:P3:SOURce1 ${chan2}; :MEASure:ADVanced:P3:TYPE CRMS
:cmd :MEASure:ADVanced:P4 ON; :MEASure:ADVanced:P4:SOURce1 ${chan1}; :MEASure:ADVanced:P4:TYPE FREQ
:cmd :MEASure:ADVanced:P5 ON; :MEASure:ADVanced:P5:SOURce1 ${chan2}; :MEASure:ADVanced:P5:TYPE FREQ
# Now we verify everything is set, and pull the current measurement
:print_cmd true
:result_type :string
:read_timeout_next_byte 10
:delay_before_first_read 10
:delay_after_complete 0
:read_retry_delay 100
:cmd :MEASure?; :MEASure:MODE?; :MEASure:ADVanced:LINenumber?
:cmd :MEASure:ADVanced:P1?; :MEASure:ADVanced:P1:SOURce1?; :MEASure:ADVanced:P1:SOURce2?; :MEASure:ADVanced:P1:TYPE?; :MEASure:ADVanced:P1:VALue?
:cmd :MEASure:ADVanced:P2?; :MEASure:ADVanced:P2:SOURce1?; :MEASure:ADVanced:P2:TYPE?; :MEASure:ADVanced:P2:VALue?
:cmd :MEASure:ADVanced:P3?; :MEASure:ADVanced:P3:SOURce1?; :MEASure:ADVanced:P3:TYPE?; :MEASure:ADVanced:P3:VALue?
:cmd :MEASure:ADVanced:P4?; :MEASure:ADVanced:P4:SOURce1?; :MEASure:ADVanced:P4:TYPE?; :MEASure:ADVanced:P4:VALue?
:cmd :MEASure:ADVanced:P5?; :MEASure:ADVanced:P5:SOURce1?; :MEASure:ADVanced:P5:TYPE?; :MEASure:ADVanced:P5:VALue?
>>:MEASure?; :MEASure:MODE?; :MEASure:ADVanced:LINenumber?>>
ON;ADVanced;5
>>:MEASure:ADVanced:P1?; :MEASure:ADVanced:P1:SOURce1?; :MEASure:ADVanced:P1:SOURce2?; :MEASure:ADVanced:P1:TYPE?; :MEASure:ADVanced:P1:VALue?>>
ON;C3;C4;PHA;-5.9131E+01
>>:MEASure:ADVanced:P2?; :MEASure:ADVanced:P2:SOURce1?; :MEASure:ADVanced:P2:TYPE?; :MEASure:ADVanced:P2:VALue?>>
ON;C3;CRMS;1.75569E+01
>>:MEASure:ADVanced:P3?; :MEASure:ADVanced:P3:SOURce1?; :MEASure:ADVanced:P3:TYPE?; :MEASure:ADVanced:P3:VALue?>>
ON;C4;CRMS;1.75451E+01
>>:MEASure:ADVanced:P4?; :MEASure:ADVanced:P4:SOURce1?; :MEASure:ADVanced:P4:TYPE?; :MEASure:ADVanced:P4:VALue?>>
ON;C3;FREQ;9.99931670E+02
>>:MEASure:ADVanced:P5?; :MEASure:ADVanced:P5:SOURce1?; :MEASure:ADVanced:P5:TYPE?; :MEASure:ADVanced:P5:VALue?>>
ON;C4;FREQ;9.99955476E+02

screenshot-sds2k-pha.png

2.7.6.4. Screenshot
:url @sds2504xp
:read_timeout_next_byte 200
:read_timeout_first_byte 2000
:read_retry_delay 1
:echo false
:print_raw_result true
:out_file screenshot-sds2k.png
:cmd :PRINt? PNG

screenshot-sds2k.png

2.8. Tektronix TDS2024 Digital Storage Oscilloscope

2.8.3. Local LAN Settings & Addresses (These links only work on my home network)

  • Serial over IP access: soip://serial.home.mitchr.me:10002 (DIRECT) or soip://127.0.0.1:9017 (SSH)

2.8.4. Serial Settings (Lantronix console server)

Parameter Setting
Cable crossover (null modem)
Line 2
TCP/IP Port 10002
Serial RS232
Baud 19200
Parity Even
Data Bits 8
Stop Bits 2
Flow Control Hardware
Xon ^Q
Xof ^S

2.8.5. *IDN?

:url @tds2024
:cmd *idn?
>>*idn?>>
TEKTRONIX,TDS 2024,0,CF:91.1CT TDS2MEM:FV:v6.08

2.9. Tektronix TDS3052B Digital Phosphor Oscilloscope

2.9.3. Local LAN Settings & Addresses (These links only work on my home network)

  • Host name: oscope-tek.home.mitchr.me
  • Serial over IP access: soip://serial.home.mitchr.me:10003 (DIRECT) or soip://127.0.0.1:9020 (SSH)
  • Device Web Server: http://oscope-tek.home.mitchr.me (DIRECT) or http://127.0.0.1:9021 (SSH)
  • t3k protocal IP access: t3k://oscope-tek.home.mitchr.me:80 (DIRECT) or t3k://127.0.0.1:9018 (SSH)

2.9.4. Notes

2.9.4.1. Back Ports

MSIDtds3052b-BP.png

  • Left (Top To Bottom)
    • 10/100 Base-T Ethernet
    • 15V DC power output
    • Ground terminal
  • Center (Top To Bottom)
    • Communications Module (Left To Right)
      • VGA port
      • RS-232 port
      • GPIB port
    • Parallel printer port
    • IEC C14/C13: AC Power Connector
2.9.4.2. Remote control notes

This scope has serial, GPIB, & ethernet interfaces. The serial and GPIB interfaces are provided by a TDS3GV add-on board. Via ethernet the instrument provides a web interface and LXI for SCPI; however, it doesn't provide a raw sockets interface for SCPI. I find the lack of support for raw sockets a truly baffling omission.

The web interface provides some cool features:

  • An HTML form accepting SCPI commands and returning the result. The form doesn't support binary data or semicolon separated SCPI commands. The lack of binary data support isn't necessarly an issue for waveform data because the record length of this scope is so short that using ASCII mode for the transfer is more than acceptable. See: SCPI via HTTP.
  • A static link for a screen shot in PNG format. See: grab a screenshot via HTTP.
  • An HTML form that can produce a CSV, with both time & voltage, for any channel. See: grab a waveform via HTTP

The mrSCPI.rb script supports a protocol named "t3k" which actually uses the SCPI web form to facilitate SCPI control. This is my primary method of running SCPI commands on this scope. As for the other interfaces, I have tested them:

  • The Prologix Ethernet adapter via the scope's GPIB interface works perfectly.
  • A Lantronix serial console works well with the scope's RS-232 interface.

2.9.5. Serial Settings (Lantronix console server)

Parameter Setting
Cable crossover (null modem)
Line 3
TCP/IP Port 10003
Serial RS232
Baud 38400
Parity None
Data Bits 8
Stop Bits 1
Flow Control Hardware
Xon ^Q
Xof ^S

2.9.6. View scope VGA output via video capture device on bench-pi

  • Start up vlc:
    • Open capture device
      • Webcam
      • /dev/video0
    • Advanced options
      • Width 640
      • Height 480
      • Framerate 24 to 60

To crop just to waveform part of display: top: 17, bot: 57, left: 19, right: 57

2.9.7. Web Interface

2.9.7.1. Grab screen from web interface with curl
curl -s `teAlias.rb @tds3052bw`"/Image.png" > screencap-tek3k.png

screencap-tek3k.png

2.9.7.2. SCPI command from web interface with curl
curl -s -H 'Content-Type: text/plain' -d 'COMMAND=*IDN?' -X POST "`./my_prog/teAlias.rb @tds3052bw`/Comm.html" | sed 's/^.*name">//; s/<\/TEXTAREA.*$/\n/;'
TEKTRONIX,TDS 3052B,0,CF:91.1CT FV:v3.41 TDS3FFT:v1.00 TDS3TRG:v1.00
2.9.7.3. Capture an analog waveform CSV from web interface with curl

TODO: Verify command. Check preamble bit. Add link to script.

Grab a waveform. Note that you can grab a waveform via SCPI too.

curl -i -H 'Content-Type: text/plain' -d 'command=select:ch1 on' -d 'command=save:waveform:fileformat spreadsheet' -d 'wfmsend=Get' -X POST "`teAlias.rb @tds3052bw`/getwfm.isf" > waveform.txt

Valid channels are: CH1, CH2, MATH, MATH1, REF1, & REF2.

The file waveform.txt will contain a preamble that needs to be deleted:

tail -n +11 waveform.txt | waveform.csv

2.9.8. Remote Control

2.9.8.1. *IDN?
:url @tds3052b
:cmd *idn?
>>*idn?>>
TEKTRONIX,TDS 3052B,0,CF:91.1CT FV:v3.41 TDS3FFT:v1.00 TDS3TRG:v1.00
2.9.8.2. Setup the serial interface

If the serial interface somehow got setup funny, we can set it up via the web interface with mrSCPI.rb:

:url @tds3052b
:echo false
:result_type nil
:cmd :RS232:BAUd 38400
:cmd :RS232:HARDFlagging ON
:result_type :string
:cmd :RS232?
2.9.8.3. Capture an analog waveform

TODO: Add link to script. Test this. Check -m 3000 arg.

Note that you can grab a waveform via HTTP too.

Possible channels: CH1, CH2, REFA, REFB, MATH

:url @3052
:echo false
:result_type nil
:cmd :DATa:SOUrce ${chan}; :DATa:ENCdg ASCII; :DATa:WIDth 2; :DATa:STARt 1; :DATa:STOP 10000
:result_type :string
:print_raw_result true
:out_file waveform.pre
:cmd :WFMPRe?
:out_file waveform.dat
:cmd :CURVe?

Plot it like so:

tdsRAW2CSV.rb waveform.pre waveform.dat > waveform.csv
printf "set datafile separator ','\nplot 'waveform.csv' using 1:2 with linespoints\npause mouse\n" > waveform.gplt
gnuplot -c waveform.gplt

Plot an 'ENVelope' type waveform – max and min point per time value

tdsRAW2CSV.rb waveform.pre waveform.dat > waveform.csv
printf "set datafile separator ','\nplot 'waveform.csv' using 1:(\$2+\$3)/2:2:3 with yerrorlines, 'waveform.csv' using 1:2 with points, 'waveform.csv' using 1:3 with points\npause mouse\n" > waveform.gplt
gnuplot -c waveform.gplt

Notes:

  • Binary data is not supported via HTTP (-m 3000), so you MUST use 'ASCIi' for the encoding
  • Semicolon separated SCPI commands are not supported
  • The TDS3052B has a 9-bit ADC so width should always be set to 2 bytes.

If we do it over serial or GPIB, then we can use binary and group commands with semicolons.

:url @tds3052bs
:echo false
:result_type nil
:cmd :DATa:SOUrce ${chan}; :DATa:ENCdg RIBinary; :DATa:WIDth 2; :DATa:STARt 1; :DATa:STOP 10000
:result_type :string
:print_raw_result true
:out_file waveform.pre
:cmd :WFMPRe?
:out_file waveform.dat
:cmd :CURVe?
2.9.8.4. Programatically Measure two sinusoidal waveforms

Given two channels, pull the following measurements:

  • Cyclic RMS for both
  • Frequency for both
  • Phase difference between them
:url @tds3052b
:verbose 1
:result_type nil
:cmd :MEASUrement:IMMed:SOUrce1 ${chan1}
:cmd :MEASUrement:IMMed:SOUrce2 ${chan2}
:cmd :MEASUrement:IMMed:TYPe Phase
:result_type :string
:cmd :MEASUrement:IMMed:SOUrce1? # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:SOUrce2? # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:TYPe?    # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:VALue?
:cmd :MEASUrement:IMMed:UNIts?
:result_type nil
:cmd :MEASUrement:IMMed:SOUrce1 ${chan1}
:cmd :MEASUrement:IMMed:TYPe CRMs
:result_type :string
:cmd :MEASUrement:IMMed:SOUrce?  # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:TYPe?    # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:VALue?
:cmd :MEASUrement:IMMed:UNIts?
:result_type nil
:cmd :MEASUrement:IMMed:SOUrce1 ${chan2}
:cmd :MEASUrement:IMMed:TYPe CRMs
:result_type :string
:cmd :MEASUrement:IMMed:SOUrce?  # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:TYPe?    # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:VALue?
:cmd :MEASUrement:IMMed:UNIts?
:result_type nil
:cmd :MEASUrement:IMMed:SOUrce1 ${chan1}
:cmd :MEASUrement:IMMed:TYPe FREQuency
:result_type :string
:cmd :MEASUrement:IMMed:SOUrce?  # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:TYPe?    # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:VALue?
:cmd :MEASUrement:IMMed:UNIts?
:result_type nil
:cmd :MEASUrement:IMMed:SOUrce1 ${chan2}
:cmd :MEASUrement:IMMed:TYPe FREQuency
:result_type :string
:cmd :MEASUrement:IMMed:SOUrce?  # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:TYPe?    # Just to make sure it's set correctly
:cmd :MEASUrement:IMMed:VALue?
:cmd :MEASUrement:IMMed:UNIts?
>>:MEASUrement:IMMed:SOUrce1 CH1>>
>>:MEASUrement:IMMed:SOUrce2 CH2>>
>>:MEASUrement:IMMed:TYPe Phase>>
>>:MEASUrement:IMMed:SOUrce1?>>
CH1
>>:MEASUrement:IMMed:SOUrce2?>>
CH2
>>:MEASUrement:IMMed:TYPe?>>
PHASE
>>:MEASUrement:IMMed:VALue?>>
-5.9603E1
>>:MEASUrement:IMMed:UNIts?>>
"degrees"
>>:MEASUrement:IMMed:SOUrce1 CH1>>
>>:MEASUrement:IMMed:TYPe CRMs>>
>>:MEASUrement:IMMed:SOUrce?>>
CH1
>>:MEASUrement:IMMed:TYPe?>>
CRMS
>>:MEASUrement:IMMed:VALue?>>
1.79E0
>>:MEASUrement:IMMed:UNIts?>>
"V"
>>:MEASUrement:IMMed:SOUrce1 CH2>>
>>:MEASUrement:IMMed:TYPe CRMs>>
>>:MEASUrement:IMMed:SOUrce?>>
CH2
>>:MEASUrement:IMMed:TYPe?>>
CRMS
>>:MEASUrement:IMMed:VALue?>>
1.7757E0
>>:MEASUrement:IMMed:UNIts?>>
"V"
>>:MEASUrement:IMMed:SOUrce1 CH1>>
>>:MEASUrement:IMMed:TYPe FREQuency>>
>>:MEASUrement:IMMed:SOUrce?>>
CH1
>>:MEASUrement:IMMed:TYPe?>>
FREQUENCY
>>:MEASUrement:IMMed:VALue?>>
9.986E2
>>:MEASUrement:IMMed:UNIts?>>
"Hz"
>>:MEASUrement:IMMed:SOUrce1 CH2>>
>>:MEASUrement:IMMed:TYPe FREQuency>>
>>:MEASUrement:IMMed:SOUrce?>>
CH2
>>:MEASUrement:IMMed:TYPe?>>
FREQUENCY
>>:MEASUrement:IMMed:VALue?>>
9.9798E2
>>:MEASUrement:IMMed:UNIts?>>
"Hz"
2.9.8.5. Setup Interactive Measurements for two sinusoidal waveforms

Given two channels, set the system to measure the following:

  • Cyclic RMS for both
  • Frequency for both
  • Phase difference between them
:url @tds3052b
:verbose 1
:result_type nil
:cmd :MEASUrement:MEAS1:SOUrce1 ${chan1}
:cmd :MEASUrement:MEAS1:SOUrce2 ${chan2}
:cmd :MEASUrement:MEAS1:TYPe Phase
:cmd :MEASUrement:MEAS1:STATE ON
:cmd :MEASUrement:MEAS2:SOUrce1 ${chan1}
:cmd :MEASUrement:MEAS2:TYPe CRMs
:cmd :MEASUrement:MEAS2:STATE ON
:cmd :MEASUrement:MEAS3:SOUrce1 ${chan2}
:cmd :MEASUrement:MEAS3:TYPe CRMs
:cmd :MEASUrement:MEAS3:STATE ON
:cmd :MEASUrement:MEAS4:SOUrce1 ${chan1}
:cmd :MEASUrement:MEAS4:TYPe FREQuency
:cmd :MEASUrement:MEAS4:STATE ON
:cmd :MEASUrement:MEAS5:SOUrce1 ${chan2}
:cmd :MEASUrement:MEAS5:TYPe FREQuency
:cmd :MEASUrement:MEAS5:STATE ON
>>:MEASUrement:MEAS1:SOUrce1 CH1>>
>>:MEASUrement:MEAS1:SOUrce2 CH2>>
>>:MEASUrement:MEAS1:TYPe Phase>>
>>:MEASUrement:MEAS1:STATE ON>>
>>:MEASUrement:MEAS2:SOUrce1 CH1>>
>>:MEASUrement:MEAS2:TYPe CRMs>>
>>:MEASUrement:MEAS2:STATE ON>>
>>:MEASUrement:MEAS3:SOUrce1 CH2>>
>>:MEASUrement:MEAS3:TYPe CRMs>>
>>:MEASUrement:MEAS3:STATE ON>>
>>:MEASUrement:MEAS4:SOUrce1 CH1>>
>>:MEASUrement:MEAS4:TYPe FREQuency>>
>>:MEASUrement:MEAS4:STATE ON>>
>>:MEASUrement:MEAS5:SOUrce1 CH2>>
>>:MEASUrement:MEAS5:TYPe FREQuency>>
>>:MEASUrement:MEAS5:STATE ON>>

screencap-tek3k-sin.png

2.10. Rigol DG2052 Function/Arbitrary Waveform Generator

2.10.3. Local LAN Settings & Addresses (These links only work on my home network)

2.10.4. Notes

2.10.4.1. Performance & Operational Facts
  • External Reference Clock Input
    • Impedance ~1kΩ, AC coupling
    • Level 250 mVpp to 5 Vpp
  • Clock Output
    • Level 3.3 Vpp
    • Output Impedance 50 Ohm, AC coupled
  • Counter
    • Damage level 2.5V
    • Input Impedance 1MΩ
  • Sync output and External trigger input/output are TTL (0-5 V)
  • External modulation
    • Input impedance is 1000 Ω.
    • Voltage range: ±5 V
2.10.4.2. Remote control notes

When the DG2052 receives a remote SCPI command it will usually switch into "remote mode" (also called "remote programming command mode"). This mode is indicated on screen by an "S" shaped icon with arrows on the tips. Use the [SHIFT] and [HELP/LOCAL] keys to return the device to "local mode". I don't have a full list of SCPI sequences or conditions that will trigger "remote mode". I have been unable to discover a way to switch the instrument to "local mode" via SCPI.

This device is incredibly delicate when it comes to processing SCPI over TCP/IP. Some SCPI commands take a very long time to execute during which the device becomes unresponsive. Device lockups requiring a physical power cycle are common. Such lockups can occur in response to completely correct SCPI statements, but are usually triggered by incorrect commands. Returns usually are terminated by a single newline character, but malformed return strings appear occasionally. The SCPI documentation is both incomplete and inaccurate.

2.10.4.3. RAF File Format

The format Rigol uses by arbitrary waveform files is known as "RAF". This is one of the file types that the UltraStation software package can produce.

The file format is simple. It is a sequence of 16-bit integer values in little-endian order. The number 0 represents the minimum negative value and 16383 represents the maximum positive value. File can have between 2 points and to 16 Mpts (16,777,216 points).

2.10.5. Remote Control

2.10.5.1. *IDN?
:url @dg2052
:cmd *IDN?
>>*IDN?>>
Rigol Technologies,DG2052,DG2P242400590,00.02.06.00.01 
2.10.5.2. Default Setup
:url @dg2052
:echo false
:result_type nil
:cmd *RST
2.10.5.3. Error Condition Query
:url @dg2052
:cmd :SYSTem:ERRor?
>>:SYSTem:ERRor?>>
0,"No error"
2.10.5.4. Basic Sine Wave

The arguments to :SOURce1:APPLy:SINusoid are frequency, amplitude, offset, and phase.

For example, the following will produce a 2kHz sine wave at 5v peek-peek with a zero offset and phase.

:url @dg2052
:echo false
:result_type nil
:cmd :OUTPut1:STATe OFF
:cmd :SOURce1:APPLy:SINusoid 2000,5,0,0
:cmd :OUTPut1:VOLLimit:STATe OFF
:cmd :OUTPut1:IMPedance INFinity
:cmd :OUTPut1:STATe ON
2.10.5.5. Channel two phase

Before we can set a phase diffrence between channel 1 and 2, we must "synchronize" the channels:

  • Set channel 2 to the same settings as channel 1
  • Make sure both channels have output enabled
  • Execute a SYNChronize command

If we set channel 1 as above, then the following will get us what we want.

:url @dg2052
:echo false
:result_type nil
# Reset the device
:delay_after_complete 100
:cmd *RST
# First we set chan 1
:cmd :SOURce1:APPLy:SINusoid 1000,5,0,0
:cmd :OUTPut1:VOLLimit:STATe OFF
# Next we set chan 2 to the same thing
:cmd :SOURce2:APPLy:SINusoid 1000,5,0,0
:cmd :OUTPut2:VOLLimit:STATe OFF
# Synchronize -- Note the outputs must be on to sync
:delay_after_complete 100
:cmd :OUTPut1:STATe ON
:cmd :OUTPut2:STATe ON
:cmd :SOURce2:PHASe:SYNChronize
:delay_after_complete 10
# Now we can set the phase for chan2
:cmd :SOURce2:APPLy:SINusoid 1000,5,0,60
# Finally we activate the two channels
2.10.5.6. Sweep with frequency marker

One must turn on the sync signal as well set the marker

:url @dg2052
:echo false
:result_type nil
# First set channel 1 to a sinusoid -- the frequncy & phase are irrelevent, but we want to set the voltage & offset to zero
:cmd :SOURce1:APPLy:SINusoid 50000,5,0,0
# Enable the sync output
:cmd :OUTPut1:SYNC:STATe ON
# Enable sweep function
:cmd :SOURce1:SWEep:STATe ON
# Linear sweep
:cmd :SOURce1:SWEep:SPACing LINear
# Set the sweep time to 3 seconds
:cmd :SOURce1:SWEep:TIME 3
# Set the return time of the sweep 0 seconds
:cmd :SOURce1:SWEep:RTIMe 0
# Set the start frequency to 1KHz
:cmd :SOURce1:FREQuency:STARt 1000
# Set the stop frequency to 5KHz
:cmd :SOURce1:FREQuency:STOP 5000
# Set the marker frequency to 3KHz
:cmd :SOURce1:MARKer:FREQuency 3000
:cmd :SOURce1:MARKer:STATe ON
# Set the start hold time of the sweep to 0 seconds
:cmd :SOURce1:SWEep:HTIMe:STARt 0
# Set the stop hold time to 0 seconds
:cmd :SOURce1:SWEep:HTIMe:STOP 0
# Set for manual trigger
:cmd :SOURce1:SWEep:TRIGger:SOURce MANual
# Enable output
:cmd :OUTPut1:STATe ON
# Trigger a sweep (this can be repeated as required)
:cmd :SOURce1:SWEep:TRIGger:IMMediate

3. Virtual Instruments

3.1. Bus Pirate 5

3.1.2. Serial Settings (tio config)

[buspirate5]
device = /dev/buspirate5
baudrate = 115200
databits = 8
parity = none
stopbits = 1
flow = none
map = INLCRNL,ODELBS

3.1.3. Host Computer Configuration

3.2. I2CDriver I2CD Protocol USB Host Adapter + display

3.2.2. Serial Settings (tio config)

[i2cdriver]
device = /dev/i2cdriver
baudrate = 1000000
flow = none
parity = none
databits = 8
stopbits = 1
input-mode = line
local-echo = true

3.2.3. Host Computer Configuration

3.3. SPIDriver SPI Protocol USB Host Adapter + display

3.3.2. Serial Settings (tio config)

[spidriver]
device = /dev/spidriver
baudrate = 460800
flow = none
parity = none
databits = 8
stopbits = 1
input-mode = line
local-echo = true

3.3.3. Host Computer Configuration

3.4. Digilent Analog & Digital Discovery

3.4.1. Waveforms Software   WIP

3.4.1.2. Screenshot

Grab all waveforms windows

~/bin/screenshot_waveforms.sh

Grab a window you click on

import -screen `date +%Y%m%d%H%M%S`_AD2_screenshot.png

3.4.3. Digital Discovery

3.4.3.2. Documentation (These links only work on my personal laptop)

4. ARM Programmers

4.1. Debug Ports

4.1.1. 19-pin connector

  • Keyed rectangular 2x10 1.27mm pitch connector
  • Samtec FTSH-1110-01
  • Supports JTAG debug, Serial-Wire debug, Serial Wire Viewer, and ETM instruction trace operations.
  • Variants with removed pin 7 (keying) can be used as well.
  • Alias: Cortex Debug+ETM Connector
  • Alias: JTAG-19
Table 1: For JTAG/SDO
1 VTref TMS/SWDIO 2
3 GND TCK/SWCLK 4
5 GND TDO/SWO 6
7 -- TDI/NC 8
9 GNDDetect nRESET 10
11 5V-Supply TRACECLK/NC 12
13 5V-Supply TRACEDATA[0]/NC 14
15 GND TRACEDATA[1]/NC 16
17 GND TRACEDATA[2]/NC 18
19 GND TRACEDATA[3]/NC 20

On most boards pin 9 is NC.

4.1.2. 9-pin connector

Essentially the first half of the 19-pin cable – i.e. pins 1-10 all match in both cables.

  • Keyed rectangular 2x5 1.27mm pitch connector
  • Samtec FTSH-105-01
  • Supports JTAG debug, Serial Wire debug and Serial Wire Viewer.
  • Almost the same capabilities of the larger 20-Pin Standard Debug Connector
  • Variants with removed pin 7 (keying) can be used as well.
  • Alias: Cortex Debug Connector
  • Alias: MIPI10
  • Alias: JTAG-9
Table 2: For JTAG/SDO
1 VTref TMS/SWDIO 2
3 GND TCK/SWCLK 4
5 GND TDO/SWO 6
7 -- TDI/NC 8
9 GNDDetect nRESET 10

4.1.3. Standard 20-pin connector

  • Keyed rectangular 2x10 2.54mm pitch connector
  • Samtec TST-110-01-L-D
  • Supports JTAG debug, Serial-Wire debug, and Serial Wire Viewer
  • Alias: ARM Standard JTAG Connector
  • Alias: Legacy 20-pin ARM JTAG Connector
  • Alias: JTAG-20
Table 3: For JTAG/SDO
1 VTref NC 2
3 nTRST/NC GND 4
5 TDI/NC GND 6
7 TMS/SWDIO GND 8
9 TCK/SWCLK GND 10
11 RTCK/NC GND 12
13 TDO/SWO GND 14
15 RESET GND 16
17 DBGRQ/NC GND 18
19 5V-Supply GND 20

4.2. J-Link EDU Mini

4.2.3. Physical Interface

The Target Interface Port on the programmer is a male, 9-pin Cortex Debug Connector.

The target interface cable that came with my unit is a combo ribbon cable with a female JTAG-9 plug at both ends and a female JTAG-19 (with pins 11-20 NC) connected mid-cable.

On most boards nTRST is pulled up and may be left unconnected. On other boards it is floating and must be controlled by the debug probe.

Here is advice from Segger on this:

Should you run into issues setting up a JTAG connection, check the state of the nTRST signal. If it is pulled low either try to pull it high through an external wire manually or route nTRST to pin 9 of the J-Link EDU Mini debug interface. In the 9-pin Cortex-M specification pin 9 is usually defined as NC however in case of the J-Link EDU Mini that pin is used as nTRST instead to be able to connect to boards having that signal routed to their target device.

4.3. STLINK-V3SET

4.3.2. Documentation (These links only work on my personal laptop)

4.3.3. Physical Interface

The Target Interface Port on the programmer is a male, rectangular 2x7, 14-pin with 1.27 mm pitch (Samtec FTSH-107-01-L-DV-K-A):

Table 4: ST-Link 14-pin JTAG/SDO Cable
1 Reserved 2 Reserved
3 T_VCC 4 T_JTMS/T_SWDIO
5 GND 6 T_JCLK/T_SWCLK
7 GND 8 T_JTDO/T_SWO
9 T_JRCLK/NC 10 T_JTDI/NC
11 GNDDetect 12 T_NRST
13 T_VCP_RX 14 T_VCP_TX

This connector has the normal pins for JTAG-9 as pins 3-12 – note pin 9 would be NC for a standard JTAG-9 interface. Pins 13 & 14 provide RX & TX for the "Virtual COM port".

My unit came with three flat cables:

STDC14
Both ends have the female 14-pin connector that matches the programmer port (Samtec FFSD-07-D-05.90-01-N-R)
JTAG-9
Pin 7 is connected to T_JRCLK and pin 9 is GND.
JTAG-19
Pins 7 & 9 are as with MIPI10. Pins 11 to 20 are NC.

The MB1440B adds:

  • SWD: CN6 (2.54 pitch header pin strip).
    • Pins: T_VCC, T_SWCLK, GND, T_SWDIO, T_NRST, T_SWO
    • Note pin numbers are from right to left when viewed from the bottom.
  • JTAG-20: CN2 (standard JTAG-20 rectangular connector)

5. Disconnected Instruments

5.2. Tektronix 2205 Analog Oscilloscope

5.2.2. Documentation (These links only work on my personal laptop)

5.4. B&K Precision 1621A Power Supply

5.4.1. Documentation (These links only work on my personal laptop)

5.5. HIOKI 3030-10 HiTESTER

5.5.2. Documentation (These links only work on my personal laptop)

5.5.3. Notes

5.5.3.1. Performance & Operational Facts
  • The 60μA & 0.3V range are wired right across the meeter, trimmer, & fuse.
  • This is a simple average reading meter
  • DC Voltage Input Impedance (measured)
Range Impedance
600V 12MΩ
300V 6MΩ
120V 2.4MΩ
30V 600kΩ
12V 240kΩ
3V 60kΩ
0.3V 5kΩ
  • Current Shunt Resistance (measured)
Range Resistance
60μA 5kΩ
30mA 12.7Ω
300mA 3.7Ω

5.6. Sanwa EM7000 FET multitester

5.6.2. Documentation (These links only work on my personal laptop)

5.6.3. Notes

5.6.3.1. Performance & Operational Facts
  • This is a p-p measureing meter. i.e. it indicates the value between positive and negative peak values of the input.
    • A 10 μs pulse train at 1 Hz will cause the needle to deflect to halfway between 0 and 1 on the scale where it will visibally oscilate a bit.
  • DC Voltage Input Impedance
Range Impedance
0.3V 2.50MΩ
1.2V 12MΩ
3V 11MΩ
Others 10MΩ
  • DC/AC Voltage Accuracy is about 3% in positive mode, and 7% in plus/minus mode
  • AC Voltage Input Impedance
Range (rms) Range (p-p) Impedance
3V 8.4V 2.50MΩ
12V 33V 1.10MΩ
30V 84V 800kΩ
120V 300V 800kΩ
300V 840V 800kΩ
750V - 10MΩ
  • AC Voltage Bandwidth
    • Accuracy at 50 Hz is around 3%
    • On ranges 12 Vrms and below it is around 5% up to 1 MHz.
    • On 8.4 Vpp range for symmetric square/triangle waves it is 4% up to 100 kHz.
    • Observation: On 8.4 Vpp range, the needle doesn't move till we hit 4 MHz.
    • If computing the ratio of two voltage measurements, the meter is accurate well beyond 10 MHz.
  • Resistance measurement applies a 3V test voltage at full scale

5.7. Gossen-Metrawatt METRAmax2 Analog Multimeter

5.7.2. Documentation (These links only work on my personal laptop)

5.7.3. Notes

5.7.3.1. Performance & Operational Facts
  • AC/DC Voltage Input Impedance: 10MΩ
  • AC Voltage Measurement Bandwidth
Frequency Range Accuracy
DC - 30Hz 2%
30Hz - 1.5kHz 2.5%
1.5kHz - 3kHz 5%
  • DC Current Shunt (measured)
Range Resistance
3A 0.1Ω
1A 0.14Ω
100mA 0.64Ω
10mA 5.6Ω
1mA 55.6Ω
100μA 5kΩ

5.9. Thurlby Thandar Instruments WA301 Wideband Amplifier

5.9.2. Documentation (These links only work on my personal laptop)

5.9.2.1. Notes

5.10. Fluke 107 Pocket Digital Multimeter

5.10.2. Documentation (These links only work on my personal laptop)

6. Sending SCPI commands over IP network from command line

6.1. mrSCPI.rb

mrSCPI.rb -a my-scope-ip -c '*IDN?'

6.2. netcat

printf '*IDN?\n' | nc -w 3 -N my-scope-ip 5025

6.3. lxi-tool

lxi scpi -a my-scope-ip -p 5025 -r '*IDN?'

7. Bench Computer

7.1. Configuration

7.1.1. Install stuff

apt --fix-broken install
sudo apt update
sudo apt upgrade -y
sudo apt install                                             \
    emacs emacs-common-non-dfsg emacs-editing-major-modes    \
    zsh zsh-doc                                              \
    tmux                                                     \
    gitk git-doc                                             \
    cu xterm                                                 \
    ruby ruby-dev ri                                         \
    telnet                                                   \
    imagemagick imagemagick-7-doc nomacs                     \
    kicad kicad-packages3d kicad-doc-en                      \
    gnuplot gnuplot-doc                                      \
    octave octave-dev                                        \
    ckermit minicom tio                                      \
    gtkwave                                                  \
    sbcl sbcl-doc sbcl-source                                \
    maxima maxima-doc xmaxima maxima-emacs                   \
    liblxi-dev lxi-tools                                     \
    pulseview sigrok-cli sigrok                              \
    default-jre swaks enscript graphviz gawk  mplayer povray 

7.1.2. /usr/local/bin links

for f in ruby perl sbcl; do
  sudo ln -s /usr/bin/$f /usr/local/bin/$f
done

7.1.3. Acount Setup

7.1.3.1. Create directories
mkdir -p ~/bin
mkdir -p ~/tmp
mkdir -p ~/tmp/tmux/sockets
mkdir -p ~/synced/from-bench/;
mkdir -p ~/synced/to-bench/;
mkdir -p ~/synced/rpi-software/;
mkdir -p ~/synced/DataSheets/;
mkdir -p ~/synced/ee_parts/;
mkdir -p ~/synced/world/ee/;
mkdir -p ~/synced/world/dotfiles/;
mkdir -p ~/synced/world/dotfilesSecure/;
mkdir -p ~/synced/world/stuff/homeNetwork/;
mkdir -p ~/synced/world/stuff/my_ref/;
mkdir -p ~/synced/world/stuff/notes/;
mkdir -p ~/synced/world/my_prog/dir-inventory/;
mkdir -p ~/synced/world/my_prog/learn/ex-ruby/;
mkdir -p ~/synced/world/my_prog/mpms/;
mkdir -p ~/synced/world/my_prog/verGo/;
mkdir -p ~/synced/world/my_prog/lineSets/;
mkdir -p ~/synced/world/my_prog/tmuxHelper/;
mkdir -p ~/synced/world/my_prog/UNIXutils/;
mkdir -p ~/synced/world/my_prog/utils/;
mkdir -p ~/synced/core/;
7.1.3.2. Create Links
cd 
ln -s synced/world world
ln -s synced/core core
7.1.3.3. Change my shell
sudo usermod -s /usr/bin/zsh richmit
7.1.3.4. Setup up ssh keys

Create .ssh directory on bench-pi

cd 
mkdir .ssh
chmod 700 .ssh

On primary workstation, extract public key and copy it to bench-pi.

cd ~/.ssh
ssh-keygen -y -f $(ls id_rsa_benchpi_* | tail -n 1) > tmp
scppw tmp bench-pi.home.mitchr.me:.ssh/authorized_keys
rm tmp
7.1.3.5. Sync data from workstation

See

7.1.3.6. Setup up dot files
~/world/my_prog/UNIXutils/SelectSetup.rb --loc=HOME; ~/world/my_prog/UNIXutils/SetupBin.rb

7.1.4. Bench Data Sync From Off Bench

date; echo back-sync;            rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2                  --rsh='ssh' bench-pi.home.mitchr.me:synced/from-bench/                 /c/Users/richmit/MJR/world/bench-pi/from-bench/;
date; echo forw-sync;            rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2                  --rsh='ssh' /c/Users/richmit/MJR/world/bench-pi/to-bench/              bench-pi.home.mitchr.me:synced/to-bench/;
date; echo rpi-soft;             rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/softwareArchive/rpi/                  bench-pi.home.mitchr.me:synced/rpi-software/;
date; echo datasheets;           rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/reading/Doc2/ee/DataSheets/           bench-pi.home.mitchr.me:synced/DataSheets/;
date; echo ee_parts;             rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/dataArch/ee_parts/                    bench-pi.home.mitchr.me:synced/ee_parts/;
date; echo te-stuff;             rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/ee/                             bench-pi.home.mitchr.me:synced/world/ee/;
date; echo dotfiles;             rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/dotfiles/                       bench-pi.home.mitchr.me:synced/world/dotfiles/;
date; echo dotfilesSecure;       rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/dotfilesSecure/                 bench-pi.home.mitchr.me:synced/world/dotfilesSecure/;
date; echo homeNetwork;          rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/stuff/homeNetwork/              bench-pi.home.mitchr.me:synced/world/stuff/homeNetwork/;
date; echo my_ref;               rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/stuff/my_ref/                   bench-pi.home.mitchr.me:synced/world/stuff/my_ref/;
date; echo notes;                rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/stuff/notes/                    bench-pi.home.mitchr.me:synced/world/stuff/notes/;
date; echo dir-inventory;        rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/dir-inventory/          bench-pi.home.mitchr.me:synced/world/my_prog/dir-inventory/;
date; echo ruby-examples;        rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/learn/ex-ruby/          bench-pi.home.mitchr.me:synced/world/my_prog/learn/ex-ruby/;
date; echo ruby-examples;        rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/mpms/                   bench-pi.home.mitchr.me:synced/world/my_prog/mpms/;
date; echo ruby-examples;        rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/verGo/                  bench-pi.home.mitchr.me:synced/world/my_prog/verGo/;
date; echo lineSets;             rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/lineSets/               bench-pi.home.mitchr.me:synced/world/my_prog/lineSets/;
date; echo tmuxHelper;           rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/tmuxHelper/             bench-pi.home.mitchr.me:synced/world/my_prog/tmuxHelper/;
date; echo UNIXutils;            rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/UNIXutils/              bench-pi.home.mitchr.me:synced/world/my_prog/UNIXutils/;
date; echo utils;                rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/utils/                  bench-pi.home.mitchr.me:synced/world/my_prog/utils/;
date; echo core;                 rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/core/                                 bench-pi.home.mitchr.me:synced/core/;
date

7.1.5. Display

We want screen blanking, but it can get confused if the display is blanked and then switches to another input. Add the following to /boot/firmware/config.txt:

## Keep RPI screen connection when screen is switched to another computer
# HDMI output with sound -- no DVI mode
hdmi_drive=2
# DMT (Display Monitor Timings) group.
hdmi_group=2
# 1920x1080 @ 60Hz.
hdmi_mode=82
# Force the RPI to act like the HDMI display is always connected
#hdmi_force_hotplug=1
hdmi_force_hotplug:0=1

7.1.6. Waveforms

sudo dpkg -i ~/synced/rpi-software/digilent-2025-01/digilent.adept.runtime_2.27.9-arm64.deb
sudo dpkg -i ~/synced/rpi-software/digilent-2025-01/digilent.waveforms_3.24.4_arm64.deb

7.1.7. Serial'ish Hardware Setup

7.1.7.1. buspirate5
echo 'SUBSYSTEM=="tty", ATTRS{interface}=="Bus Pirate CDC", GROUP="dialout", MODE="0660", SYMLINK+="buspirate5"' | sudo tee /etc/udev/rules.d/99-buspirate5.rules
sudo chmod a+r /etc/udev/rules.d/99-buspirate5.rules
7.1.7.2. SPI Driver
echo 'SUBSYSTEM=="tty", ATTRS{serial}=="DO02C6OO", GROUP="dialout", MODE="0660", SYMLINK+="spidriver"' | sudo tee /etc/udev/rules.d/99-spidriver.rules
sudo chmod a+r /etc/udev/rules.d/99-spidriver.rules
7.1.7.3. I2C Driver
echo 'SUBSYSTEM=="tty", ATTRS{serial}=="DO02C6UI", GROUP="dialout", MODE="0660", SYMLINK+="i2cdriver"' | sudo tee /etc/udev/rules.d/99-i2cdriver.rules
sudo chmod a+r /etc/udev/rules.d/99-i2cdriver.rules
7.1.7.4. HUP udev
sudo udevadm control --reload-rules
sudo udevadm trigger

7.1.8. SPI Driver Software

7.1.8.1. Download Compile

I install this stuff in the root of my home directory on the bench-pi.

cd ~
rm -rf spidriver
git clone 'https://github.com/jamesbowman/spidriver'
cd spidriver
gcc -o spicl -I c/common c/linux/spi.c c/common/spidriver.c
7.1.8.2. Test
./spicl /dev/spidriver i
./spicl /dev/spidriver s a 1 a 0 w 0x2a u

7.1.9. I2CDriver Software

7.1.9.1. Download & Compile

I install this stuff in the root of my home directory on the bench-pi.

cd ~
rm -rf i2cdriver
git clone 'https://github.com/jamesbowman/i2cdriver.git'
cd i2cdriver
gcc -o i2ccl -I c/common c/linux/i2c.c c/common/i2cdriver.c
7.1.9.2. Test
./i2ccl /dev/i2cdriver i

7.2. Access To Bench From Off Bench

7.2.1. SSH

ssh bench-pi.home.mitchr.me

7.2.2. SSH forwards

For systems on networks unable to access the bench network, I use SSH tunnels via bench-pi to connect to the instruments directly. I prefer to create these tunnels automatically when I ssh to bench-pi, and so I have several LocalForward statements in the bench-pi section of my ~/.ssh/config file. If we have an already running session that has created the tunnels, then starting a new ssh session will result in numerous warning messages about the tunnels already existing. I automatically generate this part of the configuration file from the data table in this org-mode document via a bit of lisp.

LocalForward 127.0.0.1:5900 oscope-sig.home.mitchr.me:5900
LocalForward 127.0.0.1:9001 awg-agilent.home.mitchr.me:5025
LocalForward 127.0.0.1:9002 awg-agilent.home.mitchr.me:443
LocalForward 127.0.0.1:9003 gpib-rover.home.mitchr.me:1234
LocalForward 127.0.0.1:9004 serial.home.mitchr.me:10001
LocalForward 127.0.0.1:9005 gpib-rover.home.mitchr.me:1234
LocalForward 127.0.0.1:9006 awg-rigol.home.mitchr.me:5555
LocalForward 127.0.0.1:9007 awg-rigol.home.mitchr.me:80
LocalForward 127.0.0.1:9008 oscope-rigol.home.mitchr.me:5555
LocalForward 127.0.0.1:9009 oscope-rigol.home.mitchr.me:80
LocalForward 127.0.0.1:9010 dmm-keithley.home.mitchr.me:5025
LocalForward 127.0.0.1:9011 dmm-keithley.home.mitchr.me:80
LocalForward 127.0.0.1:9012 ps-rns.home.mitchr.me:5025
LocalForward 127.0.0.1:9013 ps-rns.home.mitchr.me:80
LocalForward 127.0.0.1:9014 oscope-sig.home.mitchr.me:5025
LocalForward 127.0.0.1:9015 oscope-sig.home.mitchr.me:80
LocalForward 127.0.0.1:9016 serial.home.mitchr.me:80
LocalForward 127.0.0.1:9017 serial.home.mitchr.me:10002
LocalForward 127.0.0.1:9018 oscope-tek.home.mitchr.me:80
LocalForward 127.0.0.1:9019 gpib-rover.home.mitchr.me:1234
LocalForward 127.0.0.1:9020 serial.home.mitchr.me:10003
LocalForward 127.0.0.1:9021 oscope-tek.home.mitchr.me:80

We use 5900 on local side for the oscope-sig VNC forward because the scope's built in web site uses client side javascript to grab screenshots via VNC. Ugh…

7.3. Using teAlias.rb For Access Information

teAlias.rb provides a way to keep track of instrument IP addresses and access methods. To open Microsoft Edge and connect to my Tektronix TDS3052B:

start msedge `teAlias.rb @3052w`

Fire up chromium and connect to my Tektronix TDS3052B.

chromium-browser `teAlias.rb @3052w`

7.4. mrSCPIrc file

The "nickname" section of my mrSCPIrc configuration provides information that lets mrSCPI find test equipment using short aliases. I generate this part of the configuration file from the data table in this org-mode document via a bit of lisp. Here are the nicknames:

nickname 33210ae    33210a    aawge  aawg  => bench@raw://awg-agilent.home.mitchr.me:5025  ssh@raw://127.0.0.1:9001   
nickname 33210aw              aawgw        => bench@https://awg-agilent.home.mitchr.me:443 ssh@https://127.0.0.1:9002   
nickname 34401ap              dmmp         => bench@plgx://gpib-rover.home.mitchr.me:1234  ssh@plgx://127.0.0.1:9003   
nickname 34401as    34401a    dmms   dmm   => bench@soip://serial.home.mitchr.me:10001     ssh@soip://127.0.0.1:9004   
nickname 53131ap    53131a    countp count => bench@plgx://gpib-rover.home.mitchr.me:1234  ssh@plgx://127.0.0.1:9005   
nickname dg2052e    dg2052    dg2ke  dg2k  => bench@raw://awg-rigol.home.mitchr.me:5555    ssh@raw://127.0.0.1:9006   
nickname dg2052w              dg2kw        => bench@http://awg-rigol.home.mitchr.me:80     ssh@http://127.0.0.1:9007   
nickname dho4204e   dho4204   dho4ke dho4k => bench@raw://oscope-rigol.home.mitchr.me:5555 ssh@raw://127.0.0.1:9008   
nickname dho4204w             dho4kw       => bench@http://oscope-rigol.home.mitchr.me:80  ssh@http://127.0.0.1:9009   
nickname dmm6500e   dmm6500   6500e  6500  => bench@raw://dmm-keithley.home.mitchr.me:5025 ssh@raw://127.0.0.1:9010   
nickname dmm6500w             6500w        => bench@http://dmm-keithley.home.mitchr.me:80  ssh@http://127.0.0.1:9011   
nickname hmc8043e   hmc8043   pse    ps    => bench@raw://ps-rns.home.mitchr.me:5025       ssh@raw://127.0.0.1:9012   
nickname hmc8043w             psw          => bench@http://ps-rns.home.mitchr.me:80        ssh@http://127.0.0.1:9013   
nickname sds2504xpe sds2504xp sig2ke sig2k => bench@raw://oscope-sig.home.mitchr.me:5025   ssh@raw://127.0.0.1:9014   
nickname sds2504xpw           sig2kw       => bench@http://oscope-sig.home.mitchr.me:80    ssh@http://127.0.0.1:9015   
nickname serialw              serial       => bench@http://serial.home.mitchr.me:80        ssh@http://127.0.0.1:9016   
nickname tds2024s             tek2ks tek2k => bench@soip://serial.home.mitchr.me:10002     ssh@soip://127.0.0.1:9017   
nickname tds3052bh  tds3052b  tek3kh tek3k => bench@t3k://oscope-tek.home.mitchr.me:80     ssh@t3k://127.0.0.1:9018   
nickname tds3052bp            tek3kp       => bench@plgx://gpib-rover.home.mitchr.me:1234  ssh@plgx://127.0.0.1:9019   
nickname tds3052bs            tek3ks       => bench@soip://serial.home.mitchr.me:10003     ssh@soip://127.0.0.1:9020   
nickname tds3052bw            tek3kw       => bench@http://oscope-tek.home.mitchr.me:80    ssh@http://127.0.0.1:9021   

8. Document Meta Data

Master location for org-mode source code for this document
https://github.com/richmit/TestEquipmentNotes/blob/main/index.org
Master location for the HTML rendered from org-mode source for this document
https://richmit.github.io/TestEquipmentNotes/
Repository with all code and data for this document
https://github.com/richmit/TestEquipmentNotes

9. Detailed TOC

Table of Contents