started with implementation of RT omny

This commit is contained in:
Holler Mirko
2024-09-10 17:52:24 +02:00
committed by wakonig_k
parent 9e84c1570c
commit dbae426a87
5 changed files with 129 additions and 51 deletions
@@ -16,6 +16,7 @@ from csaxs_bec.bec_ipython_client.plugins.omny.omny_optics_mixin import OMNYOpti
from csaxs_bec.bec_ipython_client.plugins.omny.omny_alignment_mixin import OMNYAlignmentMixin
from csaxs_bec.bec_ipython_client.plugins.omny.omny_general_tools import OMNYTools
from csaxs_bec.bec_ipython_client.plugins.omny.omny_sample_transfer_mixin import OMNYSampleTransferMixin
from csaxs_bec.bec_ipython_client.plugins.omny.omny_rt import OMNY_rt_client
#from csaxs_bec.bec_ipython_client.plugins.flomni.x_ray_eye_align import XrayEyeAlign
logger = bec_logger.logger
@@ -516,6 +517,7 @@ class OMNY(
OMNYAlignmentMixin,
OMNYOpticsMixin,
cSAXSBeamlineChecks,
OMNY_rt_client,
):
def __init__(self, client):
super().__init__()
@@ -539,6 +541,7 @@ class OMNY(
self.corr_angle_y_2 = []
self.progress = {}
self.OMNYTools = OMNYTools(self.client)
OMNY_rt_client.__init__(self)
def start_x_ray_eye_alignment(self):
if self.OMNYTools.yesno(
@@ -18,7 +18,7 @@ class OMNY_rt_client:
self.mirror_amplitutde_increase=0
self.mirror_parameters = {
1: {
"opt_signalchannel": 4,
"opt_signalchannel": "ssi_5",
"opt_mirrorname": "Inc Angle",
"opt_averaging_time": 0.1,
"opt_steps1_pos": 1,
@@ -34,7 +34,7 @@ class OMNY_rt_client:
"opt_amplitude2_neg": 2000,
},
2: {
"opt_signalchannel": 1,
"opt_signalchannel": "ssi_2",
"opt_mirrorname": "Inc ST OSA Y",
"opt_averaging_time": 0.1,
"opt_steps1_pos": 1,
@@ -50,7 +50,7 @@ class OMNY_rt_client:
"opt_amplitude2_neg": 2000,
},
3: {
"opt_signalchannel": 0,
"opt_signalchannel": "ssi_1",
"opt_mirrorname": "Inc OSA FZP Y",
"opt_averaging_time": 0.25,
"opt_steps1_pos": 1,
@@ -66,7 +66,7 @@ class OMNY_rt_client:
"opt_amplitude2_neg": 2500,
},
4: {
"opt_signalchannel": 1,
"opt_signalchannel": "ssi_2",
"opt_mirrorname": "OSA Y",
"opt_averaging_time": 0.1,
"opt_steps1_pos": 1,
@@ -82,7 +82,7 @@ class OMNY_rt_client:
"opt_amplitude2_neg": 3000,
},
5: {
"opt_signalchannel": 0,
"opt_signalchannel": "ssi_1",
"opt_mirrorname": "FZP Y",
"opt_averaging_time": 0.2,
"opt_steps1_pos": 6,
@@ -98,7 +98,7 @@ class OMNY_rt_client:
"opt_amplitude2_neg": 3000,
},
6: {
"opt_signalchannel": 3,
"opt_signalchannel": "ssi_4",
"opt_mirrorname": "OSA X",
"opt_averaging_time": 0.2,
"opt_steps1_pos": 2,
@@ -114,7 +114,7 @@ class OMNY_rt_client:
"opt_amplitude2_neg": 2500,
},
7: {
"opt_signalchannel": 2,
"opt_signalchannel": "ssi_3",
"opt_mirrorname": "FZP X",
"opt_averaging_time": 0.2,
"opt_steps1_pos": 4,
@@ -130,7 +130,7 @@ class OMNY_rt_client:
"opt_amplitude2_neg": 2500,
},
8: {
"opt_signalchannel": 0,
"opt_signalchannel": "ssi_1",
"opt_mirrorname": "OSA Y USING SIGNAL OSA FZP",
"opt_averaging_time": 0.2,
"opt_steps1_pos": 1,
@@ -193,11 +193,10 @@ class OMNY_rt_client:
if previous_signal < self.mirror_parameters[mirror_channel]["opt_signal_min_begin"]:
raise OMNY_rt_clientError(f"Minimum signal of axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} to start alignment not present.")
raise OMNY_rt_clientError("error1") #(f"Minimum signal of axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} to start alignment not present.")
elif previous_signal > self.mirror_parameters[mirror_channel]["opt_signal_stop"]:
print(f"Interferometer signal of axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} is good.")
print(f"Interferometer signal of axis is good") # {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} is good.")
else:
direction = 1
cycle_counter=0
@@ -210,13 +209,13 @@ class OMNY_rt_client:
while current_sample < self.mirror_parameters[mirror_channel]["opt_signal_stop"] and cycle_counter<cycle_max and reversal_counter < reversal_max:
if current_sample < self.mirror_parameters[mirror_channel]["opt_signal_min_begin"]:
raise OMNY_rt_clientError(f"Minimum signal of axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} to start alignment not present.")
raise OMNY_rt_clientError("error2") #(f"Minimum signal of axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]} to start alignment not present.")
if direction>0:
self._omny_interferometer_openloop_steps(channel, steps_pos, self.mirror_parameters[mirror_channel]["opt_amplitude_pos"])
else:
self._omny_interferometer_openloop_steps(channel, steps_neg, self.mirror_parameters[mirror_channel]["opt_amplitude_neg"])
print(f"Aligning axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]}. Target: {self.mirror_parameters[mirror_channel]["opt_signal_stop"]}, current {current_sample}")
print(f"Aligning axis ") #{self.mirror_parameters[mirror_channel]["opt_mirrorname"]}. Target: {self.mirror_parameters[mirror_channel]["opt_signal_stop"]}, current {current_sample}")
current_sample = dev.rtx.controller._omny_interferometer_get_signalsample(self.mirror_parameters[mirror_channel]["opt_signalchannel"], self.mirror_parameters[mirror_channel]["opt_averaging_time"])
if previous_signal>current_sample:
@@ -232,7 +231,7 @@ class OMNY_rt_client:
previous_signal=current_sample
cycle_counter+=1
print(f"Finished aligning axis {self.mirror_parameters[mirror_channel]["opt_mirrorname"]}. Target: {self.mirror_parameters[mirror_channel]["opt_signal_stop"]}, current {current_sample}")
print(f"Finished aligning axis") # {self.mirror_parameters[mirror_channel]["opt_mirrorname"]}. Target: {self.mirror_parameters[mirror_channel]["opt_signal_stop"]}, current {current_sample}")
def omny_tweak_interferometer(self):
curses.wrapper(self._tweak_interferometer)
@@ -262,19 +261,19 @@ class OMNY_rt_client:
if key == curses.KEY_LEFT:
if self.mirror_channel != -1:
self._omny_interferometer_openloop_steps(self.mirror_channel, self.mirror_parameters[self.mirror_channel]["opt_steps1_pos"], self.mirror_parameters[self.mirror_channel]["opt_amplitude1_pos"]+self.mirror_amplitutde_increase)
self._omny_interferometer_openloop_steps(3, self.mirror_parameters[self.mirror_channel]["opt_steps1_pos"], self.mirror_parameters[self.mirror_channel]["opt_amplitude1_pos"]+self.mirror_amplitutde_increase)
elif key == curses.KEY_RIGHT:
if self.mirror_channel != -1:
self._omny_interferometer_openloop_steps(self.mirror_channel, self.mirror_parameters[self.mirror_channel]["opt_steps1_neg"], self.mirror_parameters[self.mirror_channel]["opt_amplitude1_neg"]+self.mirror_amplitutde_increase)
self._omny_interferometer_openloop_steps(3, -self.mirror_parameters[self.mirror_channel]["opt_steps1_neg"], self.mirror_parameters[self.mirror_channel]["opt_amplitude1_neg"]+self.mirror_amplitutde_increase)
elif key == curses.KEY_DOWN:
if self.mirror_channel != -1:
self._omny_interferometer_openloop_steps(self.mirror_channel, self.mirror_parameters[self.mirror_channel]["opt_steps2_pos"], self.mirror_parameters[self.mirror_channel]["opt_amplitude2_pos"]+self.mirror_amplitutde_increase)
self._omny_interferometer_openloop_steps(4, self.mirror_parameters[self.mirror_channel]["opt_steps2_pos"], self.mirror_parameters[self.mirror_channel]["opt_amplitude2_pos"]+self.mirror_amplitutde_increase)
elif key == curses.KEY_UP:
if self.mirror_channel != -1:
self._omny_interferometer_openloop_steps(self.mirror_channel, self.mirror_parameters[self.mirror_channel]["opt_steps2_neg"], self.mirror_parameters[self.mirror_channel]["opt_amplitude2_neg"]+self.mirror_amplitutde_increase)
self._omny_interferometer_openloop_steps(4, -self.mirror_parameters[self.mirror_channel]["opt_steps2_neg"], self.mirror_parameters[self.mirror_channel]["opt_amplitude2_neg"]+self.mirror_amplitutde_increase)
elif key == ord('1'):
self.mirror_channel = 1
@@ -312,7 +311,7 @@ class OMNY_rt_client:
time.sleep(0.01)
print(f"Channel {self.mirror_channel} - {self.mirror_parameters[self.mirror_channel]['opt_mirrorname']} - Autostop {self.mirror_parameters[self.mirror_channel]['opt_signal_stop']} - Signal {signal}")
#print(f"Channel {self.mirror_channel} - {self.mirror_parameters[self.mirror_channel]['opt_mirrorname']} - Autostop {self.mirror_parameters[self.mirror_channel]['opt_signal_stop']} - Signal {signal}")
dev.rtx.controller._omny_interferometer_switch_alloff()
self.mirror_channel = -1
+47
View File
@@ -1,3 +1,50 @@
############################################################
#################### flOMNI RT motors ######################
############################################################
rtx:
description: OMNY rt
deviceClass: csaxs_bec.devices.omny.rt.rt_omny_ophyd.RtOMNYMotor
deviceConfig:
axis_Id: A
host: mpc3217.psi.ch
port: 3333
sign: 1
enabled: true
onFailure: buffer
readOnly: false
readoutPriority: on_request
userParameter:
low_signal: 11000
min_signal: 10000
rt_pid_voltage: -0.06219
rty:
description: OMNY rt
deviceClass: csaxs_bec.devices.omny.rt.rt_omny_ophyd.RtOMNYMotor
deviceConfig:
axis_Id: B
host: mpc3217.psi.ch
port: 3333
sign: 1
enabled: true
onFailure: buffer
readOnly: false
readoutPriority: on_request
userParameter:
tomo_additional_offsety: 0
rtz:
description: OMNY rt
deviceClass: csaxs_bec.devices.omny.rt.rt_omny_ophyd.RtOMNYMotor
deviceConfig:
axis_Id: C
host: mpc3217.psi.ch
port: 3333
sign: 1
enabled: true
onFailure: buffer
readOnly: false
readoutPriority: on_request
############################################################
##################### OMNY samples #########################
############################################################
+60 -32
View File
@@ -40,6 +40,7 @@ class RtOMNY_mirror_switchbox_Error(Exception):
class RtOMNYController(Controller):
_axes_per_controller = 3
USER_ACCESS = [
"socket_put",
"socket_put_and_receive",
"set_rotation_angle",
"feedback_disable",
@@ -57,6 +58,11 @@ class RtOMNYController(Controller):
"read_ssi_interferometer",
"laser_tracker_check_signalstrength",
"laser_tracker_check_enabled",
"_omny_interferometer_switch_open_socket",
"_omny_interferometer_switch_channel",
"_omny_interferometer_switch_LED_on",
"_omny_interferometer_switch_alloff",
"_omny_interferometer_get_signalsample",
]
def __init__(
@@ -136,11 +142,9 @@ class RtOMNYController(Controller):
}
def feedback_is_running(self) -> bool:
self.feedback_get_status_and_ssi()
interferometer_feedback_not_running = int(self.tracker_info["feedback_error"])
interferometer_feedback_not_running = int(self.ssi["feedback_error"])
if interferometer_feedback_not_running == 1:
return False
return True
@@ -373,18 +377,19 @@ class RtOMNYController(Controller):
t = PrettyTable()
t.title = f"Interferometer signal strength"
t.field_names = ["Axis", "Value"]
for i in range(4):
t.add_row([i, self.read_ssi_interferometer(i)])
for i in range(1,6):
ssi = self.ssi[f"ssi_{i}"]
t.add_row([i, ssi])
print(t)
def _omny_interferometer_switch_open_socket(self):
# open a socket connection to the laser interferometer server
host = "mpc2844.psi.ch" # as both code is running on same pc
host = "mpc3217.psi.ch" # as both code is running on same pc
port = 3335 # socket server port number
self.switchbox_socket.connect((host, port)) # connect to the server
self._omny_interferometer_switch_put_and_receive("?000")
self._omny_interferometer_switch_put_and_receive("?000\r")
time.sleep(1)
@@ -393,49 +398,72 @@ class RtOMNYController(Controller):
self._omny_interferometer_switch_alloff()
time.sleep(0.1)
if channel == 1: #Relais 1 and 2
if "|0003\r" != self._omny_interferometer_switch_put_and_receive("\!0020003"):
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
rback = self._omny_interferometer_switch_put_and_receive("!0020003\r")
#if "|0003\r" != self._omny_interferometer_switch_put_and_receive("!0020003\r"):
# raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
elif channel == 2: #Relais 3 and 4
if "|000C\r" != self._omny_interferometer_switch_put_and_receive("\!002000C"):
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
rback = self._omny_interferometer_switch_put_and_receive("!002000C\r")
# if "|000C\r" != self._omny_interferometer_switch_put_and_receive("!002000C\r"):
# raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
elif channel == 3: #Relais 5 and 6
if "|0030\r" != self._omny_interferometer_switch_put_and_receive("\!0020030"):
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
rback = self._omny_interferometer_switch_put_and_receive("!0020030\r")
# if "|0030\r" != self._omny_interferometer_switch_put_and_receive("!0020030\r"):
# raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
elif channel == 4: #Relais 7 and 8
if "|00C0\r" != self._omny_interferometer_switch_put_and_receive("\!00200C0"):
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
rback = self._omny_interferometer_switch_put_and_receive("!00200C0\r")
# if "|00C0\r" != self._omny_interferometer_switch_put_and_receive("!00200C0\r"):
# raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
elif channel == 5: #Relais 9 and 10
if "|0300\r" != self._omny_interferometer_switch_put_and_receive("\!0020300"):
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
rback = self._omny_interferometer_switch_put_and_receive("!0020300\r")
# if "|0300\r" != self._omny_interferometer_switch_put_and_receive("!0020300\r"):
# raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
elif channel == 6: #Relais 11 and 12
if "|0C00\r" != self._omny_interferometer_switch_put_and_receive("\!0020C00"):
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
rback = self._omny_interferometer_switch_put_and_receive("!0020C00\r")
# if "|0C00\r" != self._omny_interferometer_switch_put_and_receive("!0020C00\r"):
# raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
elif channel == 7: #Relais 13 and 14
if "|3000\r" != self._omny_interferometer_switch_put_and_receive("\!0023000"):
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
rback = self._omny_interferometer_switch_put_and_receive("!0023000\r")
# if "|3000\r" != self._omny_interferometer_switch_put_and_receive("!0023000\r"):
# raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
elif channel == 8: #Relais 7 and 8 SPECIAL CASE use osafzp y signal to align osa y
if "|00C0\r" != self._omny_interferometer_switch_put_and_receive("\!00200C0"):
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
rback = self._omny_interferometer_switch_put_and_receive("!00200C0\r")
# if "|00C0\r" != self._omny_interferometer_switch_put_and_receive("!00200C0\r"):
# raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
elif channel == 9: #Relais 15 and 16
if "|C000\r" != self._omny_interferometer_switch_put_and_receive("\!002C000"):
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
rback = self._omny_interferometer_switch_put_and_receive("!002C000\r")
# if "|C000\r" != self._omny_interferometer_switch_put_and_receive("!002C000\r"):
# raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
if "0000" not in rback:
raise RtOMNY_mirror_switchbox_Error("Channel switching failed.")
def _omny_interferometer_switch_put_and_receive(self, command_str: str) -> str:
self.switchbox_socket.send(command_str.encode())
try:
self.switchbox_socket.send(command_str.encode())
except:
self._omny_interferometer_switch_open_socket()
time.sleep(0.1)
self.switchbox_socket.send(command_str.encode())
recv = self.switchbox_socket.recv(1024).decode()
print(f"Sent {command_str} to switchbox and received {recv}")
# print("sent")
# print(command_str)
# print("\nreceived")
# print(recv)
# print("")
return recv
def _omny_interferometer_switch_LED_on(self):
self._omny_interferometer_switch_put_and_receive("\!00S01")
self._omny_interferometer_switch_put_and_receive("!00S01\r")
def _omny_interferometer_switch_alloff(self):
#switch all off
self._omny_interferometer_switch_put_and_receive("\!0020000")
self._omny_interferometer_switch_put_and_receive("!0020000\r")
#LED OFF
self._omny_interferometer_switch_put_and_receive("\!00S00")
time.sleep(0.1)
self._omny_interferometer_switch_put_and_receive("!00S00\r")
time.sleep(0.1)
alloff = self._omny_interferometer_switch_put_and_receive("?002\r")
#check all off
if "_0000\r" != self._omny_interferometer_switch_put_and_receive("?002"):
if "00" not in alloff:
raise RtOMNY_mirror_switchbox_Error("Not all channels switched off.")
def _rt_start_averaging_SSI(self):
@@ -81,6 +81,7 @@ class SmaractController(Controller):
"axis_is_referenced",
"all_axes_referenced",
"set_closed_loop_move_speed",
"is_axis_moving",
]
def __init__(