Source code for qcodes.instrument_drivers.rohde_schwarz.private.HMC804x

from typing import Any, Union

from qcodes import ChannelList, Instrument, InstrumentChannel, VisaInstrument
from qcodes import validators as vals


[docs]class RohdeSchwarzHMC804xChannel(InstrumentChannel): def __init__(self, parent: Instrument, name: str, channel: Union[str, int]) -> None: super().__init__(parent, name) select_cmd = f":INSTrument:NSELect {channel};" voltage_amp = ":SOURce:VOLTage:LEVel:IMMediate:AMPLitude" current_amp = ":SOURce:CURRent:LEVel:IMMediate:AMPLitude" self.add_parameter("set_voltage", label='Target voltage output', set_cmd=f"{select_cmd} {voltage_amp} {{}}", get_cmd=f"{select_cmd} {voltage_amp}?", get_parser=float, unit='V', vals=vals.Numbers(0, 32.050) ) self.add_parameter("set_current", label='Target current output', set_cmd=f"{select_cmd} {current_amp} {{}}", get_cmd=f"{select_cmd} {current_amp}?", get_parser=float, unit='A', vals=vals.Numbers(0.5e-3, self._parent.max_current) ) self.add_parameter('state', label='Output enabled', set_cmd=f'{select_cmd} :OUTPut:CHANnel:STATe {{}}', get_cmd=f'{select_cmd} :OUTPut:CHANnel:STATe?', val_mapping={'ON': 1, 'OFF': 0}, vals=vals.Enum('ON', 'OFF') ) self.add_parameter("voltage", label='Measured voltage', get_cmd=f"{select_cmd} :MEASure:SCALar:VOLTage:DC?", get_parser=float, unit='V', ) self.add_parameter("current", label='Measured current', get_cmd=f"{select_cmd} :MEASure:SCALar:CURRent:DC?", get_parser=float, unit='A', ) self.add_parameter("power", label='Measured power', get_cmd=f"{select_cmd} :MEASure:SCALar:POWer?", get_parser=float, unit='W', )
class _RohdeSchwarzHMC804x(VisaInstrument): """ This is the general HMC804x Power Supply driver class that implements shared parameters and functionality among all similar power supply from Rohde & Schwarz. This driver was written to be inherited from by a specific driver (e.g. HMC8043). """ _max_currents = {3: 3.0, 2: 5.0, 1: 10.0} def __init__(self, name: str, address: str, num_channels: int, **kwargs: Any) -> None: super().__init__(name, address, **kwargs) self.max_current = _RohdeSchwarzHMC804x._max_currents[num_channels] self.add_parameter('state', label='Output enabled', set_cmd='OUTPut:MASTer:STATe {}', get_cmd='OUTPut:MASTer:STATe?', val_mapping={'ON': 1, 'OFF': 0}, vals=vals.Enum('ON', 'OFF') ) # channel-specific parameters channels = ChannelList(self, "SupplyChannel", RohdeSchwarzHMC804xChannel, snapshotable=False) for ch_num in range(1, num_channels+1): ch_name = f"ch{ch_num}" channel = RohdeSchwarzHMC804xChannel(self, ch_name, ch_num) channels.append(channel) self.add_submodule(ch_name, channel) self.add_submodule("channels", channels.to_channel_tuple()) self.connect_message()