def __init__(self, ramp=None): #threading.Thread.__init__(self) self.error = '' self.comms = {} self.comms['temperature'] = DateDataPullClient('rasppi83', 'mgw_temp', exception_on_old_data=True) try: #self.comms['temperature sample'] = DateDataPullClient('rasppi98', 'omicron_TPD_sample_temp', exception_on_old_data=True, port=9002, timeout=0.1) self.comms['temperature sample'] = DateDataPullClient('10.54.7.193', 'omicron_TPD_sample_temp', exception_on_old_data=True, port=9002, timeout=0.1) except socket.timeout: self.comms['temperature sample'] = None self.error = 'socket' #self.comms['pressure'] = DateDataPullClient('rasppi98', 'omicron_pvci_pull') self.values = {} self.values['pid'] = 0 self.values['setpoint'] = None self.values['temperature'] = None self.values['old_temperature'] = -9998 self.values['time'] = 0 self.start_values = {} self.start_values['time'] = -9999 self.start_values['temperature'] = -9999 self.zero = 0 # Offset for PID control self.pid = PID.PID(pid_p=0.2, pid_i=0.05, pid_d=0) self.quit = False #self.wait_time = 0.05 if ramp <= 0: raise ValueError('Ramp parameter \"{}\" not larger than zero'.format(ramp)) self.ramp = ramp self.get_temperature()
class DataClient(threading.Thread): """Maintain a numpy queue of newest `size` data points""" def __init__(self, hostname, socketname, codename, size=100): """Initialize""" threading.Thread.__init__(self) self.client = DateDataPullClient(hostname, socketname) self.codename = codename self.size = size self.counter = 0 self.values = np.zeros((size, 2)) self.values[:] = np.nan self.t_start = self.client.get_field(self.codename)[0] self.last_values = [-1, -1] self.new = None self.running = True self.update() def update(self): """Update values""" values = self.client.get_field(self.codename) # If value is new if values[0] > self.last_values[0]: self.last_values = values if self.counter < self.size: self.values[ self.counter, :] = values[0] - self.t_start, values[1] self.counter += 1 else: self.values[:-1, :] = self.values[1:, :] self.values[-1, :] = values[0] - self.t_start, values[1] self.new = True def run(self): """Continuously query for new values""" while self.running: self.update() time.sleep(0.04) def stop(self): """Exit main loop""" self.running = False def get_values(self): """Return non-NaN values""" index = np.isfinite(self.values)[:, 0] if self.new: status = True self.new = False else: status = False return self.values[index], status
class DataClient(threading.Thread): """Maintain a numpy queue of newest `size` data points""" def __init__(self, hostname, socketname, codename, size=100): """Initialize""" threading.Thread.__init__(self) self.client = DateDataPullClient(hostname, socketname) self.codename = codename self.size = size self.counter = 0 self.values = np.zeros((size, 2)) self.values[:] = np.nan self.t_start = self.client.get_field(self.codename)[0] self.last_values = [-1, -1] self.new = None self.running = True self.update() def update(self): """Update values""" values = self.client.get_field(self.codename) # If value is new if values[0] > self.last_values[0]: self.last_values = values if self.counter < self.size: self.values[self.counter, :] = values[0] - self.t_start, values[1] self.counter += 1 else: self.values[:-1, :] = self.values[1:, :] self.values[-1, :] = values[0] - self.t_start, values[1] self.new = True def run(self): """Continuously query for new values""" while self.running: self.update() time.sleep(0.04) def stop(self): """Exit main loop""" self.running = False def get_values(self): """Return non-NaN values""" index = np.isfinite(self.values)[:, 0] if self.new: status = True self.new = False else: status = False return self.values[index], status
def __init__(self, hostname, socketname, codename, size=100): """Initialize""" threading.Thread.__init__(self) self.client = DateDataPullClient(hostname, socketname) self.codename = codename self.size = size self.counter = 0 self.values = np.zeros((size, 2)) self.values[:] = np.nan self.t_start = self.client.get_field(self.codename)[0] self.last_values = [-1, -1] self.new = None self.running = True self.update()
def get_temperature(self): """Updates the temperature (Kelvin)""" t0 = time.time() while time.time() - t0 < 1.0: # Timeout on old values # Restart socket client if self.comms['temperature sample'] is None: try: self.comms['temperature sample'] = DateDataPullClient('omicron-ms.clients.net.dtu.dk', 'omicron_TPD_sample_temp', exception_on_old_data=True, port=9002, timeout=0.1) except socket.timeout: self.comms['temperature sample'] = None self.error = 'socket' # Broadcasting socket is offline return None # Get temperature from DateDataPullSocket try: ret = self.comms['temperature sample'].get_field('omicron_T_sample') self.error = '' if ret[1] == -1000: self.error = 'open' return None elif ret[1] == -2000: self.error = 'cjc error' return None except socket.timeout: # Broadcasting client may have crashed - kill client self.comms['temperature sample'] = None continue #except ValueError as e: # LOGGER.error('Raising valueerror.', exc_info=True) # raise ValueError('Error in DateDataPullClient. Try and restart DateDataPullSocket.', e) # Check for old data if ret[0] != self.values['time']: #print(5) self.values['temperature'] = ret[1] self.values['time'] = ret[0] # For testing: #if time.time() - self.start_values['time'] > 10: # self.values['temperature'] += (time.time() - self.start_values['time'] - 10)*2. self.error = '' return self.values['temperature'] else: self.error = 'old data' return None LOGGER.warning('{:.2} s ramp runtime. get_temperature timeout: returning None'.format(time.time()-self.start_values['time'])) self.error = 'timeout' return None
def __init__(self, ramp=None): threading.Thread.__init__(self) self.comms = {} self.comms['temperature'] = DateDataPullClient('rasppi83', 'mgw_temp') #self.comms['pressure'] = DateDataPullClient('rasppi98', 'omicron_pvci_pull') self.values = {} self.values['pid'] = 0 self.values['setpoint'] = None self.values['temperature'] = None self.values['time'] = 0 self.start_values = {} self.start_values['time'] = -9999 self.start_values['temperature'] = -9999 self.pid = PID.PID(pid_p=0.2, pid_i=0.05, pid_d=0, p_max=10) self.quit = False self.wait_time = 0.05 if ramp <= 0: raise ValueError('Ramp parameter \"{}\" not larger than zero'.format(ramp)) self.ramp = ramp time.sleep(0.2)