Пример #1
0
 def OnInit(self):
     '''
     Load the main window from the main.xrc
     '''
     self.mainXrc = wx.xrc.XmlResource(cfg.ResourcePath('main.xrc'))
     self.InitFrame()
     return True
Пример #2
0
    def Connect(self, port):
        '''
        port - the name of the serial port. This works on unix and windows systems, given the appropriate name
        '''
        # This works only in windows, so port numbers are COM1,COM2 etc.
        portNumber = int(port.replace('COM', ''))

        tempDirChange = Chdir(cfg.ResourcePath())
        self.DLL = CDLL('uProcessDriver_C_V1_2_1.dll')
        del tempDirChange
        self.EIB = self.DLL.NewEIB()
        if self.EIB == 0:
            return False
        retCode = self.DLL.ConnectEIB(self.EIB, portNumber)
        if retCode != 0:
            return False
        self.syringePumps = {}
        self.valves = None
        self.sensors = None

        DeviceDataArray = c_ubyte * (self.MAX_DEVICE_ADDRESS + 1)
        deviceAddresses = DeviceDataArray()
        deviceTypes = DeviceDataArray()
        devicesNum = self.DLL.ScanDevices(self.EIB, byref(deviceAddresses),
                                          byref(deviceTypes))
        print str(devicesNum) + ' devices found:'
        if not devicesNum > 0:
            return False
        for idx in range(devicesNum):
            if deviceTypes[idx] == self.DEVICE_TYPE_SPS01:
                print 'SPS01 @' + str(deviceAddresses[idx])
                self.syringePumps[deviceAddresses[idx]] = self.DLL.NewSPS01(
                    self.EIB, c_ubyte(deviceAddresses[idx]))
                retCode = self.DLL.InitSyringe(
                    self.syringePumps[deviceAddresses[idx]])
                if retCode == 0:
                    return False
            if deviceTypes[idx] == self.DEVICE_TYPE_4VM01:
                print '4VM01 @' + str(deviceAddresses[idx])
                self.valves = self.DLL.New4VM01(self.EIB,
                                                c_ubyte(deviceAddresses[idx]))
                retCode = self.DLL.InitValves(self.valves)
                if retCode == 0:
                    return False
            if deviceTypes[idx] == self.DEVICE_TYPE_4AM01:
                print '4AM01 @' + str(deviceAddresses[idx])
                self.sensors = self.DLL.New4AM01(self.EIB,
                                                 c_ubyte(deviceAddresses[idx]))
                retCode = self.DLL.InitSensors(self.sensors)
                if retCode == 0:
                    return False

        return True
