Ejemplo n.º 1
0
 def _panels_default(self):
     self.sql_panel = SQLPanel()
     self.gasmixer_panel = GasMixerPanel()
     self.gpio_panel = GPIOPanel()
     self.plot_panel = PlotPanel()
     self.temperature_control_panel = TemperatureControlPanel()
     self.data_subscribers.append(self.sql_panel)
     self.data_subscribers.append(self.gpio_panel)
     self.data_subscribers.append(self.plot_panel)
     self.data_suppliers.append(self.gasmixer_panel)
     self.data_suppliers.append(self.temperature_control_panel)
     self.start_stop_subscribers.append(self.sql_panel)
     self.start_stop_subscribers.append(self.gasmixer_panel)
     self.start_stop_subscribers.append(self.gpio_panel)
     self.start_stop_subscribers.append(self.plot_panel)
     self.start_stop_subscribers.append(self.temperature_control_panel)
     return [self.sql_panel,
             self.gasmixer_panel,
             self.gpio_panel,
             self.plot_panel,
             self.temperature_control_panel]
Ejemplo n.º 2
0
class MeasureOverTimeTask(Task):
    """ A task for measure something over time.
    """

    #### 'Task' interface #####################################################

    id = 'sensorscience.unimeas.measureovertime'
    name = 'Measure over time'

    menu_bar = SMenuBar(SMenu(id='File', name='&File'),
                        SMenu(id='Edit', name='&Edit'),
                        SMenu(TaskToggleGroup(), id='Tasks', name='&Measurement type'),
                        SMenu(DockPaneToggleGroup(),  id='Measurement', name='&Panels'),
                        SMenu(InstrumentShowGroup(), id='Instrument', name='&Instrument'))

    active_instrument = Instance(IInstrument)
    sql_panel = Instance(SQLPanel)
    gasmixer_panel = Instance(GasMixerPanel)
    gpio_panel = Instance(GPIOPanel)
    plot_panel = Instance(PlotPanel)
    temperature_control_panel = Instance(TemperatureControlPanel)
    pane = Instance(EmptyCentralPane)
    instruments = List
    panels = List
    data_units = List

    start_stop_subscribers = List
    data_subscribers = List
    data_suppliers = List

    ###########################################################################
    # 'Task' interface.
    ###########################################################################

    def create_central_pane(self):
        """ Create a plot pane with a list of instruments. Keep track of which
            instrument is active so that dock panes can introspect it.
        """
        return EmptyCentralPane()

    def create_dock_panes(self):
        self.active_instrument = self.instruments[0]
        return [ GenericPane(panel=self.active_instrument,
                                id = 'sensorscience.unimeas.instrument_config_pane',
                                name = 'Instrument configuration'),
                 InstrumentHelpPane(instrument=self.active_instrument),
                 GenericPane(panel=self.panels[0],
                                id = self.panels[0].pane_id,
                                name = self.panels[0].pane_name),
                 GenericPane(panel=self.panels[1],
                                id = self.panels[1].pane_id,
                                name = self.panels[1].pane_name),
                 GenericPane(panel=self.panels[2],
                                id = self.panels[2].pane_id,
                                name = self.panels[2].pane_name),
                 GenericPane(panel=self.panels[3],
                                id = self.panels[3].pane_id,
                                name = self.panels[3].pane_name),
                GenericPane(panel=self.panels[4],
                                id = self.panels[4].pane_id,
                                name = self.panels[4].pane_name),                 ]

    def activated(self):
        self._update_active_instrument(None, None, None, None)

    def set_active_instrument(self, instrument):
        self.active_instrument = instrument

    #### Trait initializers ###################################################

    def _default_layout_default(self):
        return TaskLayout(
            left=Splitter(Tabbed(PaneItem('sensorscience.unimeas.instrument_config_pane'),
                        PaneItem('sensorscience.unimeas.instrument_help_pane')),
                        PaneItem(self.panels[0].pane_id),
                        PaneItem(self.panels[1].pane_id),
                        orientation = 'vertical'),
            right=PaneItem('sensorscience.unimeas.plot_pane')
            )

    def _instruments_default(self):
        instruments = []
        try:
            from instruments.blank import Blank
        except ImportError as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(Blank())

        try:
            from instruments.dummysourcemetertime import DummySourcemeterTime
        except ImportError as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(DummySourcemeterTime())

        try:
            from instruments.sourcemeter import SourceMeter
        except ImportError as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        #except WindowsError:
        #    pass
        else:
            instruments.append(SourceMeter())

        try:
            from instruments.ni6215 import NI6215
        except ImportError as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(NI6215())

        try:
            from instruments.SB50_moslab import NI6215_MOSLab
        except ImportError as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(NI6215_MOSLab())

        try:
            from instruments.TGS2442_moslab import TGS2442_MOSLab
        except ImportError as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(TGS2442_MOSLab())
        
        try:
            from instruments.sensic_cu import SenSiCCU
        except ImportError as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(SenSiCCU())

        try:
            from instruments.K2100 import K2100
        except ImportError as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(K2100())

        try:
            from instruments.time_boonton7200 import Boonton7200
        except ImportError as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(Boonton7200())

        try:
            from instruments.time_agilent_4284 import Agilent4284
        except Exception as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(Agilent4284())

        try:
            from instruments.ad7451a import ad7451a
        except Exception as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(ad7451a())

        try:
            from instruments.pyboard_serial import PyBoardSerial
        except Exception as e:
            logger.warning('Error on import: %s, %s', type(e), e.message)
        else:
            instruments.append(PyBoardSerial())

        return instruments

    def _panels_default(self):
        self.sql_panel = SQLPanel()
        self.gasmixer_panel = GasMixerPanel()
        self.gpio_panel = GPIOPanel()
        self.plot_panel = PlotPanel()
        self.temperature_control_panel = TemperatureControlPanel()
        self.data_subscribers.append(self.sql_panel)
        self.data_subscribers.append(self.gpio_panel)
        self.data_subscribers.append(self.plot_panel)
        self.data_suppliers.append(self.gasmixer_panel)
        self.data_suppliers.append(self.temperature_control_panel)
        self.start_stop_subscribers.append(self.sql_panel)
        self.start_stop_subscribers.append(self.gasmixer_panel)
        self.start_stop_subscribers.append(self.gpio_panel)
        self.start_stop_subscribers.append(self.plot_panel)
        self.start_stop_subscribers.append(self.temperature_control_panel)
        return [self.sql_panel,
                self.gasmixer_panel,
                self.gpio_panel,
                self.plot_panel,
                self.temperature_control_panel]

    #### Trait change handlers ################################################

    @on_trait_change('active_instrument')
    def _update_active_instrument(self, obj, name, old, new):
        #try:
        #    self.data_suppliers.remove(old)
        #except ValueError:
        #    pass
        #self.data_suppliers.append(new)
        self.on_trait_change(self._dispatch_data, 'active_instrument.acquired_data[]')
        self.on_trait_change(self._start_stop, 'active_instrument.start_stop')
        self.on_trait_change(self.plot_panel.update_visible_plots, 'active_instrument.enabled_channels[]')
        self.configure_new_instrument()
        self.plot_panel.configure_plots(self.active_instrument)
        self.gpio_panel.active_instrument = self.active_instrument
        self.gasmixer_panel.active_instrument = self.active_instrument
        for dock_pane in self.window.dock_panes:
            if dock_pane.id.find('instrument_config_pane') != -1:
                dock_pane.panel = self.active_instrument

    def configure_new_instrument(self):
        self.data_units = []
        for i in xrange(len(self.active_instrument.output_channels)):
            for x_unit in self.active_instrument.x_units.values():
                self.data_units.append(self.active_instrument.output_channels[i] + x_unit)
            for y_unit in self.active_instrument.y_units.values():
                self.data_units.append(self.active_instrument.output_channels[i] + y_unit)
        for supplier in self.data_suppliers:
            self.data_units.append(supplier.output_channels[0] + supplier.y_units[0])
        self.sql_panel.set_column_names(self.data_units)

    @on_trait_change('active_instrument.start_stop')
    def _start_stop(self):
        logger.info('otc, active_instrument.start_stop')
        for subscriber in self.start_stop_subscribers:
            subscriber.start_stop(self.active_instrument.running)

    def _dispatch_data(self):
        while len(self.active_instrument.acquired_data) > 0:
            data = self.active_instrument.acquired_data.pop(0).copy()
            for supplier in self.data_suppliers:
                data[supplier.output_channels[0]] = supplier.get_data()
#            data['gasmixer'] = self.gasmixer_panel.current_column
            for subscriber in self.data_subscribers:
                subscriber.add_data(data)