Example #1
0
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
Example #2
0
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)
Example #3
0
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)
Example #4
0
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')
Example #5
0
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',
Example #6
0
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

Example #9
0
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,