Beispiel #1
0
    def _ims_align(self):
        #align_offset = 76.25
        align_offset = 68.1328 + 11.25
        #align_offset = 658.1328 + 11.25

        pvname = '%s.HOMF' % self.parent.sPpmPv
        caput(pvname, 1)

        dmovpv = DoneMoving(self.parent.sPpmPv + '.DMOV')
        pyca.pend_io(1.0)
        dmovpv.wait_for_done(20)

        # tweek -76.25
        pvname = '%s.TWV' % self.parent.sPpmPv
        caput(pvname, align_offset)
        time.sleep(1.5)
        pvname = '%s.TWR' % self.parent.sPpmPv
        caput(pvname, 1)

        dmovpv = DoneMoving(self.parent.sPpmPv + '.DMOV')
        pyca.pend_io(1.0)
        dmovpv.wait_for_done(20)

        # Clear all errors and reset counter values
        pvname = '%s:RESET_PG' % self.parent.sPpmPv
        caput(pvname, 1)
        pvname = '%s:SET_C1' % self.parent.sPpmPv
        caput(pvname, 0)
        pvname = '%s:SET_C2' % self.parent.sPpmPv
        caput(pvname, 0)
        time.sleep(2)
        # Set default parameters for 30Hz
        pvname = '%s:SETUP_30HZ' % self.parent.sPpmPv
        caput(pvname, 1)
        self.emit(QtCore.SIGNAL("_onalign"))
Beispiel #2
0
    def _ims_openclose(self, position):
        if position == 'Open':
            self.emit(QtCore.SIGNAL("_onOpening"))
            pos_offset = 65.0
        elif position == 'Close':
            self.emit(QtCore.SIGNAL("_onClosing"))
            pos_offset = 65.0 + 90.00
        else:
            return False
        pvname = '%s.HOMF' % self.parent.sPpmPv
        caput(pvname, 1)
        #        time.sleep(6)
        dmovpv = DoneMoving(self.parent.sPpmPv + '.DMOV')
        pyca.pend_io(1.0)
        dmovpv.wait_for_done(20)

        # tweek -76.25
        pvname = '%s.TWV' % self.parent.sPpmPv
        caput(pvname, pos_offset)
        time.sleep(1.5)
        pvname = '%s.TWR' % self.parent.sPpmPv
        caput(pvname, 1)
        #time.sleep(1.5)

        dmovpv = DoneMoving(self.parent.sPpmPv + '.DMOV')
        pyca.pend_io(1.0)
        dmovpv.wait_for_done(20)
        #        # Clear all errors and reset counter values
        #        pvname = '%s:RESET_PG' % self.parent.sPpmPv
        #        caput(pvname, 1)
        #        time.sleep(2)
        # Set default parameters for 30Hz
        pvname = '%s:SETUP_30HZ' % self.parent.sPpmPv
        caput(pvname, 1)

        if position == 'Open':
            self.emit(QtCore.SIGNAL("_onOpen"))
        elif position == 'Close':
            self.emit(QtCore.SIGNAL("_onClose"))
        else:
            return False
        return True
    def save_motors(self, motors):
        i = 0
        im = len(motors)
        for m in motors:
            er_pvname = m.pvname + ":ER"
            er_pv = Pv(er_pvname)
            er_pv.connect(5)
            er_clr_pv = Pv(m.pvname + ":CLR_ER")
            er_clr_pv.connect(5)
            er_pv.get(timeout=5)
            pyca.pend_io(5)
            er_old = er_pv.data['value']

            pyca.pend_io(5)
            er_pv.get(timeout=5)
            pyca.pend_io(5)
            er_new = er_pv.data['value']
            print "%3d/%3d   %-15s   %2s   %2s" % (int(i + 1), im, m.name,
                                                   str(er_old), str(er_new))
            i += 1
            pass
        pass
        options.parse()
    except Exception, msg:
        options.usage(str(msg))
        sys.exit()

    motorpvname = options.motorpvname
    position = float(options.start)
    end = float(options.end)
    delta = float(options.delta)

    try:
        motorpv = Pv(motorpvname)
        motorpv.connect(1.0)
        dmovpv = donemoving(motorpvname + '.DMOV')
        steps = int((end - position) / delta)
        for step in range(0, steps + 1):
            starttime = time.time()
            motorpv.put(position)
            pyca.pend_io(.1)
            dmovpv.wait_for_done(10)
            elapsed = time.time() - starttime
            print 'pos %f time %.4f elapsed %f' % (position, starttime,
                                                   elapsed)
            position += delta
    except pyca.pyexc, e:
        print 'pyca exception: %s' % (e)
    except pyca.caexc, e:
        print 'channel access exception: %s' % (e)
    except Exception, e:
        print e
