Source code for lantz.drivers.examples.fungen

# -*- coding: utf-8 -*-
"""
    lantz.drivers.examples.fungen
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Implements the Signal Generator described in the Lantz tutorial.

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

from lantz import Feat, DictFeat, Action
from lantz.errors import InstrumentError
from lantz.messagebased import MessageBasedDriver


[docs]class LantzSignalGenerator(MessageBasedDriver): """Lantz Signal Generator """ DEFAULTS = {'COMMON': {'write_termination': '\n', 'read_termination': '\n'}}
[docs] def query(self, command, *, send_args=(None, None), recv_args=(None, None)): answer = super().query(command, send_args=send_args, recv_args=recv_args) if answer == 'ERROR': raise InstrumentError return answer
@Feat(read_once=True) def idn(self): return self.query('?IDN') @Feat(units='V', limits=(10,)) def amplitude(self): """Amplitude. """ return float(self.query('?AMP')) @amplitude.setter def amplitude(self, value): self.query('!AMP {:.1f}'.format(value)) @Feat(units='V', limits=(-5, 5, .01)) def offset(self): """Offset. """ return float(self.query('?OFF')) @offset.setter def offset(self, value): self.query('!OFF {:.1f}'.format(value)) @Feat(units='Hz', limits=(1, 1e+5)) def frequency(self): """Frequency. """ return float(self.query('?FRE')) @frequency.setter def frequency(self, value): self.query('!FRE {:.2f}'.format(value)) @Feat(values={True: 1, False: 0}) def output_enabled(self): """Analog output enabled. """ return int(self.query('?OUT')) @output_enabled.setter def output_enabled(self, value): self.query('!OUT {}'.format(value)) @Feat(values={'sine': '0', 'square': '1', 'triangular': '2', 'ramp': '3'}) def waveform(self): return self.query('?WVF') @waveform.setter def waveform(self, value): self.query('!WVF {}'.format(value)) @DictFeat(values={True: '1', False: '0'}, keys=list(range(1,9))) def dout(self, key): """Digital output state. """ return self.query('?DOU {}'.format(key)) @dout.setter def dout(self, key, value): self.query('!DOU {} {}'.format(key, value)) @DictFeat(values={True: '1', False: '0'}, keys=list(range(1,9))) def din(self, key): """Digital input state. """ return self.query('?DIN {}'.format(key)) @Action() def calibrate(self): """Calibrate. """ self.query('!CAL') @Action() def self_test(self, level=1, repetitions=3): """Reset to . """ self.query('!TES {} {}'.format(level, repetitions))