The DEFAULTS dictionary

Different instruments require different communication settings such as baud rate, end of a message characters, etc. The :attribute::DEFAULTS dictionary provides a way to customize resource initialization at the :class::MessageBasedDriver level, avoiding tedious customization in all instances.

It is easier to see it with an example. Let’s start with simple case:

class MyDriver(MessageBasedDriver):

    DEFAULTS = {
                  'COMMON':   {'write_termination': '\n'}
                }

The ‘COMMON’ key is used to tells MessageBasedDriver that ‘write_termination’ should be set to ‘n’ for all type of interface types (USB, GPIB, etc).

But in certain cases, different resource types might require different settings:

DEFAULTS = {
              'ASRL':   {'write_termination': '\n',
                         'read_termination': '\r',
                         'baud_rate': 9600},

              'USB':    {'write_termination': '\n',
                         'read_termination': \n'}
            }

This specifies a dictionary of settings for an ASRL (serial) resource and a different for USB. We might make this more concise:

DEFAULTS = {
              'ASRL':   {'read_termination': '\r',
                         'baud_rate': 9600},

              'USB':    {'read_termination': \n'},

              'COMMON':   {'write_termination': '\n'}
            }

When you require a USB resource, Lantz will combine the USB and COMMON settings.

The interface type is not the only thing that defines the resource. For example TCPIP device can be a INSTR or SOCKET. You can also specify this in a tuple:

DEFAULTS = {
              'INSTR':   {'read_termination': '\r'},

              'SOCKET':    {'read_termination': \n'},

              'COMMON':   {'write_termination': '\n'}
            }

This will specify that ‘read_termination’ will be set ‘r’ to for al INSTR. If you want to specify only for TCPIP, use a tuple like this:

DEFAULTS = {
              ('TCPIP, 'INSTR'):   {'read_termination': '\r'},

              'SOCKET':    {'read_termination': \n'},

              'COMMON':   {'write_termination': '\n'}
            }

Overriding on initialization

You can override the defaults when you instantiate the instrument by passing these values a command line arguments:

inst = MyDriver('TCPIP::localhost::5678::INSTR', read_termination='\t')

Colliding values

When multiple values are given for the same setting (for example ‘read_termination’ is in USB And COMMON) and a USB resource is requested, the following order is used to define the precedence:

  • user provided keyword arguments.
  • settings for (instrument_type, resource_type).
  • settings for instrument_type: ASRL, USB, GPIB, TCPIP
  • settings for resource_type: SOCKET, INSTR, RAW
  • settings for COMMON

The rule is: more specific has precedence.

Valid settings

If you provide an invalid setting, you will get an Exception upon initalization. The valid settings are defined by Attributes per resource in PyVISA