Пример #3
0
    def InitFrame(self):
        '''
        Init the main window
        '''
        self.listButtons = []
        self.runButtons = []
        self.mainFrame = self.mainXrc.LoadFrame(None, 'mainFrame')
        self.splitter = wx.xrc.XRCCTRL(self.mainFrame, 'splitter')
        self.mainFrame.SetTitle(self.system.name)
        self.mainFrame.Bind(wx.EVT_CLOSE, self.OnClose)

        # log
        self.logGraph = LogGraphPanel(
            wx.xrc.XRCCTRL(self.mainFrame, 'logGraphPage'), self.sysComps)
        self.Connect(-1, -1, cfg.EVT_LOG_UPDATE, self.OnLogUpdate)

        # update framework
        cfg.InitVariables(self)

        # Menu
        self.mainFrame.Bind(wx.EVT_MENU,
                            self.OnLoadSequence,
                            id=wx.xrc.XRCID('loadSequenceMenuItem'))
        self.mainFrame.Bind(wx.EVT_MENU,
                            self.OnSaveSequence,
                            id=wx.xrc.XRCID('saveSequenceMenuItem'))
        self.mainFrame.Bind(wx.EVT_MENU,
                            self.OnLoadMethod,
                            id=wx.xrc.XRCID('loadMethodMenuItem'))
        self.mainFrame.Bind(wx.EVT_MENU,
                            self.OnSaveMethod,
                            id=wx.xrc.XRCID('saveMethodMenuItem'))
        self.mainFrame.Bind(wx.EVT_MENU,
                            self.OnClose,
                            id=wx.xrc.XRCID('quitMenuItem'))
        self.mainFrame.Bind(wx.EVT_MENU,
                            self.OnAbout,
                            id=wx.xrc.XRCID('aboutMenuItem'))

        menusDict = dict(self.mainFrame.GetMenuBar().GetMenus())
        commMenu = [
            key for key, value in menusDict.iteritems() if value == 'Comm'
        ][0]
        for comp in self.sysComps:
            cfg.AddControllerIfNeeded(comp.controllerClass)

        for controller in cfg.controllers:
            menu = commMenu.Append(-1, controller.name,
                                   'Connect the ' + controller.name)
            self.mainFrame.Bind(wx.EVT_MENU, controller.OnMenuConnect, menu)

        # sysCompsPanel
        monitorPanel = wx.xrc.XRCCTRL(self.mainFrame, 'monitorPanel')
        self.stopButton = wx.BitmapButton(
            monitorPanel, -1,
            wx.Bitmap(cfg.ResourcePath('stopButton.png'), wx.BITMAP_TYPE_PNG))
        monitorPanel.GetSizer().Add(self.stopButton,
                                    flag=wx.BOTTOM
                                    | wx.ALIGN_CENTRE_HORIZONTAL)
        self.stopButton.Bind(wx.EVT_BUTTON, self.OnStopButton)

        self.sysCompsPanel = wx.xrc.XRCCTRL(self.mainFrame, 'sysCompsPanel')
        sysCompsPanelBoxSizer = self.sysCompsPanel.GetSizer()
        for sysComp in self.sysComps:
            panel = sysComp.CreatePanel(self.sysCompsPanel)
            if panel != None:
                sysCompsPanelBoxSizer.Add(panel)

        # make all sysComps fill their given area
        for sysCompPanel in sysCompsPanelBoxSizer.GetChildren():
            sysCompPanel.SetFlag(wx.GROW)
        sysCompsPanelBoxSizer.Fit(self.mainFrame)

        self.Connect(-1, -1, cfg.EVT_UPDATE_CONTROLS, self.OnUpdateControls)
        self.Connect(-1, -1, cfg.EVT_POP_MESSAGE, self.OnPopMessage)

        # Method
        self.actionsListCtrl = ActionsListCtrl(
            wx.xrc.XRCCTRL(self.mainFrame, 'methodPage'), self.sysActions)
        self.runButtons.append(self.actionsListCtrl.runButton)
        self.listButtons.extend([
            self.actionsListCtrl.list, self.actionsListCtrl.addButton,
            self.actionsListCtrl.removeButton
        ])

        # Sequence
        self.methodsListCtrl = MethodsListCtrl(
            wx.xrc.XRCCTRL(self.mainFrame, 'sequencePage'))
        self.runButtons.append(self.methodsListCtrl.runButton)
        self.listButtons.extend([
            self.methodsListCtrl.list, self.methodsListCtrl.addButton,
            self.methodsListCtrl.removeButton
        ])

        # This makes sure both pages are drawn
        notebook = wx.xrc.XRCCTRL(self.mainFrame, 'methodsAndSequences')
        notebook.SendPageChangedEvent(0, 1)
        self.mainFrame.GetSizer().Fit(self.mainFrame)
        notebook.SendPageChangedEvent(1, 0)

        # main frame
        self.splitter.SetSashPosition(400, True)
        self.mainFrame.GetSizer().Fit(self.mainFrame)
        self.UpdateControls()
        self.mainFrame.Show()

        # Monitor periodically
        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.MonitorUpdate, self.timer)
        self.timer.Start(self.monitorUpdateDelayMilisec)