예제 #1
0
    def __init__(self, codenames):
        threading.Thread.__init__(self)
        self.quit = False
        self.codenames = codenames
        self.ttl = 50
        self.SYSTEMS = {}
        for co in self.codenames:
            self.SYSTEMS[co] = None

        port = '/dev/serial/by-id/usb-0683_1490-if00'
        self.DATAQ = DataQ(port=port)
        port = '/dev/serial/by-id/usb-FTDI_USB-RS485_Cable_FTYIWN2Q-if00-port0'
        self.omega = OmegaD6720(1, port=port)
        self.CPX400DP = {}
        self.CPX400DP['tabs_cooling_valve_cooling'] = CPX400DPDriver(output = 1, interface = 'serial', device = '/dev/serial/by-id/usb-TTI_CPX400_Series_PSU_55126271-if00')
        self.CPX400DP['tabs_guard_valve_cooling'] = CPX400DPDriver(output = 2, interface = 'serial', device = '/dev/serial/by-id/usb-TTI_CPX400_Series_PSU_55126271-if00')
        self.CPX400DP['tabs_cooling_valve_cooling'].set_voltage(0.0)
        self.CPX400DP['tabs_guard_valve_cooling'].set_voltage(0.0)
        self.CPX400DP['tabs_cooling_valve_cooling'].output_status(on = True)
        self.CPX400DP['tabs_guard_valve_cooling'].output_status(on = True)
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        #self.pidvalues = {'tabs_guard_pid': 0.0, 'tabs_floor_pid': 0.0, 'tabs_ceiling_pid': 0.0, 'tabs_cooling_pid': 0.0}
        #self.heater = {'tabs_guard_heater': None, 'tabs_floor_heater': None, 'tabs_ceiling_heater': None, 'tabs_cooling_heater': None}
        self.FloatToDigital = {}
        for co in self.codenames:
            self.FloatToDigital[co] = FloatToDigital(totalcycles=60)
        self.FloatToDigital['tabs_cooling_valve_cooling'] = FloatToDigital(totalcycles=60)
