def __init__(self, channel_name, supply, logical_channel=0, error_tol_absolute=0.01, error_tol_relative=0.005, settling_time=2.0, max_wiring_resistance=None, min_wiring_resistance=None, relay_channel_name=None, max_switch_current=0.01): self.name=channel_name self.supply=supply self.relay_channel_name=relay_channel_name system_data.define_field(channel_name, self, (), writable=1) self.settled_time=time.time()+settling_time #in the future, don't worry now self.error_tol_absolute2=error_tol_absolute*error_tol_absolute #amps**2 self.error_tol_relative2=error_tol_relative*error_tol_relative #(delta-I/I)**2 self.settling_time=settling_time self.max_wiring_resistance=max_wiring_resistance self.min_wiring_resistance=min_wiring_resistance self.channel_reader, self.channel_writer, lazy_writer, self.channel_info=supply.bind_field_info(logical_channel) #save so we can read efficiently if relay_channel_name: system_data[relay_channel_name]=0 #clear relays at start for positive output (by definition) self.max_switch_current=max_switch_current self.handle_switch=self.Thread(target=self.handle_switch, name=channel_name+"_switcher") self.switch_event=threading.Event() #self.handle_switch.setDaemon(1) #make it daemonic, in case we forget to close it (leave off so it is easy to detect bad closing!) self.keep_running=1 self.handle_switch.start()
def __init__( self, channel_name, supply, logical_channel=0, error_tol_absolute=0.01, error_tol_relative=0.005, settling_time=2.0, max_wiring_resistance=None, min_wiring_resistance=None, relay_channel_name=None, max_switch_current=0.01): self.name = channel_name self.supply = supply self.relay_channel_name = relay_channel_name system_data.define_field(channel_name, self, (), writable=1) # in the future, don't worry now self.settled_time = time.time() + settling_time # amps**2 self.error_tol_absolute2 = error_tol_absolute * error_tol_absolute # (delta-I/I)**2 self.error_tol_relative2 = error_tol_relative * error_tol_relative self.settling_time = settling_time self.max_wiring_resistance = max_wiring_resistance self.min_wiring_resistance = min_wiring_resistance self.channel_reader, self.channel_writer, lazy_writer, self.channel_info = supply.bind_field_info( logical_channel) # save so we can read efficiently if relay_channel_name: # clear relays at start for positive output (by definition) system_data[relay_channel_name] = 0 self.max_switch_current = max_switch_current self.handle_switch = self.Thread( target=self.handle_switch, name=channel_name + "_switcher") self.switch_event = threading.Event() # self.handle_switch.setDaemon(1) #make it daemonic, in case we forget to # close it (leave off so it is easy to detect bad closing!) self.keep_running = 1 self.handle_switch.start()
def handle_alarm(level): global serious_alarm_happened if isinstance(level, alarm_system.SeriousSystemError): serious_alarm_happened=1 #print "********ALARM******** "+str(level) if not scan_adc.get_monitor_thread().isAlive(): #this is for interactive testing, in case I have killed the thread scan_adc.run_thread() alarm_system.start_critical_thread_monitor() magnets=mymagsys() try: data.define_field("magnet_1_setpoint", dac1, 0, writable=1) data.define_field("magnet_1_current_rdbk", scan_adc, 2, writable=0) data.define_field("magnet_1_voltage_rdbk", scan_adc, 3, writable=0) data.define_field("magnet_1_relay", dio, (2,1), writable=1) data.define_field("adc_low_4", scan_adc,(0,1,2,3), writable=0) mymag=analog_magnet("magnet_1", da_name="magnet_1_setpoint", ad_voltage_name="magnet_1_voltage_rdbk", ad_current_name="magnet_1_current_rdbk", ad_transconductance=0.99) magnets.add_supply(mymag) mymagchan=magnet_channel("magnet_1", mymag, error_tol_absolute=0.03, error_tol_relative=0.005, settling_time=1, max_wiring_resistance=None, min_wiring_resistance=None,
def handle_alarm(level): global serious_alarm_happened if isinstance(level, alarm_system.SeriousSystemError): serious_alarm_happened = 1 # print "********ALARM******** "+str(level) if not scan_adc.get_monitor_thread().isAlive(): # this is for interactive testing, in case I have killed the thread scan_adc.run_thread() alarm_system.start_critical_thread_monitor() magnets = mymagsys() try: data.define_field("magnet_1_setpoint", dac1, 0, writable=1) data.define_field("magnet_1_current_rdbk", scan_adc, 2, writable=0) data.define_field("magnet_1_voltage_rdbk", scan_adc, 3, writable=0) data.define_field("magnet_1_relay", dio, (2, 1), writable=1) data.define_field("adc_low_4", scan_adc, (0, 1, 2, 3), writable=0) mymag = analog_magnet("magnet_1", da_name="magnet_1_setpoint", ad_voltage_name="magnet_1_voltage_rdbk", ad_current_name="magnet_1_current_rdbk", ad_transconductance=0.99) magnets.add_supply(mymag) mymagchan = magnet_channel("magnet_1", mymag,