Example #1
0
	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()
Example #2
0
  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()
Example #3
0
	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, 
Example #4
0
    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,