示例#1
0
 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()
示例#2
0
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
示例#3
0
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
示例#4
0
 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()
示例#5
0
 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()
示例#6
0
    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
示例#7
0
 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)