Esempio n. 1
0
def test_read_pv_timestamp_no_monitor(motor):
    sp = EpicsSignal(motor.user_setpoint.pvname, name='test')
    rbv = EpicsSignalRO(motor.user_readback.pvname, name='test')

    rbv_value0 = rbv.get()
    ts0 = rbv.timestamp
    sp.put(sp.value + 0.1, wait=True)
    time.sleep(0.1)

    rbv_value1 = rbv.get()
    ts1 = rbv.timestamp
    assert ts1 > ts0
    assert_almost_equal(rbv_value0 + 0.1, rbv_value1)

    sp.put(sp.value - 0.1, wait=True)
Esempio n. 2
0
class Part:
    def __init__(self, part):
        # Let errors propagate
        self._name = part.get('name')
        self._vset = part.get('vset')
        self._base = part.get('base')
        self._scale = part.get('scale')
        self._ramping = EpicsSignalRO(f'{self._base}{RAMPING}')
        self._set_voltage = EpicsSignal(f'{self._base}{VSET}')

    @property
    def name(self):
        return self._name

    @property
    def vset(self):
        return self._vset

    @property
    def base(self):
        return self._base

    def set_voltage(self, zero=False):
        if zero:
            self._set_voltage.put(0)
        else:
            self._set_voltage.put(self.vset)

    @property
    def ramping(self):
        return self._ramping.get()
Esempio n. 3
0
    def test_read_pv_timestamp_no_monitor(self):
        mtr = EpicsMotor(config.motor_recs[0], name='test')
        mtr.wait_for_connection()

        sp = EpicsSignal(mtr.user_setpoint.pvname, name='test')
        rbv = EpicsSignalRO(mtr.user_readback.pvname, name='test')

        rbv_value0 = rbv.get()
        ts0 = rbv.timestamp
        sp.put(sp.value + 0.1, wait=True)
        time.sleep(0.1)

        rbv_value1 = rbv.get()
        ts1 = rbv.timestamp
        self.assertGreater(ts1, ts0)
        self.assertAlmostEqual(rbv_value0 + 0.1, rbv_value1)

        sp.put(sp.value - 0.1, wait=True)
Esempio n. 4
0
    def test_read_pv_timestamp_monitor(self):
        mtr = EpicsMotor(config.motor_recs[0])
        mtr.wait_for_connection()

        sp = EpicsSignal(mtr.user_setpoint.pvname, auto_monitor=True)
        rbv = EpicsSignalRO(mtr.user_readback.pvname, auto_monitor=True)

        rbv_value0 = rbv.get()
        ts0 = rbv.timestamp
        sp.put(sp.value + 0.1, wait=True)
        time.sleep(0.1)

        rbv_value1 = rbv.get()
        ts1 = rbv.timestamp
        self.assertGreater(ts1, ts0)
        self.assertAlmostEqual(rbv_value0 + 0.1, rbv_value1)

        sp.put(sp.value - 0.1, wait=True)
def check_workstation_access():
    wa = EpicsSignalRO('XF:06BM-CT{}Prmt:RemoteExp-Sel', name='write_access')
    if wa.get() == 0:
        print(
            f'{TAB}*** Uh oh!  The beamline is not enabled for write access to PVs!'
        )
        print(f'{TAB}    You need to get a beamline staff person to do:')
        print(f'{TAB}       caput XF:06BM-CT{{}}Prmt:RemoteExp-Sel 1')
        print(f'{TAB}    then restart bsui')
        ## the next line is intended to trigger an immediate error and return to the IPython command line
        wa.put(1)
Esempio n. 6
0
def instrument_in_use():
    """check if the soft IOC for 6BM-A"""
    from ophyd import EpicsSignalRO
    tmp = EpicsSignalRO("6bm:instrument_in_use", name="tmp")
    try:
        state = tmp.get()
    except TimeoutError:
        state = False
        print("🙈: cannot find this soft IOC PV, please check the settings.")
    finally:
        print(f"🙈: the instrument is {'' if state else 'not'} in use.")
        return state
Esempio n. 7
0
from ophyd import EpicsSignalWithRBV
from ophyd import PVPositioner
from ophyd import Signal
import datetime
import os
import time

SECOND = 1
MINUTE = 60 * SECOND
HOUR = 60 * MINUTE

# write output to log file in userDir, name=MMDD-HHmm-heater-log.txt
user_dir = EpicsSignalRO("9idcLAX:userDir", name="user_dir", string=True)
user_dir.wait_for_connection()
log_file_name = os.path.join(
    user_dir.get(),
    datetime.datetime.now().strftime("%m%d-%H%M-heater-log.txt"))

# Can't call the instrument package in this module.
# Thus, we must re-define these devices here


class FeatureMixin(Device):
    @property
    def settled(self):
        return self.done.get() == self.done_value


class Linkam_CI94_Device(FeatureMixin, PVPositioner):
    """The old Linkam controller."""
    readback = Component(EpicsSignalRO, "temp", kind="normal")
Esempio n. 8
0
 def get_motor_pv(label):
     _pv_signal = EpicsSignalRO(f"{prefix}Kohzu{label}PvSI", name="tmp")
     _pv_signal.wait_for_connection()
     return _pv_signal.get(as_string=True)