various fixes

This commit is contained in:
Holler Mirko
2024-11-05 15:06:35 +01:00
committed by wakonig_k
parent 831ace2533
commit c9536d9380
6 changed files with 69 additions and 36 deletions
@@ -1051,7 +1051,7 @@ class FlomniAlignmentMixin:
value = line.split(" ")[2]
name = line.split(" ")[0].split("[")[0]
if name == "corr_pos":
corr_pos.append(float(value) / 1000)
corr_pos.append(float(value))
elif name == "corr_angle":
corr_angle.append(float(value))
print(
@@ -186,7 +186,7 @@ class OMNYAlignmentMixin:
value = line.split(" ")[2]
name = line.split(" ")[0].split("[")[0]
if name == "corr_pos":
corr_pos.append(float(value) / 1000)
corr_pos.append(float(value))
elif name == "corr_angle":
corr_angle.append(float(value))
print(
+57 -2
View File
@@ -53,6 +53,10 @@ class GalilMotorResolution(GalilSignalRO):
class OMNYGalilReadbackSignal(GalilSignalRO):
previous_rotation_angle = 0
ignore_glitch = True
@retry_once
@threadlocked
def _socket_get(self) -> float:
@@ -76,9 +80,31 @@ class OMNYGalilReadbackSignal(GalilSignalRO):
def read(self):
self._metadata["timestamp"] = time.time()
val = super().read()
#if reading rotation stage angle
if self.parent.axis_Id_numeric == 2 and self.controller.sock.port == 8083:
current_readback_value = val[self.parent.name]["value"]
#print (f"previous rotation angle {self.previous_rotation_angle}, current readback {current_readback_value}.")
if np.fabs((self.previous_rotation_angle-current_readback_value)>10):
message = f"Glitch detected in rotation stage. Previous rotation angle {self.previous_rotation_angle}, current readback {current_readback_value}."
print(message)
self.parent.device_manager.connector.send_client_info(message, scope="glitch detector", show_asap=True)
val = super().read()
current_readback_value = val[self.parent.name]["value"]
if np.fabs((self.previous_rotation_angle-current_readback_value)>10):
message = f"Glitch detected in rotation stage second read. Previous rotation angle {self.previous_rotation_angle}, current readback {current_readback_value}. Disabling the controller."
print(message)
self.parent.device_manager.connector.send_client_info(message, scope="glitch detector", show_asap=True)
self.parent.device_manager.devices["osamroy"].obj.controller.socket_put_confirmed("allaxref=0")
self.parent.device_manager.devices["osamroy"].obj.enabled = False
return val
self.previous_rotation_angle = current_readback_value
try:
rt = self.parent.device_manager.devices["rtx"]
if rt.enabled:
@@ -88,6 +114,7 @@ class OMNYGalilReadbackSignal(GalilSignalRO):
return val
class OMNYGalilController(GalilController):
USER_ACCESS = [
"describe",
@@ -213,7 +240,7 @@ class OMNYGalilController(GalilController):
class OMNYGalilMotor(Device, PositionerBase):
USER_ACCESS = ["controller", "find_reference", "drive_axis_to_limit", "_ogalil_folerr_reset_and_ignore", "_ogalil_set_axis_to_pos_wo_reference_search", "get_motor_limit_switch", "axis_is_referenced", "get_motor_temperature", "folerr_status"]
USER_ACCESS = ["controller", "find_reference", "omny_osamx_to_scan_center", "drive_axis_to_limit", "_ogalil_folerr_reset_and_ignore", "_ogalil_set_axis_to_pos_wo_reference_search", "get_motor_limit_switch", "axis_is_referenced", "get_motor_temperature", "folerr_status"]
readback = Cpt(OMNYGalilReadbackSignal, signal_name="readback", kind="hinted")
user_setpoint = Cpt(GalilSetpointSignal, signal_name="setpoint")
motor_resolution = Cpt(GalilMotorResolution, signal_name="resolution", kind="config")
@@ -450,7 +477,35 @@ class OMNYGalilMotor(Device, PositionerBase):
check if an axis is referenced
"""
return self.controller.axis_is_referenced(self.axis_Id_numeric)
def _get_user_param_safe(self, device, var):
param = self.device_manager.devices[device].user_parameter
if not param or param.get(var) is None:
raise ValueError(f"Device {device} has no user parameter definition for {var}.")
return param.get(var)
def omny_osamx_to_scan_center(self, cenx):
if self.controller.sock.port == 8082 and self.axis_Id_numeric == 0:
# get last setpoint
osamx = self.device_manager.devices["osamx"]
osamx_current_setpoint = osamx.obj.readback.get()
omny_samx_in = self._get_user_param_safe("osamx","in")
if np.fabs(osamx_current_setpoint-(omny_samx_in+cenx/1000)) > 0.025:
message=f"Moving osamx to scan center. new osamx target {omny_samx_in+cenx/1000:.3f}."
logger.info(message)
osamx.read_only = False
#osamx.controller.("osamx", "controller.socket_put_confirmed('axspeed[0]=1000')")
osamx.set(omny_samx_in+cenx/1000)
time.sleep(0.1)
while(osamx.motor_is_moving.get()):
time.sleep(0.05)
osamx.read_only = True
time.sleep(2)
rt = self.device_manager.devices["rtx"]
if rt.enabled:
rt.obj.controller.laser_tracker_on()
rt.obj.controller.laser_tracker_check_and_wait_for_signalstrength()
def folerr_status(self) -> bool:
return self.controller.folerr_status(self.axis_Id_numeric)
+7 -6
View File
@@ -266,7 +266,7 @@ class RtOMNYController(Controller):
def laser_tracker_check_and_wait_for_signalstrength(self):
print("Checking laser tracker...")
self.get_device_manager().connector.send_client_info("Checking laser tracker...", scope="", show_asap=True)
if not self.laser_tracker_check_enabled():
print("laser_tracker_check_and_wait_for_signalstrength: The laser tracker is not even enabled.")
return
@@ -288,8 +288,8 @@ class RtOMNYController(Controller):
if signal < low_signal:
self.get_device_manager().connector.send_client_info(f"\x1b[91mThe signal of the tracker {signal} is below the low limit of {low_signal}. Auto readjustment...\x1b[0m", scope="laser_tracker_check_and_wait_for_signalstrength", show_asap=True)
self.omny_interferometer_align_tracking()
print("Checking laser tracker completed.")
self.omny_interferometer_align_tracking()
self.get_device_manager().connector.send_client_info("Checking laser tracker completed.", scope="", show_asap=True)
def omny_interferometer_align_tracking(self):
mirror_channel=6
@@ -945,11 +945,12 @@ class RtOMNYController(Controller):
f" {self.average_stdeviations_y_st_fzp/read_counter*1000:.1f}."
)
print(
self.get_device_manager().connector.send_client_info(
"OMNY statistics: Average of all standard deviations [nm]: x"
f" {self.average_stdeviations_x_st_fzp/read_counter*1000:.1f}, y"
f" {self.average_stdeviations_y_st_fzp/read_counter*1000:.1f}."
)
f" {self.average_stdeviations_y_st_fzp/read_counter*1000:.1f}.",
scope="", show_asap=True)
def publish_device_data(self, signals, point_id):
self.get_device_manager().connector.set_and_publish(
+2 -2
View File
@@ -59,8 +59,8 @@ class FlomniFermatScan(SyncFlyScanBase):
Args:
fovx(float) [um]: Fov in the piezo plane (i.e. piezo range). Max 200 um
fovy(float) [um]: Fov in the piezo plane (i.e. piezo range). Max 100 um
cenx(float) [mm]: center position in x.
ceny(float) [mm]: center position in y.
cenx(float) [um]: center position in x.
ceny(float) [um]: center position in y.
exp_time(float) [s]: exposure time
step(float) [um]: stepsize
zshift(float) [um]: shift in z
+1 -24
View File
@@ -162,31 +162,8 @@ class OMNYFermatScan(SyncFlyScanBase):
wait_type="move", device=["rtx", "rtz"], wait_group="prepare_setup_part2"
)
yield from self._transfer_positions_to_omny()
yield from self.omny_osamx_to_scan_center()
yield from self.stubs.send_rpc_and_wait("osamx","omny_osamx_to_scan_center",self.cenx)
def omny_osamx_to_scan_center(self):
# get last setpoint
osamx_current_setpoint = yield from self.stubs.send_rpc_and_wait(
"osamx", "user_setpoint.get"
)
omny_samx_in = self._get_user_param_safe("osamx","in")
if np.fabs(osamx_current_setpoint-(omny_samx_in+self.cenx/1000)) > 0.025:
logger.info("Moving osamx to scan center")
self.device_manager.devices["osamx"].read_only = False
# yield from self.stubs.send_rpc_and_wait("osamx", "controller.socket_put_confirmed('axspeed[0]=1000')")
yield from self.stubs.set(device="osamx", value=omny_samx_in+self.cenx/1000, wait_group="osamx_mv")
yield from self.stubs.wait(wait_type="move", device="osamx", wait_group="osamx_mv")
self.device_manager.devices["osamx"].read_only = True
time.sleep(4)
yield from self.stubs.send_rpc_and_wait("rtx", "controller.laser_tracker_on")
yield from self.stubs.send_rpc_and_wait("rtx", "controller.laser_tracker_check_and_wait_for_signalstrength")
def _get_user_param_safe(self, device, var):
param = self.device_manager.devices[device].user_parameter
if not param or param.get(var) is None:
raise ValueError(f"Device {device} has no user parameter definition for {var}.")
return param.get(var)
def omny_rotation(self, angle):
# get last setpoint (cannot be based on pos get because they will deviate slightly)
osamroy_current_setpoint = yield from self.stubs.send_rpc_and_wait(