def test(motor_record='XF:31IDA-OP{Tbl-Ax:X1}Mtr'): config.setup_logging([__name__, 'pypvserver.motor']) server = config.get_server() mrec = EpicsMotor(motor_record) # give the motor time to connect time.sleep(1.0) logger.info('--> PV Positioner, using put completion and a DONE pv') # PV positioner, put completion, done pv pos = PVPositioner( mrec.field_pv('VAL'), readback=mrec.field_pv('RBV'), done=mrec.field_pv('MOVN'), done_val=0, stop=mrec.field_pv('STOP'), stop_val=1, put_complete=True, limits=(-2, 2), ) ppv_motor = PypvMotor('m1', pos, server=server) print(ppv_motor.severity) record_name = ppv_motor.full_pvname for i in range(2): epics.caput(record_name, i, wait=True) print(pos.position) return ppv_motor
def put_complete_test(): motor_record = config.motor_recs[0] mrec = EpicsMotor(motor_record) logger.info('--> PV Positioner, using put completion and a DONE pv') # PV positioner, put completion, done pv pos = PVPositioner(mrec.field_pv('VAL'), readback=mrec.field_pv('RBV'), done=mrec.field_pv('MOVN'), done_val=0, put_complete=True, ) high_lim = pos._setpoint.high_limit try: pos.check_value(high_lim + 1) except ValueError as ex: logger.info('Check value for single failed, as expected (%s)' % ex) else: print('high lim is %f' % high_lim) raise ValueError('check_value should have failed') stat = pos.move(1, wait=False) logger.info('--> post-move request, moving=%s' % pos.moving) while not stat.done: logger.info('--> moving... %s error=%s' % (stat, stat.error)) time.sleep(0.1) pos.move(-1, wait=True) logger.info('--> synchronous move request, moving=%s' % pos.moving) logger.info('--> PV Positioner, using put completion and no DONE pv') # PV positioner, put completion, no done pv pos = PVPositioner(mrec.field_pv('VAL'), readback=mrec.field_pv('RBV'), put_complete=True, ) stat = pos.move(2, wait=False) logger.info('--> post-move request, moving=%s' % pos.moving) while not stat.done: logger.info('--> moving... %s' % stat) time.sleep(0.1) pos.move(0, wait=True) logger.info('--> synchronous move request, moving=%s' % pos.moving)
def put_complete_test(): motor_record = config.motor_recs[0] mrec = EpicsMotor(motor_record) logger.info('--> PV Positioner, using put completion and a DONE pv') # PV positioner, put completion, done pv pos = PVPositioner(mrec.field_pv('VAL'), readback=mrec.field_pv('RBV'), done=mrec.field_pv('MOVN'), done_val=0, put_complete=True, ) pos.move(1, wait=False) logger.info('--> post-move request, moving=%s' % pos.moving) while pos.moving: logger.info('--> moving...') time.sleep(0.1) pos.move(-1, wait=True) logger.info('--> synchronous move request, moving=%s' % pos.moving) logger.info('--> PV Positioner, using put completion and no DONE pv') # PV positioner, put completion, no done pv pos = PVPositioner(mrec.field_pv('VAL'), readback=mrec.field_pv('RBV'), put_complete=True, ) pos.move(2, wait=False) logger.info('--> post-move request, moving=%s' % pos.moving) while pos.moving: logger.info('--> moving...') time.sleep(0.1) pos.move(0, wait=True) logger.info('--> synchronous move request, moving=%s' % pos.moving)
from ophyd.controls import PVPositioner # Undulator epu1_gap = PVPositioner('XF:23ID-ID{EPU:1-Ax:Gap}Pos-SP', readback='XF:23ID-ID{EPU:1-Ax:Gap}Pos-I', stop='SR:C23-ID:G1A{EPU:1-Ax:Gap}-Mtr.STOP', stop_val=1, put_complete=True, name='epu1_gap') epu2_gap = PVPositioner('XF:23ID-ID{EPU:2-Ax:Gap}Pos-SP', readback='XF:23ID-ID{EPU:2-Ax:Gap}Pos-I', stop='SR:C23-ID:G1A{EPU:2-Ax:Gap}-Mtr.STOP', stop_val=1, put_complete=True, name='epu2_gap') epu1_phase = PVPositioner('XF:23ID-ID{EPU:1-Ax:Phase}Pos-SP', readback='XF:23ID-ID{EPU:1-Ax:Phase}Pos-I', stop='SR:C23-ID:G1A{EPU:1-Ax:Phase}-Mtr.STOP', stop_val=1, put_complete=True, name='epu1_phase') epu2_phase = PVPositioner('XF:23ID-ID{EPU:2-Ax:Phase}Pos-SP', readback='XF:23ID-ID{EPU:2-Ax:Phase}Pos-I', stop='SR:C23-ID:G1A{EPU:2-Ax:Phase}-Mtr.STOP', stop_val=1, put_complete=True, name='epu2_phase')
from ophyd.controls import EpicsMotor, PVPositioner, EpicsSignal # M1A kwargs = { 'act': 'XF:23IDA-OP:1{Mir:1}MOVE_CMD.PROC', 'act_val': 1, 'stop': 'XF:23IDA-OP:1{Mir:1}STOP_CMD.PROC', 'stop_val': 1, 'done': 'XF:23IDA-OP:1{Mir:1}BUSY_STS', 'done_val': 0 } m1a_z = PVPositioner('XF:23IDA-OP:1{Mir:1-Ax:Z}Mtr_POS_SP', readback='XF:23IDA-OP:1{Mir:1-Ax:Z}Mtr_MON', name='m1a_z', **kwargs) m1a_y = PVPositioner('XF:23IDA-OP:1{Mir:1-Ax:Y}Mtr_POS_SP', readback='XF:23IDA-OP:1{Mir:1-Ax:Y}Mtr_MON', name='m1a_y', **kwargs) m1a_x = PVPositioner('XF:23IDA-OP:1{Mir:1-Ax:X}Mtr_POS_SP', readback='XF:23IDA-OP:1{Mir:1-Ax:X}Mtr_MON', name='m1a_x', **kwargs) m1a_pit = PVPositioner('XF:23IDA-OP:1{Mir:1-Ax:Pit}Mtr_POS_SP', readback='XF:23IDA-OP:1{Mir:1-Ax:Pit}Mtr_MON', name='m1a_pit', **kwargs) m1a_yaw = PVPositioner('XF:23IDA-OP:1{Mir:1-Ax:Yaw}Mtr_POS_SP', readback='XF:23IDA-OP:1{Mir:1-Ax:Yaw}Mtr_MON',
def test(): global logger def callback(sub_type=None, timestamp=None, value=None, **kwargs): logger.info('[callback] [%s] (type=%s) value=%s' % (timestamp, sub_type, value)) def done_moving(**kwargs): logger.info('Done moving %s' % (kwargs, )) loggers = ('ophyd.controls.signal', 'ophyd.controls.positioner', 'ophyd.session', ) config.setup_loggers(loggers) logger = config.logger fm = config.fake_motors[0] # ensure we start at 0 for this simple test epics.caput(fm['setpoint'], 0) epics.caput(fm['actuate'], 1) time.sleep(2) if 0: pos = PVPositioner(fm['setpoint'], readback=fm['readback'], act=fm['actuate'], act_val=1, stop=fm['stop'], stop_val=1, done=fm['moving'], done_val=1, put_complete=False, ) pos.subscribe(callback, event_type=pos.SUB_DONE) pos.subscribe(callback, event_type=pos.SUB_READBACK) logger.info('---- test #1 ----') logger.info('--> move to 1') pos.move(1) logger.info('--> move to 0') pos.move(0) logger.info('---- test #2 ----') logger.info('--> move to 1') pos.move(1, wait=False) time.sleep(0.5) logger.info('--> stop') pos.stop() logger.info('--> sleep') time.sleep(1) logger.info('--> move to 0') pos.move(0, wait=False, moved_cb=done_moving) logger.info('--> post-move request, moving=%s' % pos.moving) time.sleep(2) # m2.move(1) put_complete_test()
from ophyd.controls import PVPositioner, EpicsMotor # Diffo angles delta = EpicsMotor('XF:23ID1-ES{Dif-Ax:Del}Mtr', name='delta') gamma = EpicsMotor('XF:23ID1-ES{Dif-Ax:Gam}Mtr', name='gamma') theta = EpicsMotor('XF:23ID1-ES{Dif-Ax:Th}Mtr', name='theta') # Sample positions sx = EpicsMotor('XF:23ID1-ES{Dif-Ax:X}Mtr', name='sx') sy = PVPositioner('XF:23ID1-ES{Dif-Ax:SY}Pos-SP', readback='XF:23ID1-ES{Dif-Ax:SY}Pos-RB', stop='XF:23ID1-ES{Dif-Cryo}Cmd:Stop-Cmd', stop_val=1, put_complete=True, name='sy') sz = PVPositioner('XF:23ID1-ES{Dif-Ax:SZ}Pos-SP', readback='XF:23ID1-ES{Dif-Ax:SZ}Pos-RB', stop='XF:23ID1-ES{Dif-Cryo}Cmd:Stop-Cmd', stop_val=1, put_complete=True, name='sz') cryoangle = PVPositioner('XF:23ID1-ES{Dif-Cryo}Pos:Angle-SP', readback='XF:23ID1-ES{Dif-Cryo}Pos:Angle-RB', name='cryoangle') # Nano-positioners
2: 'N2', 3: 'He' }) th_cal = EpicsMotor('XF:28IDC-ES:1{Dif:2-Ax:Th}Mtr', name='th_cal') tth_cal = EpicsMotor('XF:28IDC-ES:1{Dif:2-Ax:2Th}Mtr', name='tth_cal') th = EpicsMotor('XF:28IDC-ES:1{Dif:1-Ax:Th}Mtr', name='th') tth = EpicsMotor('XF:28IDC-ES:1{Dif:1-Ax:2ThI}Mtr', name='tth') diff_x = EpicsMotor('XF:28IDC-ES:1{Dif:1-Ax:X}Mtr', name='diff_x') diff_y = EpicsMotor('XF:28IDC-ES:1{Dif:1-Ax:Y}Mtr', name='diff_y') cs700 = PVPositioner( 'XF:28IDC-ES:1{Env:01}T-SP', readback='XF:28IDC-ES:1{Env:01}T-I', #done='XF:28IDC-ES:1{Env:01}Cmd-Busy', done_val=0, stop='XF:28IDC-ES:1{Env:01}Cmd-Cmd', stop_val=13, put_complete=True, name='cs700') def thetaLoad(): th.move(THETA_LOAD) return def thetaMeasure(): th.move(THETA_MEASURE) return
from ophyd.controls import PVPositioner # Undulator ivu1_gap = PVPositioner('SR:C5-ID:G1{IVU21:1-Mtr:2}Inp:Pos', readback='SR:C5-ID:G1{IVU21:1-LEnc}Gap', stop='SR:C5-ID:G1{IVU21:1-Mtrc}Sw:Stp', stop_val=1, put_complete=True, name='ivu1_gap') # Front End Slits (Primary Slits) fe_tb = PVPositioner('FE:C05A-OP{Slt:3-Ax:T}Mtr.VAL', readback='FE:C05A-OP{Slt:3-Ax:T}Mtr.RBV', stop='FE:C05A-OP{Slt:3-Ax:T}Mtr.STOP', stop_val=1, put_complete=True, name='fe_tb') fe_bb = PVPositioner('FE:C05A-OP{Slt:4-Ax:B}Mtr.VAL', readback='FE:C05A-OP{Slt:4-Ax:B}Mtr.RBV', stop='FE:C05A-OP{Slt:4-Ax:B}Mtr.STOP', stop_val=1, put_complete=True, name='fe_bb') fe_ib = PVPositioner('FE:C05A-OP{Slt:3-Ax:I}Mtr.VAL', readback='FE:C05A-OP{Slt:3-Ax:I}Mtr.RBV', stop='FE:C05A-OP{Slt:3-Ax:I}Mtr.STOP', stop_val=1,