예제 #2
0
class ValveControl(threading.Thread):
    """ Temperature reader """
    def __init__(self, codenames):
        threading.Thread.__init__(self)
        self.quit = False
        self.codenames = codenames
        self.ttl = 50
        self.SYSTEMS = {}
        for co in self.codenames:
            self.SYSTEMS[co] = None

        port = '/dev/serial/by-id/usb-0683_1490-if00'
        self.DATAQ = DataQ(port=port)
        port = '/dev/serial/by-id/usb-FTDI_USB-RS485_Cable_FTYIWN2Q-if00-port0'
        self.omega = OmegaD6720(1, port=port)
        self.CPX400DP = {}
        self.CPX400DP['tabs_cooling_valve_cooling'] = CPX400DPDriver(output = 1, interface = 'serial', device = '/dev/serial/by-id/usb-TTI_CPX400_Series_PSU_55126271-if00')
        self.CPX400DP['tabs_guard_valve_cooling'] = CPX400DPDriver(output = 2, interface = 'serial', device = '/dev/serial/by-id/usb-TTI_CPX400_Series_PSU_55126271-if00')
        self.CPX400DP['tabs_cooling_valve_cooling'].set_voltage(0.0)
        self.CPX400DP['tabs_guard_valve_cooling'].set_voltage(0.0)
        self.CPX400DP['tabs_cooling_valve_cooling'].output_status(on = True)
        self.CPX400DP['tabs_guard_valve_cooling'].output_status(on = True)
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        #self.pidvalues = {'tabs_guard_pid': 0.0, 'tabs_floor_pid': 0.0, 'tabs_ceiling_pid': 0.0, 'tabs_cooling_pid': 0.0}
        #self.heater = {'tabs_guard_heater': None, 'tabs_floor_heater': None, 'tabs_ceiling_heater': None, 'tabs_cooling_heater': None}
        self.FloatToDigital = {}
        for co in self.codenames:
            self.FloatToDigital[co] = FloatToDigital(totalcycles=60)
        self.FloatToDigital['tabs_cooling_valve_cooling'] = FloatToDigital(totalcycles=60)
        
    def update_pidvalues(self,):
        try:
            info = socketinfo.INFO['tabs_pids']
            host_port = (info['host'], info['port'])
            command = 'json_wn'
            self.sock.sendto(command, host_port)
            data = json.loads(self.sock.recv(2048))
            now = time.time()
            #print(data)
            for key, value in data.items():
                try:
                    if abs(now - value[0]) > 3*60 or value[1] == 'OLD_DATA': # this is 3min change to 5s
                       #self.SYSTEMS[sy][me] = None
                       pass
                    else:
                        self.SYSTEMS[key] = value[1]
                except:
                    pass
                    #self.SYSTEMS[sy][me] = None
        except socket.timeout:
            pass
        return self.SYSTEMS
    def update_temperatures(self,):
        """ Read the temperature from a external socket server"""
        try:
            info = socketinfo.INFO['tabs_temperatures']
            host_port = (info['host'], info['port'])
            command = 'json_wn'
            self.sock.sendto(command, host_port)
            data = json.loads(self.sock.recv(2048))
            now = time.time()
            #print(data)
            for key, value in data.items():
                try:
                    if abs(now - value[0]) > 3*60 or value[1] == 'OLD_DATA': # this is 3min change to 5s
                       #self.SYSTEMS[key] = None
                       pass
                    else:
                        self.SYSTEMS[key] = value[1]
                except:
                    #self.SYSTEMS[key] = None
                    pass
        except socket.timeout:
            pass
        return self.SYSTEMS
        
    def value(self, channel):
        """ Read the pressure """
        #self.ttl = self.ttl - 1
        if self.ttl < 0:
            self.quit = True
            return_val = None
        else:
            me = 'valve_heating'
            if channel == 0:
                sy = 'tabs_guard'
                return_val = self.SYSTEMS[sy+'_'+me]
            elif channel == 1:
                sy = 'tabs_floor'
                return_val = self.SYSTEMS[sy+'_'+me]
            elif channel == 2:
                sy = 'tabs_ceiling'
                return_val = self.SYSTEMS[sy+'_'+me]
            elif channel == 3:
                sy = 'tabs_cooling'
                return_val = self.SYSTEMS[sy+'_'+me]
            me = 'valve_cooling'
            if channel == 4:
                sy = 'tabs_guard'
                return_val = self.SYSTEMS[sy+'_'+me]
            elif channel == 5:
                sy = 'tabs_floor'
                return_val = self.SYSTEMS[sy+'_'+me]
            elif channel == 6:
                sy = 'tabs_ceiling'
                return_val = self.SYSTEMS[sy+'_'+me]
            elif channel == 7:
                sy = 'tabs_cooling'
                return_val = self.SYSTEMS[sy+'_'+me]
        #print('return_val: ', return_val, '<-')
        return return_val
    
    def update_DO(self,):
        #print('update_DO')
        self.ttl = self.ttl - 1
        keytochannel = {'tabs_guard_valve_heating': 0,
                        'tabs_floor_valve_heating': 1,
                        'tabs_ceiling_valve_heating': 2,
                        'tabs_cooling_valve_heating': 3,
                        'tabs_ice_valve_heating': 4,
                        'tabs_guard_valve_cooling': 5,
                        'tabs_floor_valve_cooling': 6,
                        'tabs_ceiling_valve_cooling': 7,
                        'tabs_cooling_valve_cooling': 8,
                        'tabs_ice_valve_cooling': 9,}
        OnOffSignal = {}
        if self.SYSTEMS['tabs_cooling_temperature_inlet'] < 10.0 and self.SYSTEMS['tabs_cooling_temperature_inlet'] != None:
            #print('Safety in progress')
            self.SYSTEMS['tabs_guard_valve_cooling'] = 1.0
            self.SYSTEMS['tabs_floor_valve_cooling'] = 1.0
            self.SYSTEMS['tabs_ceiling_valve_cooling'] = 1.0
            self.SYSTEMS['tabs_cooling_valve_cooling'] = -1.0
        for key, value in self.FloatToDigital.items():
            OnOffSignal[key] = value.update(self.SYSTEMS[key])
        try:
            for key, value in self.FloatToDigital.items():
                #_key = key.rsplit('_')
                #sy = _key[0]+'_' + _key[1]
                #me = _key[2]+'_' + _key[3]
                if 'valve_heating' in key:
                    #print(keytochannel[key], int(OnOffSignal[key]))
                    self.omega.write_channel(ch=keytochannel[key], value=int(OnOffSignal[key]))
                    #write_channel(self,ch=0, value=0)
                #if key == 'tabs_cooling_valve_cooling':
                #    print('Here: ', key, self.SYSTEMS[sy][me], OnOffSignal[key])

            #print(OnOffSignal)
            re = self.DATAQ.setOutputs(ch0=OnOffSignal['tabs_guard_valve_cooling'],
                                  ch1=OnOffSignal['tabs_floor_valve_cooling'],
                                  ch2=OnOffSignal['tabs_ceiling_valve_cooling'],
                                  ch3=OnOffSignal['tabs_cooling_valve_cooling'])
            #print('output from DataQ: ', re)

            self.ttl = 50
        except:
            #print('hardware error')
            pass
        try:
            #self.CPX400DP.set_voltage(10*self.SYSTEMS['tabs_cooling_valve_cooling'])
            self.CPX400DP['tabs_cooling_valve_cooling'].set_voltage(10*self.SYSTEMS['tabs_cooling_valve_cooling'])
            self.CPX400DP['tabs_guard_valve_cooling'].set_voltage(10*self.SYSTEMS['tabs_guard_valve_cooling'])
        except:
            pass
 
    def run(self):
        while not self.quit:
            #print('------------')
            time.sleep(1)
            self.update_pidvalues()
            self.update_temperatures()
            self.update_DO()
    def stop(self,):
        self.quit = True
        #self.DATAQ.close()
        #self.omega.all_off()
        self.CPX400DP['tabs_cooling_valve_cooling'].set_voltage(0.0)
        self.CPX400DP['tabs_guard_valve_cooling'].set_voltage(0.0)
        self.CPX400DP['tabs_cooling_valve_cooling'].output_status(on = False)
        self.CPX400DP['tabs_guard_valve_cooling'].output_status(on = False)
        self.omega.close()
