Source code for lantz.drivers.cobolt.cobolt0601

# -*- coding: utf-8 -*-
"""
    lantz.drivers.cobolt.cobolt0601
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

from pyvisa import constants

from lantz import Action, Feat
from lantz.messagebased import MessageBasedDriver


[docs]class Cobolt0601(MessageBasedDriver): """Driver for any Cobolt 06-01 Series laser. """ DEFAULTS = {'ASRL': {'write_termination': '\r', 'read_termination': '\r', 'baud_rate': 115200, 'bytesize': 8, 'parity': constants.Parity.none, 'stop_bits': constants.StopBits.one, 'encoding': 'ascii', }} #TODO: add this in PyVISA # flow control flags #RTSCTS = False #DSRDTR = False #XONXOFF = False @Feat(read_once=True) def idn(self): """Get serial number """ ans = self.query('gsn?')[1:] wavel = ans[:3] sn = ans[3:] return 'Cobolt ' + wavel + 'nm 06-01 Series, serial number ' + sn
[docs] def initialize(self): super().initialize() self.mode = 'APC' self.ctl_mode = self.mode
# ENABLE LASER METHODS @Feat(values={True: '1', False: '0'}) def ksw_enabled(self): """Handling Key Switch enable state """ ans = self.query('@cobasky?') return ans[1:] @ksw_enabled.setter def ksw_enabled(self, value): self.query('@cobasky ' + value) @Feat(values={True: '1', False: '0'}) def enabled(self): """Method for turning on the laser. Requires autostart disabled. """ ans = self.query('l?') return ans[-1] @enabled.setter def enabled(self, value): self.query('l' + value) @Feat(values={True: '1', False: '0'}) def autostart(self): """Autostart handling """ ans = self.query('@cobas?') return ans[-1] @autostart.setter def autostart(self, value): self.query('@cobas ' + value) @Action() def restart(self): """Forces the laser on without checking if autostart is enabled. """ self.query('@cob1') # LASER INFORMATION METHODS @Feat() def operating_hours(self): """Get Laser Head operating hours """ return self.query('hrs?')[1:] @Feat(values={'Interlock open': '1', 'OK': '0'}) def interlock(self): """Get interlock state """ return self.query('ilk?')[1:] # LASER'S CONTROL MODE AND SET POINT @Feat(values={'APC', 'ACC'}) def ctl_mode(self): """To handle laser control modes """ return self.mode @ctl_mode.setter def ctl_mode(self, value): if value == 'ACC': self.query('ci') self.mode = 'ACC' elif value == 'APC': self.mode = 'APC' self.query('cp') @Feat(units='mA') def current_sp(self): """Get drive current """ return float(self.query('i?')) @current_sp.setter def current_sp(self, value): self.query('slc {:.1f}'.format(value)) @Feat(units='mW') def power_sp(self): """To handle output power set point (mW) in constant power mode """ return 1000 * float(self.query('p?')) @power_sp.setter def power_sp(self, value): self.query('p {:.5f}'.format(value / 1000)) # LASER'S CURRENT STATUS @Feat(units='mW') def power(self): """Read output power """ return 1000 * float(self.query('pa?')) @Feat(values={'Temperature error': '1', 'No errors': '0', 'Interlock error': '3', 'Constant power time out': '4'}) def status(self): """Get operating fault """ return self.query('f?')[1:] @Action() def clear_fault(self): """Clear fault """ self.query('cf') # MODULATION MODES @Action() def enter_mod_mode(self): """Enter modulation mode """ self.query('em') @Feat(values={True: '1', False: '0'}) def digital_mod(self): """digital modulation enable state """ return self.query('gdmes?')[1:] @digital_mod.setter def digital_mod(self, value): self.query('gdmes ' + value) @Feat(values={True: '1', False: '0'}) def analog_mod(self): """analog modulation enable state """ return self.query('games?')[1:] @analog_mod.setter def analog_mod(self, value): self.query('sames ' + value) @Feat(values={True: '1', False: '0'}) def analogli_mod(self): """analog modulation enable state """ return self.query('galis?')[1:] @analogli_mod.setter def analogli_mod(self, value): self.query('salis ' + value) @Feat(values={'Waiting for key': '1', 'Off': '0', 'Continuous': '2', 'On/Off Modulation': '3', 'Modulation': '4', 'Fault': '5', 'Aborted': '6'}) def mod_mode(self): """Returns the current operating mode """ return self.query('gom?')[1:]
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='COM4', help='Serial port to connect to') args = parser.parse_args() lantz.log.log_to_screen(lantz.log.DEBUG) with Cobolt0601.from_serial_port(args.port) as inst: if args.interactive: from lantz.ui.qtwidgets import start_test_app start_test_app(inst) else: # Add your test code here print('Non interactive mode') print(inst.idn) print(inst.shg_tuning)