Module dopes.equipment_control.meerstetterTEC
Classes
class meerstetterTEC (port=None,
scan_timeout=30,
channel=1,
queries=['loop status', 'object temperature', 'target object temperature', 'output current', 'output voltage'],
*args,
**kwars)-
Expand source code
class meerstetterTEC(object): """ Controlling TEC devices via serial. """ def close_connection(self): self.session().stop() def __init__(self, port=None, scan_timeout=30, channel=1, queries=DEFAULT_QUERIES, *args, **kwars): assert channel in (1, 2) self.channel = channel self.port = port self.scan_timeout = scan_timeout self.queries = queries self._session = None self._connect() def _connect(self): # open session if self.port is not None: self._session = MeComSerial(serialport=self.port) else: if platform.system() != "Windows": start_index = 0 base_name = "/dev/ttyUSB" else: start_index = 1 base_name = "COM" scan_start_time = time() while True: for i in range(start_index, MAX_COM + 1): try: self._session = MeComSerial(serialport=base_name + str(i)) break except SerialException: pass if self._session is not None or (time() - scan_start_time) >= self.scan_timeout: break sleep(0.1) # 100 ms wait time between each scan attempt if self._session is None: raise PortNotOpenError # get device address self.address = self._session.identify() logging.info("connected to {}".format(self.address)) def initialize(self): # start logging logging.basicConfig(level=logging.DEBUG, format="%(asctime)s:%(module)s:%(levelname)s:%(message)s") # initialize controller # mc = MeerstetterTEC() # get the values from DEFAULT_QUERIES print(self.get_data()) def session(self): if self._session is None: self._connect() return self._session def get_data(self): data = {} for description in self.queries: id, unit = COMMAND_TABLE[description] try: value = self.session().get_parameter(parameter_id=id, address=self.address, parameter_instance=self.channel) data.update({description: (value, unit)}) except (ResponseException, WrongChecksum) as ex: self.session().stop() self._session = None return data def set_temp(self, value,wait_for_stabilization=False,waiting_time=0.1,stabilization_tolerance=0.1,stabilization_number=10): """ Set object temperature of channel to desired value. :param value: float :param channel: int :return: """ # assertion to explicitly enter floats assert type(value) is float logging.info("set object temperature for channel {} to {} C".format(self.channel, value)) message=self.session().set_parameter(parameter_id=3000, value=value, address=self.address, parameter_instance=self.channel) if wait_for_stabilization: temperature_stabilized=False stabilization_count=0 while temperature_stabilized==False: sleep(waiting_time) temperatue_data=self.get_data() temperature_read=np.round(float(temperatue_data["object temperature"][0]),3) if abs(temperature_read-value)<stabilization_tolerance: stabilization_count+=1 if stabilization_count==stabilization_number: temperature_stabilized=True else: stabilization_count=0 return message def _set_enable(self, enable=True): """ Enable or disable control loop :param enable: bool :param channel: int :return: """ value, description = (1, "on") if enable else (0, "off") logging.info("set loop for channel {} to {}".format(self.channel, description)) return self.session().set_parameter(value=value, parameter_name="Status", address=self.address, parameter_instance=self.channel) def enable(self): return self._set_enable(True) def disable(self): return self._set_enable(False)Controlling TEC devices via serial.
Methods
def close_connection(self)-
Expand source code
def close_connection(self): self.session().stop() def disable(self)-
Expand source code
def disable(self): return self._set_enable(False) def enable(self)-
Expand source code
def enable(self): return self._set_enable(True) def get_data(self)-
Expand source code
def get_data(self): data = {} for description in self.queries: id, unit = COMMAND_TABLE[description] try: value = self.session().get_parameter(parameter_id=id, address=self.address, parameter_instance=self.channel) data.update({description: (value, unit)}) except (ResponseException, WrongChecksum) as ex: self.session().stop() self._session = None return data def initialize(self)-
Expand source code
def initialize(self): # start logging logging.basicConfig(level=logging.DEBUG, format="%(asctime)s:%(module)s:%(levelname)s:%(message)s") # initialize controller # mc = MeerstetterTEC() # get the values from DEFAULT_QUERIES print(self.get_data()) def session(self)-
Expand source code
def session(self): if self._session is None: self._connect() return self._session def set_temp(self,
value,
wait_for_stabilization=False,
waiting_time=0.1,
stabilization_tolerance=0.1,
stabilization_number=10)-
Expand source code
def set_temp(self, value,wait_for_stabilization=False,waiting_time=0.1,stabilization_tolerance=0.1,stabilization_number=10): """ Set object temperature of channel to desired value. :param value: float :param channel: int :return: """ # assertion to explicitly enter floats assert type(value) is float logging.info("set object temperature for channel {} to {} C".format(self.channel, value)) message=self.session().set_parameter(parameter_id=3000, value=value, address=self.address, parameter_instance=self.channel) if wait_for_stabilization: temperature_stabilized=False stabilization_count=0 while temperature_stabilized==False: sleep(waiting_time) temperatue_data=self.get_data() temperature_read=np.round(float(temperatue_data["object temperature"][0]),3) if abs(temperature_read-value)<stabilization_tolerance: stabilization_count+=1 if stabilization_count==stabilization_number: temperature_stabilized=True else: stabilization_count=0 return messageSet object temperature of channel to desired value. :param value: float :param channel: int :return: