Source code for lantz.drivers.rgblasersystems.minilasevo

# -*- coding: utf-8 -*-
"""
    lantz.drivers.rgblasersystems.minilasevo
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    :copyright: 2015 by Lantz Authors, see AUTHORS for more details.
    :license: BSD, see LICENSE for more details.
"""

from pyvisa import constants

from lantz import Feat
from lantz.messagebased import MessageBasedDriver
from lantz.errors import InstrumentError


[docs]class MiniLasEvo(MessageBasedDriver): """Driver for any RGB Lasersystems MiniLas Evo laser. """ DEFAULTS = {'ASRL': {'write_termination': '\r\n', 'read_termination': '\r\n', 'baud_rate': 57600, 'bytesize': 8, 'parity': constants.Parity.none, 'stop_bits': constants.StopBits.one, 'encoding': 'ascii' }} #: flow control flags #RTSCTS = False #DSRDTR = False #XONXOFF = False
[docs] def query(self, command, *, send_args=(None, None), recv_args=(None, None)): """Send query to the laser and return the answer, after handling possible errors. :param command: command to be sent to the instrument :type command: string :param send_args: (termination, encoding) to override class defaults :param recv_args: (termination, encoding) to override class defaults """ ans = super().query(command, send_args=send_args, recv_args=recv_args) # TODO: Echo handling code = ans[0] if code != 0: if code == '1': raise InstrumentError('Command invalid') elif code == '2': raise InstrumentError('Wrong number of parameters') elif code == '3': raise InstrumentError('Parameter value is out of range') elif code == '4': raise InstrumentError('Unlocking code is wrong') elif code == '5': raise InstrumentError('Device is locked for this command') elif code == '6': raise InstrumentError('This function is not supported') elif code == '7': raise InstrumentError('Timeout while reading command (60 s)') elif code == '8': raise InstrumentError('This value is currently not available') ans = ans[2:] # TODO: Code reporting? return ans
@Feat(read_once=True) def idn(self): """Identification of the device """ manufacturer = self.query('DM?') device = self.query('DT?') serial = self.query('DS?') ans = manufacturer + ', ' + device + ', serial number ' + serial return ans @Feat() def status(self): """Current device status """ ans = self.query('S?') if ans == '0x10': ans = 'Temperature of laser head is ok' elif ans == '0x01': ans = 'Laser system is active, radiation can be emitted' elif ans == '0x02': ans = '(reserved)' elif ans == '0x04': ans = 'The interlock is open' elif ans == '0x08': ans = self.query('E?') if ans == '0x01': ans = 'Temperature of laser head is too high' elif ans == '0x02': ans = 'Temperature of laser head is too low' elif ans == '0x04': ans = 'Temperature-sensor connection is broken' elif ans == '0x08': ans = 'Temperature sensor cable is shortened' elif ans == '0x40': ans = 'Current for laser head is too high' elif ans == '0x80': ans = 'Internal error (laser system cannot be activated)' return ans @Feat() def operating_hours(self): """Total operating hours [hhhh:mm] """ return self.query('R?') @Feat() def software_version(self): """Software version """ return self.query('DO?') @Feat(read_once=True) def emission_wavelenght(self): """Emission wavelenght in nm """ return self.query('DW?') @Feat() def available_features(self): """Available features (reserved for future use) """ return self.query('DF?') @Feat() def control_mode(self): """Active current (power) control """ ans = self.query('DC?') if ans == 'ACC': ans = 'Active current control' else: ans = 'Active power control' return ans # TEMPERATURE @Feat() def temperature(self): """Current temperature in ºC """ return self.query('T?') @Feat(read_once=True) def temperature_min(self): """Lowest operating temperature in ºC """ return self.query('LTN?') @Feat(read_once=True) def temperature_max(self): """Highest operating temperature in ºC """ return self.query('LTP?') # ENABLED REQUEST @Feat(values={True: '1', False: '0'}) def enabled(self): """Method for turning on the laser """ return self.query('O?') @enabled.setter def enabled(self, value): self.query('O=' + value) # LASER POWER
[docs] def initialize(self): super().initialize() self.power = 0 self.feats.power.limits = (0, self.maximum_power.magnitude)
@Feat(units='mW') def maximum_power(self): """Gets the maximum emission power of the laser """ return float(self.query('LP?')) @Feat(units='mW') def power_sp(self): """Gets and sets the emission power """ return float(self.query('P?')) @power_sp.setter def power(self, value): self.query('P={:.1f}'.format(value))
if __name__ == '__main__': import argparse import lantz.log parser = argparse.ArgumentParser(description='Test Kentech HRI') parser.add_argument('-i', '--interactive', action='store_true', default=False, help='Show interactive GUI') parser.add_argument('-p', '--port', type=str, default='17', help='Serial port to connect to') args = parser.parse_args() lantz.log.log_to_screen(lantz.log.DEBUG) with MiniLasEvo(args.port) as inst: if args.interactive: from lantz.ui.app import start_test_app start_test_app(inst) else: # Add your test code here print('Non interactive mode') """inst.power = 0 inst.temperature print(inst.power) inst.power = 0 print(inst.idn) """