started with implementation of RT omny
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 #########################
|
||||
############################################################
|
||||
|
||||
@@ -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__(
|
||||
|
||||
Reference in New Issue
Block a user