mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2026-02-06 23:28:41 +01:00
feat: add continous readout of encoder while scanning
This commit is contained in:
@@ -264,6 +264,9 @@ class GalilController(Controller):
|
|||||||
LimitError: Raised if the speed is above 2mm/s or below 0.02mm/s
|
LimitError: Raised if the speed is above 2mm/s or below 0.02mm/s
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
#time.sleep(0.2)
|
||||||
|
|
||||||
# Check limits
|
# Check limits
|
||||||
# TODO check sign of stage, or not necessary
|
# TODO check sign of stage, or not necessary
|
||||||
check_values = [start_y, end_y, start_x, end_x]
|
check_values = [start_y, end_y, start_x, end_x]
|
||||||
@@ -280,6 +283,8 @@ class GalilController(Controller):
|
|||||||
step_grid = (end_x - start_x) / interval_x
|
step_grid = (end_x - start_x) / interval_x
|
||||||
n_samples = int(interval_y * interval_x)
|
n_samples = int(interval_y * interval_x)
|
||||||
|
|
||||||
|
# Hard coded to maximum offset of 0.1mm to avoid long motions.
|
||||||
|
self.socket_put_and_receive(f"off={(0*0.1/2*1000):f}")
|
||||||
self.socket_put_and_receive(f"a_start={start_y:.04f};a_end={end_y:.04f};speed={speed:.04f}")
|
self.socket_put_and_receive(f"a_start={start_y:.04f};a_end={end_y:.04f};speed={speed:.04f}")
|
||||||
self.socket_put_and_receive(
|
self.socket_put_and_receive(
|
||||||
f"b_start={start_x:.04f};gridmax={gridmax:d};b_step={step_grid:.04f}"
|
f"b_start={start_x:.04f};gridmax={gridmax:d};b_step={step_grid:.04f}"
|
||||||
@@ -289,13 +294,39 @@ class GalilController(Controller):
|
|||||||
# sleep 50ms to avoid controller running into
|
# sleep 50ms to avoid controller running into
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
self.socket_put_and_receive("XQ#SCANG")
|
self.socket_put_and_receive("XQ#SCANG")
|
||||||
|
#time.sleep(0.1)
|
||||||
|
#threading.Thread(target=_while_in_motion(3, n_samples), daemon=True).start()
|
||||||
|
#self._while_in_motion(3, n_samples)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def _while_in_motion(self, thread_id: int, n_samples: int) -> tuple:
|
||||||
last_readout = 0
|
last_readout = 0
|
||||||
|
val_axis2 = [] # y axis
|
||||||
|
val_axis4 = [] # x axis
|
||||||
|
while self.is_thread_active(thread_id):
|
||||||
|
posct = int(self.socket_put_and_receive(f'MGposct').strip().split(".")[0])
|
||||||
|
logger.info(f'SGalil is scanning - latest enconder position {posct+1} from {n_samples}')
|
||||||
|
time.sleep(1)
|
||||||
|
if posct > last_readout:
|
||||||
|
positions = self.read_encoder_position(last_readout, posct)
|
||||||
|
val_axis4.extend(positions[0])
|
||||||
|
val_axis2.extend(positions[1])
|
||||||
|
last_readout = posct+1
|
||||||
|
logger.info(len(val_axis2))
|
||||||
|
time.sleep(1)
|
||||||
|
#Readout of last positions after scan finished
|
||||||
|
posct = int(self.socket_put_and_receive(f'MGposct').strip().split(".")[0])
|
||||||
|
logger.info(f'SGalil is scanning - latest enconder position {posct} from {n_samples}')
|
||||||
|
if posct > last_readout:
|
||||||
|
positions = self.read_encoder_position(last_readout, posct)
|
||||||
|
val_axis4.extend(positions[0])
|
||||||
|
val_axis2.extend(positions[1])
|
||||||
|
|
||||||
curren_encoder = self.socket_put_and_receive(f"MGposct")
|
return val_axis4, val_axis2
|
||||||
# TODO add here loop for continous readout -> checks thread?
|
|
||||||
|
|
||||||
# TODO does not run from ipython
|
|
||||||
def read_encoder_position(fromval: int, toval: int) -> tuple:
|
def read_encoder_position(self, fromval: int, toval: int) -> tuple:
|
||||||
val_axis2 = [] # y axis
|
val_axis2 = [] # y axis
|
||||||
val_axis4 = [] # x axis
|
val_axis4 = [] # x axis
|
||||||
for ii in range(fromval, toval + 1):
|
for ii in range(fromval, toval + 1):
|
||||||
|
|||||||
Reference in New Issue
Block a user