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"))
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
def move(self, pos): self.__move_pv.put(pos) pyca.pend_io(.5) pass
def set(self, val, pend_io=True): caput(self.get_pv_name(), val) if pend_io: pyca.pend_io(EPICS_IO_PEND_TIME) pass
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()