def init_gui(self): client = self.client connection_manager = ConnectionManager(client.manager) widgets = {} connected_servers = yield connection_manager.get_connected_servers() servers = yield self.client.manager.servers() def on_disconnect(server_name): widget = widgets.pop(server_name) self.removeTab( self.indexOf(widget) ) widget.deleteLater() @inlineCallbacks def on_connect(server_name): yield client.refresh() widget_class = WIDGETS[server_name] server = client.servers[server_name] widget = widget_class(server) widgets[server_name] = widget self.addTab(widget,server_name) for server_name,server_widget in WIDGETS.items(): connection_manager.on_server_connect( server_name, partial(on_connect,server_name) ) connection_manager.on_server_disconnect( server_name, partial(on_disconnect,server_name) ) if server_name in connected_servers: widget = server_widget( client.servers[server_name] ) widgets[server_name] = widget self.addTab(widget,server_name)
def initServer(self): self.update_requests = [] self.trigger_requests = [] self.temperature_limit_state = BELOW self.emission_current_limit_state = BELOW self.thermocouple_state = OK reg = self.client.registry reg.cd(REGISTRY_PATH) self.emission_current_limit = yield reg.get('emission current limit') self.temperature_limit = yield reg.get('temperature limit') self.thermocouple_failure_limit = yield reg.get('thermocouple failure limit') self.ramp_rate = yield reg.get('ramp rate') self.cooling_ramp_rate = yield reg.get('cooling ramp rate') self.filament_control_increment = yield reg.get('filament control increment') self.filament_control_fast_increment = yield reg.get('filament control fast increment') self.filament_control_threshold = yield reg.get('filament control threshold') self.emission_current_threshold = yield reg.get('emission current threshold') self.temperature_buffer = yield reg.get('temperature buffer') default_temperature_setpoint = yield reg.get('default temperature') self._set_temperature_setpoint(default_temperature_setpoint) sampling_duration = yield reg.get('sampling duration') cm = ConnectionManager(self.client.manager) required_servers = [VM_SERVER,AO_SERVER] servers = yield cm.get_connected_servers() for server in servers: if server in required_servers: print server, 'connected' required_servers.remove(server) @inlineCallbacks def finish_init(): voltmeter = self.client.voltmeter yield voltmeter.lock_setting(voltmeter.set_active_channels.ID) yield voltmeter.lock_setting(voltmeter.set_sampling_duration.ID) yield voltmeter.lock_setting(voltmeter.set_triggering.ID) yield voltmeter.set_sampling_duration(sampling_duration) yield voltmeter.set_active_channels(VOLTMETER_CHANNELS) yield voltmeter.set_triggering(False) analog_output = self.client.analog_output yield analog_output.select_device(FILAMENT_CONTROL) yield analog_output.lock() self._set_feedback_state(FEEDBACK_OFF) self._set_heating_state(COOLING) outputs = yield self.get_outputs() self.previous_time = clock() temperature = self.previous_temperature = outputs[TEMPERATURE] emission_current = outputs[EMISSION_CURRENT] self.update_temperature_limit_state(temperature) self.update_emission_current_limit_state(emission_current) self.update_thermocouple_state(temperature) self.loop() LockServer.initServer(self) def on_server_connected(server): print server, 'connected' required_servers.remove(server) cm.on_server_connect(server,None) if not required_servers: finish_init() if required_servers: for server in required_servers: print 'waiting for', server cm.on_server_connect(server,partial(on_server_connected,server)) else: yield finish_init()