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)
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()
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()