Beispiel #5
0
 def move(self, pos):
     self.__move_pv.put(pos)
     pyca.pend_io(.5)
     pass
Beispiel #6
0
 def set(self, val, pend_io=True):
     caput(self.get_pv_name(), val)
     if pend_io:
         pyca.pend_io(EPICS_IO_PEND_TIME)
     pass
Beispiel #7
0
    def connect(self):
        connection_progress = 0
        #We iterate through the bpm list six times in the code below.
        max_progress = self.progress_total()
        #First, get Z values for all BPMs.
        print("Starting connection")
        try:
            z_positions = model.get_zpos(self.names(),
                                         full_model=model_data,
                                         ignore_bad_names=True)
            print("Retrieved Z values from the model.")
            for i, z in enumerate(z_positions):
                self.bpms[i].z = z
            connection_progress += 3
            print("Connection progress = {}".format(connection_progress))
            self.connectionProgress.emit()
            QApplication.instance().processEvents()
        except (IOError, NameError):
            #Getting z positions from the model didn't work, try getting from PVs instead.
            for bpm in self.bpms:
                bpm.z_pv_obj = Pv(bpm.z_pv())
            print("Getting from PVs instead")
            for bpm in self.bpms:
                bpm.z_pv_obj.connect()
            pyca.pend_event(0.2)
            connection_progress += 1
            self.connectionProgress.emit()
            QApplication.instance().processEvents()

            #Now check and see if Z pvs are connected.
            retries = 0
            max_retries = 50
            while retries < max_retries:
                all_connected = True
                for i, bpm in enumerate(self.bpms):
                    if bpm.z_pv_obj.state() != 2:
                        print(bpm.z_pv_obj.name)
                        all_connected = False
                if not all_connected:
                    print("Retrying Z Position PV connections...")
                    pyca.pend_event(.2)
                else:
                    break
                retries = retries + 1
            if retries == max_retries:
                print("Some BPMs failed to connect.  Removing: {}".format([
                    bpm.name for bpm in self.bpms if bpm.z_pv_obj.state() != 2
                ]))

                self.bpms = [
                    bpm for bpm in self.bpms if bpm.z_pv_obj.state() == 2
                ]
                #raise Exception("Could not connect to all Z PVs after {} retries.".format(retries))
            connection_progress += 1
            self.connectionProgress.emit()
            QApplication.instance().processEvents()

            for bpm in self.bpms:
                bpm.z_pv_obj.get(ctrl=False)
            pyca.flush_io()
            pyca.pend_event(0.2)
            pyca.pend_io(2.2)

            connection_progress += 1
            self.connectionProgress.emit()
            QApplication.instance().processEvents()

            for bpm in self.bpms:
                bpm.z = bpm.z_pv_obj.value
                bpm.z_pv_obj.disconnect()
        self.sort_bpms_by_z()

        #Next, establish monitors for all the BPMs.
        #print("Connecting to PVs...")
        for bpm in self.bpms:
            bpm.x_pv_obj = Pv(bpm.x_pv())
            bpm.y_pv_obj = Pv(bpm.y_pv())
            bpm.tmit_pv_obj = Pv(bpm.tmit_pv())

        bpm_pvs_connected = 0
        total_bpm_pvs = len(self.bpms) * len(self.bpms[0].pv_objects())
        for bpm in self.bpms:
            for pv in bpm.pv_objects():
                pv.connect()
        pyca.pend_event(.2)
        connection_progress += 1
        self.connectionProgress.emit()
        QApplication.instance().processEvents()

        #Now check and see if everything is connected.
        retries = 0
        max_retries = 3
        while retries < max_retries:
            all_connected = True
            for i, bpm in enumerate(self.bpms):
                if any([pv.state() != 2 for pv in bpm.pv_objects()]):
                    all_connected = False
            if not all_connected:
                print("Retrying connection to BPM PVs...")
                pyca.pend_event(.2)
            else:
                break
            retries = retries + 1
            time.sleep(1.0)
        if retries == max_retries:
            raise Exception(
                "Could not connect to all PVs after {} retries.".format(
                    retries))
        connection_progress += 1
        self.connectionProgress.emit()
        QApplication.instance().processEvents()

        monitors_established = 0
        for bpm in self.bpms:
            for pv in bpm.pv_objects():
                pv.monitor(pyca.DBE_VALUE | pyca.DBE_ALARM)
        pyca.pend_event(.2)
        connection_progress += 1
        self.connectionProgress.emit()
        QApplication.instance().processEvents()
        self.connected = True
        self.connectFinished.emit()
        QApplication.instance().processEvents()