Part 3: EPICS -> ophyd
You used to type the PV string:
caget 3idxps1:m5.RBV
caput 3idxps1:m5.VAL 30
Now you address a Python object that wraps the PVs:
sample_stage.omega.user_readback.get()
sample_stage.omega.user_setpoint.put(30)
sample_stage.omega.move(30)
An EpicsMotor wraps ~12 PVs (.VAL, .RBV, .DMOV, .MOVN, .STOP,
.HLM, .LLM, .EGU, .OFF, ...). You access them as attributes.