예제 #3
0
from time import sleep
from pprint import pprint
#from PyExpLabSys.drivers.dataq_binary import DI1110
from PyExpLabSys.drivers.dataq_comm import DataQ
from PyExpLabSys.common.sockets import DateDataPullSocket


if __name__ == '__main__':
    #dataq = DI1110('/dev/serial/by-id/usb-DATAQ_Instruments_Generic_Bulk_Device_599C2B33_DI-1110-if00-port0')
    dataq = DataQ('/dev/serial/by-id/usb-0683_1450-if00')

    # For DataQ DI1110:
    #dataq.sample_rate(1000)
    #sleep(0.2)
    #dataq.scan_list([0, 1])
    #sleep(0.2)
    #dataq.start()
    #try:
    #    while True:
    #        dataq.clear_buffer()
    #        sleep(0.2)
    #        data = dataq.read()
    #        string = 'Channel {}: {: >6.4} V\tChannel {}: {: >6.4} V'.format(data[0]['channel'], data[0]['value'], data[1]['channel'], data[1]['value'])
    #        #string = str(data[1]['value'])
    #        print(string)
    #        for i in range(len(data)):
    #            datasocket.set_point_now(CODENAMES[i], data[i]['value'])
    #except KeyboardInterrupt:
    #    dataq.stop()
    #    datasocket.stop()