Source code for lantz.drivers.newport.powermeter1830c

# -*- coding: utf-8 -*-
"""
    lantz.drivers.newport.powermeter1830c
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Implements the drivers to control an Optical Power Meter.

    :copyright: 2015 by Lantz Authors, see AUTHORS for more details.
    :license: BSD, see LICENSE for more details.
    
    Source: Instruction Manual (Newport)
"""

from pyvisa import constants

from lantz.feat import Feat
from lantz.action import Action
from lantz.messagebased import MessageBasedDriver


[docs]class PowerMeter1830c(MessageBasedDriver): """ Newport 1830c Power Meter """ DEFAULTS = {'ASRL': {'write_termination': '\n', 'read_termination': '\n', 'baud_rate': 9600, 'bytesize': 8, 'parity': constants.Parity.none, 'stop_bits': constants.StopBits.one, 'encoding': 'ascii', 'timeout': 2000 }} @Feat(values={True: 1, False: 0}) def attenuator(self): """ Attenuator. 1: Attenuator present 0: Attenuator not present """ return int(self.query('A?')) @attenuator.setter def attenuator(self, value): self.send('A{}'.format(value)) @Feat(values={True: 1, False: 0}) def beeper(self): """ Checks whether the audio output is on or off. """ return int(self.query('B?')) @beeper.setter def beeper(self,value): self.send('B{}'.format(value)) @Feat def data(self): """ Retrieves the value from the power meter. """ return float(self.query('D?')) @Feat(values={True: 1, False: 0}) def echo(self): """ Returns echo mode. Only applied to RS232 communication """ return int(self.query('E?')) @echo.setter def echo(self,value): self.send('E{}'.format(value)) @Feat(values={'Slow': 1, 'Medium': 2, 'Fast': 3}) def filter(self): """ How many measurements are averaged for the displayed reading. slow: 16 measurements medium: 4 measurements fast: 1 measurement. """ return int(self.query('F?')) @filter.setter def filter(self,value): self.send('F{}'.format(value)) @Feat(values={True: 1, False: 0}) def go(self): """ Enable or disable the power meter from taking new measurements. """ return int(self.query('G?')) @go.setter def go(self,value): self.send('G{}'.format(value)) @Feat(values={'Off': 0, 'Medium': 1, 'High': 2}) def keypad(self): """ Keypad/Display backlight intensity levels. """ return int(self.query('K?')) @keypad.setter def keypad(self,value): self.send('K{}'.format(value)) @Feat(values={True: 1, False: 0}) def lockout(self): """ Enable/Disable the lockout. When the lockout is enabled, any front panel key presses would have no effect on system operation. """ return int(self.query('L?')) @lockout.setter def lockout(self,value): self.send('L{}'.format(value)) @Action() def autocalibration(self): """ Autocalibration of the power meter. This procedure disconnects the input signal. It should be performed at least 60 minutes after warm-up. """ self.send('O') @Feat(values=set(range(0,9))) def range(self): """ Set the signal range for the input signal. 0 means auto setting the range. 1 is the lowest signal range and 8 the highest. """ return int(self.query('R?')) @range.setter def range(self,value): self.send('R{}'.format(value)) @Action() def store_reference(self): """ Sets the current input signal power level as the power reference level. Each time the S command is sent, the current input signal becomes the new reference level. """ self.send('S') @Feat(values={'Watts': 1, 'dB': 2, 'dBm': 3, 'REL': 4}) def units(self): """ Sets and gets the units of the measurements. """ return int(self.query('U?')) @units.setter def units(self,value): self.send('U{}'.format(value)) @Feat(limits=(1,10000,1)) def wavelength(self): """ Sets and gets the wavelength of the input signal. """ return int(self.query('W?')) @wavelength.setter def wavelength(self,value): self.send('W{}'.format(int(value))) @Feat(values={True: 1, False: 0}) def zero(self): """ Turn the zero function on/off. Zero function is used for subtracting any background power levels in future measurements. """ return int(self.query('Z?')) @zero.setter def zero(self,value): self.send('Z{}'.format(value))
if __name__ == '__main__': import argparse import lantz.log parser = argparse.ArgumentParser(description='Test Kentech HRI') parser.add_argument('-p', '--port', type=str, default='1', help='Serial port to connect to') args = parser.parse_args() lantz.log.log_to_socket(lantz.log.DEBUG) with PowerMeter1830c.from_serial_port(args.port) as inst: inst.initialize() # Initialize the communication with the power meter inst.lockout = True # Blocks the front panel inst.keypad = 'Off' # Switches the keypad off inst.attenuator = True # The attenuator is on inst.wavelength = 633 # Sets the wavelength to 633nm inst.units = "Watts" # Sets the units to Watts inst.filter = 'Slow' # Averages 16 measurements if not inst.go: inst.go = True # If the instrument is not running, enables it inst.range = 0 # Auto-sets the range print('The measured power is {} Watts'.format(inst.data))