From b9ef4ec20b848d6fb0710fc0e6446c8319a68f46 Mon Sep 17 00:00:00 2001 From: Patrick Oppermann Date: Mon, 13 Feb 2023 15:20:55 -0800 Subject: [PATCH 1/6] add smarpod as a device --- pcdsdevices/smarpod.py | 266 +++++++++++++++++++++++++++++ pcdsdevices/ui/smarpod.detailed.ui | 57 +++++++ 2 files changed, 323 insertions(+) create mode 100644 pcdsdevices/smarpod.py create mode 100644 pcdsdevices/ui/smarpod.detailed.ui diff --git a/pcdsdevices/smarpod.py b/pcdsdevices/smarpod.py new file mode 100644 index 00000000000..fc123555776 --- /dev/null +++ b/pcdsdevices/smarpod.py @@ -0,0 +1,266 @@ +""" +Module for the SmarPod and related devices. +""" +from ophyd.device import Component as Cpt +from ophyd.device import Device +from ophyd.signal import EpicsSignal +from .interface import BaseInterface + + + +class SmarPod(BaseInterface, Device): + """ + A base class for a SmarPod controller. + """ + init = Cpt(EpicsSignal, ':CMD:INIT', kind='normal') + status = Cpt(EpicsSignal, ':CMD:ALL_STATUS', kind='normal') + + + + """ + Controlling unit number + """ + cmd_unit = Cpt(EpicsSignal, ':CMD:UNIT', kind='normal') + unit = Cpt(EpicsSignal, ':UNIT', kind='normal', doc='Selected SmarPod unit') + + + + """ + Reference + """ + cmd_ref = Cpt(EpicsSignal, ':CMD:REF', kind='normal') + ref = Cpt(EpicsSignal, ':REF', kind='normal', doc='Readback referenced state') + _ref = Cpt(EpicsSignal, ':_REF', kind='normal', doc='Async reference response') + cmd_ref_method = Cpt(EpicsSignal, ':CMD:REF_METHOD', kind='normal', doc='Set reference method') + ref_method = Cpt(EpicsSignal, ':REF_METHOD', kind='normal', doc='Readback reference method') + cmd_ref_x_direct = Cpt(EpicsSignal, ':CMD:REF_X_DIRECT', kind='normal', doc='Set reference x-direction') + ref_x_direct = Cpt(EpicsSignal, ':REF_X_DIRECT', kind='normal', doc='Readback reference x-direction') + cmd_ref_y_direct = Cpt(EpicsSignal, ':CMD:REF_Y_DIRECT', kind='normal', doc='Set reference y-direction') + ref_y_direct = Cpt(EpicsSignal, ':REF_Y_DIRECT', kind='normal', doc='Readback reference y-direction') + cmd_ref_z_direct = Cpt(EpicsSignal, ':CMD:REF_Z_DIRECT', kind='normal', doc='Set reference z-direction') + ref_z_direct = Cpt(EpicsSignal, ':REF_Z_DIRECT', kind='normal', doc='Readback reference z-direction') + + + + """ + Positions - Move + """ + cmd_move = Cpt(EpicsSignal, ':CMD:MOVE', kind='normal') + cmd_x = Cpt(EpicsSignal, ':CMD:X', kind='normal') + cmd_y = Cpt(EpicsSignal, ':CMD:Y', kind='normal') + cmd_z = Cpt(EpicsSignal, ':CMD:Z', kind='normal') + cmd_rx = Cpt(EpicsSignal, ':CMD:RX', kind='normal') + cmd_ry = Cpt(EpicsSignal, ':CMD:RY', kind='normal') + cmd_rz = Cpt(EpicsSignal, ':CMD:RZ', kind='normal') + + + + """ + Stop + """ + cmd_stop = Cpt(EpicsSignal, ':CMD:STOP', kind='normal') + + + + """ + Pose reachable? + """ + cmd_reachable = Cpt(EpicsSignal, ':CMD:REACHABLE', kind='normal') + reachable = Cpt(EpicsSignal, ':REACHABLE', kind='normal') + + + + """ + Positions - Readback + """ + cmd_pos_rbv = Cpt(EpicsSignal, ':CMD:POS_RBV', kind='normal', doc='Readback current pose position') + x_m = Cpt(EpicsSignal, ':X_M', kind='normal') + y_m = Cpt(EpicsSignal, ':Y_M', kind='normal') + z_m = Cpt(EpicsSignal, ':Z_M', kind='normal') + x = Cpt(EpicsSignal, ':X', kind='normal') + y = Cpt(EpicsSignal, ':Y', kind='normal') + z = Cpt(EpicsSignal, ':Z', kind='normal') + rx = Cpt(EpicsSignal, ':RX', kind='normal') + ry = Cpt(EpicsSignal, ':RY', kind='normal') + rz = Cpt(EpicsSignal, ':RZ', kind='normal') + + + + """ + Movement - Readback + """ + moving = Cpt(EpicsSignal, ':MOVING', kind='normal', doc='Movement status') + + + + """ + Movement - Sync + """ + cmd_sync = Cpt(EpicsSignal, ':CMD:SYNC', kind='normal') + error_code = Cpt(EpicsSignal, ':ERROR_CODE', kind='normal') + error_desc = Cpt(EpicsSignal, ':ERROR_DESC', kind='normal') + + + + """ + Pivot-point + """ + cmd_pivot_rbv = Cpt(EpicsSignal, ':CMD:PIVOT_RBV', kind='normal', doc='Readback pivot point') + cmd_set_pivot = Cpt(EpicsSignal, ':CMD:SET_PIVOT', kind='normal') + cmd_sync_pivot = Cpt(EpicsSignal, ':CMD:SYNC_PIVOT', kind='normal') + cmd_pivot_mode = Cpt(EpicsSignal, ':CMD:PIVOT_MODE', kind='normal') + pivot_mode = Cpt(EpicsSignal, ':PIVOT_MODE', kind='normal', doc='Pivot mode') + + + + """ + Pivot positions + """ + px_m = Cpt(EpicsSignal, ':PX_M', kind='normal') + py_m = Cpt(EpicsSignal, ':PY_M', kind='normal') + pz_m = Cpt(EpicsSignal, ':PZ_M', kind='normal') + px = Cpt(EpicsSignal, ':PX', kind='normal') + py = Cpt(EpicsSignal, ':PY', kind='normal') + pz = Cpt(EpicsSignal, ':PZ', kind='normal') + + + + """ + Pivot request positions + """ + cmd_px = Cpt(EpicsSignal, ':CMD:PX', kind='normal') + cmd_py = Cpt(EpicsSignal, ':CMD:PY', kind='normal') + cmd_pz = Cpt(EpicsSignal, ':CMD:PZ', kind='normal') + + + + """ + Miscellaneous + """ + cmd_calibrate = Cpt(EpicsSignal, ':CMD:CALIBRATE', kind='normal') + cmd_read_ver = Cpt(EpicsSignal, ':CMD:READ_VER', kind='normal') + ver_sys = Cpt(EpicsSignal, ':VER:SYS', kind='normal') + + + + """ + Device Info + """ + ver_sn = Cpt(EpicsSignal, ':VER:SN', kind='normal') + ver_product = Cpt(EpicsSignal, ':VER:PRODUCT', kind='normal') + ver_firmware = Cpt(EpicsSignal, ':VER:FIRMWARE', kind='normal') + + + + """ + Status + """ + cmd_read_status = Cpt(EpicsSignal, ':CMD:READ_STATUS', kind='normal') + status_temp = Cpt(EpicsSignal, ':STATUS:TEMP', kind='normal') + status_load = Cpt(EpicsSignal, ':STATUS:LOAD', kind='normal') + status_memory = Cpt(EpicsSignal, ':STATUS:MEMORY', kind='normal') + status_net_bytes_in = Cpt(EpicsSignal, ':STATUS:NET_BYTES_IN', kind='normal') + status_net_bytes_out = Cpt(EpicsSignal, ':STATUS:NET_BYTES_OUT', kind='normal') + status_net = Cpt(EpicsSignal, ':STATUS:NET', kind='normal') + status_status = Cpt(EpicsSignal, ':STATUS:STATUS', kind='normal') + status_bootcnt = Cpt(EpicsSignal, ':STATUS:BOOTCNT', kind='normal') + status_uptime = Cpt(EpicsSignal, ':STATUS:UPTIME', kind='normal') + status_ip = Cpt(EpicsSignal, ':STATUS:IP', kind='normal') + status_client_ip = Cpt(EpicsSignal, ':STATUS:CLIENT_IP', kind='normal') + status_ser_status = Cpt(EpicsSignal, ':STATUS:SER_STATUS', kind='normal') + status_ser_bytes_in = Cpt(EpicsSignal, ':STATUS:SER_BYTES_IN', kind='normal') + status_ser_bytes_out = Cpt(EpicsSignal, ':STATUS:SER_BYTES_OUT', kind='normal') + status_display = Cpt(EpicsSignal, ':STATUS:DISPLAY', kind='normal') + + + + """ + Sensor mode + """ + cmd_sensor_mode = Cpt(EpicsSignal, ':CMD:SENSOR_MODE', kind='normal') + sensor_mode = Cpt(EpicsSignal, ':SENSOR_MODE', kind='normal', doc='Sensor mode') + + + + """ + Maximum frequency + """ + cmd_freq = Cpt(EpicsSignal, ':CMD:FREQ', kind='normal') + freq = Cpt(EpicsSignal, ':FREQ', kind='normal') + + + + """ + Maximum velocity + """ + cmd_vel = Cpt(EpicsSignal, ':CMD:VEL', kind='normal') + vel = Cpt(EpicsSignal, ':VEL', kind='normal') + + + + """ + Maximum acceleration + """ + cmd_accel = Cpt(EpicsSignal, ':CMD:ACCEL', kind='normal') + accel = Cpt(EpicsSignal, ':ACCEL', kind='normal') + + + + """ + Read and Set Poses, Pose 1-5: + """ + pose_1_name = Cpt(EpicsSignal, ':POSE_1:NAME', kind='normal', doc='Pose 1 name input') + pose_1_name_rbv = Cpt(EpicsSignal, ':POSE_1:NAME_RBV', kind='normal', doc='Pose 1 name readback') + pose_1_x = Cpt(EpicsSignal, ':POSE_1:X', kind='normal', doc='Pose 1 X Position Data') + pose_1_y = Cpt(EpicsSignal, ':POSE_1:Y', kind='normal', doc='Pose 1 Y Position Data') + pose_1_z = Cpt(EpicsSignal, ':POSE_1:Z', kind='normal', doc='Pose 1 Z Position Data') + pose_1_rx = Cpt(EpicsSignal, ':POSE_1:RX', kind='normal', doc='Pose 1 RX Position Data') + pose_1_ry = Cpt(EpicsSignal, ':POSE_1:RY', kind='normal', doc='Pose 1 RY Position Data') + pose_1_rz = Cpt(EpicsSignal, ':POSE_1:RZ', kind='normal', doc='Pose 1 RZ Position Data') + pose_1_record = Cpt(EpicsSignal, ':POSE_1:RECORD', kind='normal', doc='Fanout for pose') + pose_1_execute = Cpt(EpicsSignal, ':POSE_1:EXECUTE', kind='normal', doc='Enacts Pose 1 Positions') + + pose_2_name = Cpt(EpicsSignal, ':POSE_2:NAME', kind='normal', doc='Pose 2 name input') + pose_2_name_rbv = Cpt(EpicsSignal, ':POSE_2:NAME_RBV', kind='normal', doc='Pose 2 name readback') + pose_2_x = Cpt(EpicsSignal, ':POSE_2:X', kind='normal', doc='Pose 2 X Position Data') + pose_2_y = Cpt(EpicsSignal, ':POSE_2:Y', kind='normal', doc='Pose 2 Y Position Data') + pose_2_z = Cpt(EpicsSignal, ':POSE_2:Z', kind='normal', doc='Pose 2 Z Position Data') + pose_2_rx = Cpt(EpicsSignal, ':POSE_2:RX', kind='normal', doc='Pose 2 RX Position Data') + pose_2_ry = Cpt(EpicsSignal, ':POSE_2:RY', kind='normal', doc='Pose 2 RY Position Data') + pose_2_rz = Cpt(EpicsSignal, ':POSE_2:RZ', kind='normal', doc='Pose 2 RZ Position Data') + pose_2_record = Cpt(EpicsSignal, ':POSE_2:RECORD', kind='normal', doc='Fanout for pose') + pose_2_execute = Cpt(EpicsSignal, ':POSE_2:EXECUTE', kind='normal', doc='Enacts Pose 2 Positions') + + pose_3_name = Cpt(EpicsSignal, ':POSE_3:NAME', kind='normal', doc='Pose 3 name input') + pose_3_name_rbv = Cpt(EpicsSignal, ':POSE_3:NAME_RBV', kind='normal', doc='Pose 3 name readback') + pose_3_x = Cpt(EpicsSignal, ':POSE_3:X', kind='normal', doc='Pose 3 X Position Data') + pose_3_y = Cpt(EpicsSignal, ':POSE_3:Y', kind='normal', doc='Pose 3 Y Position Data') + pose_3_z = Cpt(EpicsSignal, ':POSE_3:Z', kind='normal', doc='Pose 3 Z Position Data') + pose_3_rx = Cpt(EpicsSignal, ':POSE_3:RX', kind='normal', doc='Pose 3 RX Position Data') + pose_3_ry = Cpt(EpicsSignal, ':POSE_3:RY', kind='normal', doc='Pose 3 RY Position Data') + pose_3_rz = Cpt(EpicsSignal, ':POSE_3:RZ', kind='normal', doc='Pose 3 RZ Position Data') + pose_3_record = Cpt(EpicsSignal, ':POSE_3:RECORD', kind='normal', doc='Fanout for pose') + pose_3_execute = Cpt(EpicsSignal, ':POSE_3:EXECUTE', kind='normal', doc='Enacts Pose 3 Positions') + + pose_4_name = Cpt(EpicsSignal, ':POSE_4:NAME', kind='normal', doc='Pose 4 name input') + pose_4_name_rbv = Cpt(EpicsSignal, ':POSE_4:NAME_RBV', kind='normal', doc='Pose 4 name readback') + pose_4_x = Cpt(EpicsSignal, ':POSE_4:X', kind='normal', doc='Pose 4 X Position Data') + pose_4_y = Cpt(EpicsSignal, ':POSE_4:Y', kind='normal', doc='Pose 4 Y Position Data') + pose_4_z = Cpt(EpicsSignal, ':POSE_4:Z', kind='normal', doc='Pose 4 Z Position Data') + pose_4_rx = Cpt(EpicsSignal, ':POSE_4:RX', kind='normal', doc='Pose 4 RX Position Data') + pose_4_ry = Cpt(EpicsSignal, ':POSE_4:RY', kind='normal', doc='Pose 4 RY Position Data') + pose_4_rz = Cpt(EpicsSignal, ':POSE_4:RZ', kind='normal', doc='Pose 4 RZ Position Data') + pose_4_record = Cpt(EpicsSignal, ':POSE_4:RECORD', kind='normal', doc='Fanout for pose') + pose_4_execute = Cpt(EpicsSignal, ':POSE_4:EXECUTE', kind='normal', doc='Enacts Pose 4 Positions') + + pose_5_name = Cpt(EpicsSignal, ':POSE_5:NAME', kind='normal', doc='Pose 5 name input') + pose_5_name_rbv = Cpt(EpicsSignal, ':POSE_5:NAME_RBV', kind='normal', doc='Pose 5 name readback') + pose_5_x = Cpt(EpicsSignal, ':POSE_5:X', kind='normal', doc='Pose 5 X Position Data') + pose_5_y = Cpt(EpicsSignal, ':POSE_5:Y', kind='normal', doc='Pose 5 Y Position Data') + pose_5_z = Cpt(EpicsSignal, ':POSE_5:Z', kind='normal', doc='Pose 5 Z Position Data') + pose_5_rx = Cpt(EpicsSignal, ':POSE_5:RX', kind='normal', doc='Pose 5 RX Position Data') + pose_5_ry = Cpt(EpicsSignal, ':POSE_5:RY', kind='normal', doc='Pose 5 RY Position Data') + pose_5_rz = Cpt(EpicsSignal, ':POSE_5:RZ', kind='normal', doc='Pose 5 RZ Position Data') + pose_5_record = Cpt(EpicsSignal, ':POSE_5:RECORD', kind='normal', doc='Fanout for pose') + pose_5_execute = Cpt(EpicsSignal, ':POSE_5:EXECUTE', kind='normal', doc='Enacts Pose 5 Positions') + diff --git a/pcdsdevices/ui/smarpod.detailed.ui b/pcdsdevices/ui/smarpod.detailed.ui new file mode 100644 index 00000000000..ae10a9111dc --- /dev/null +++ b/pcdsdevices/ui/smarpod.detailed.ui @@ -0,0 +1,57 @@ + + + Form + + + + 0 + 0 + 400 + 316 + + + + Form + + + + + 100 + 0 + 201 + 75 + + + + + + + + + + 190 + 50 + 18 + 18 + + + + + + + + + + TyphosDisplayTitle + QFrame +
typhos.display
+
+ + TyphosSignalPanel + QWidget +
typhos.panel
+
+
+ + +
From bd8ef10bb2a171ef11a04d96210a0891c6dc96f9 Mon Sep 17 00:00:00 2001 From: Patrick Oppermann Date: Tue, 7 Mar 2023 10:34:54 -0800 Subject: [PATCH 2/6] minor fix --- pcdsdevices/smarpod.py | 313 ++++++++++++----------------------------- 1 file changed, 90 insertions(+), 223 deletions(-) diff --git a/pcdsdevices/smarpod.py b/pcdsdevices/smarpod.py index fc123555776..7d3599d6ea4 100644 --- a/pcdsdevices/smarpod.py +++ b/pcdsdevices/smarpod.py @@ -1,50 +1,32 @@ """ Module for the SmarPod and related devices. """ +from ophyd import PVPositioner from ophyd.device import Component as Cpt from ophyd.device import Device -from ophyd.signal import EpicsSignal -from .interface import BaseInterface +from ophyd.signal import EpicsSignal, EpicsSignalRO - -class SmarPod(BaseInterface, Device): - """ - A base class for a SmarPod controller. - """ +class SmarPod(PVPositioner): + # A base class for a SmarPod controller. init = Cpt(EpicsSignal, ':CMD:INIT', kind='normal') - status = Cpt(EpicsSignal, ':CMD:ALL_STATUS', kind='normal') - - - - """ - Controlling unit number - """ + status = Cpt(EpicsSignal, ':CMD:ALL_STATUS', kind='normal', doc='SmarPod status code') + # Controlling unit number cmd_unit = Cpt(EpicsSignal, ':CMD:UNIT', kind='normal') unit = Cpt(EpicsSignal, ':UNIT', kind='normal', doc='Selected SmarPod unit') - - - - """ - Reference - """ + # Reference cmd_ref = Cpt(EpicsSignal, ':CMD:REF', kind='normal') - ref = Cpt(EpicsSignal, ':REF', kind='normal', doc='Readback referenced state') - _ref = Cpt(EpicsSignal, ':_REF', kind='normal', doc='Async reference response') - cmd_ref_method = Cpt(EpicsSignal, ':CMD:REF_METHOD', kind='normal', doc='Set reference method') - ref_method = Cpt(EpicsSignal, ':REF_METHOD', kind='normal', doc='Readback reference method') - cmd_ref_x_direct = Cpt(EpicsSignal, ':CMD:REF_X_DIRECT', kind='normal', doc='Set reference x-direction') - ref_x_direct = Cpt(EpicsSignal, ':REF_X_DIRECT', kind='normal', doc='Readback reference x-direction') - cmd_ref_y_direct = Cpt(EpicsSignal, ':CMD:REF_Y_DIRECT', kind='normal', doc='Set reference y-direction') - ref_y_direct = Cpt(EpicsSignal, ':REF_Y_DIRECT', kind='normal', doc='Readback reference y-direction') - cmd_ref_z_direct = Cpt(EpicsSignal, ':CMD:REF_Z_DIRECT', kind='normal', doc='Set reference z-direction') - ref_z_direct = Cpt(EpicsSignal, ':REF_Z_DIRECT', kind='normal', doc='Readback reference z-direction') - - - - """ - Positions - Move - """ + ref = Cpt(EpicsSignalRO, ':REF', kind='normal', doc='Readback referenced state') + _ref = Cpt(EpicsSignal, ':_REF', kind='normal', doc='Async reference response') + cmd_ref_method = Cpt(EpicsSignal, ':CMD:REF_METHOD', kind='normal', doc='Set reference method') + ref_method = Cpt(EpicsSignalRO, ':REF_METHOD', kind='normal', doc='Readback reference method') + cmd_ref_x_direct = Cpt(EpicsSignal, ':CMD:REF_X_DIRECT', kind='normal', doc='Set reference x-direction') + ref_x_direct = Cpt(EpicsSignalRO, ':REF_X_DIRECT', kind='normal', doc='Readback reference x-direction') + cmd_ref_y_direct = Cpt(EpicsSignal, ':CMD:REF_Y_DIRECT', kind='normal', doc='Set reference y-direction') + ref_y_direct = Cpt(EpicsSignalRO, ':REF_Y_DIRECT', kind='normal', doc='Readback reference y-direction') + cmd_ref_z_direct = Cpt(EpicsSignal, ':CMD:REF_Z_DIRECT', kind='normal', doc='Set reference z-direction') + ref_z_direct = Cpt(EpicsSignalRO, ':REF_Z_DIRECT', kind='normal', doc='Readback reference z-direction') + # Positions - Move cmd_move = Cpt(EpicsSignal, ':CMD:MOVE', kind='normal') cmd_x = Cpt(EpicsSignal, ':CMD:X', kind='normal') cmd_y = Cpt(EpicsSignal, ':CMD:Y', kind='normal') @@ -52,215 +34,100 @@ class SmarPod(BaseInterface, Device): cmd_rx = Cpt(EpicsSignal, ':CMD:RX', kind='normal') cmd_ry = Cpt(EpicsSignal, ':CMD:RY', kind='normal') cmd_rz = Cpt(EpicsSignal, ':CMD:RZ', kind='normal') - - - - """ - Stop - """ - cmd_stop = Cpt(EpicsSignal, ':CMD:STOP', kind='normal') - - - - """ - Pose reachable? - """ + # Stop + cmd_stop = Cpt(EpicsSignal, ':CMD:STOP', kind='normal', doc='Stops SmarPod Movements') + # Pose reachable? cmd_reachable = Cpt(EpicsSignal, ':CMD:REACHABLE', kind='normal') - reachable = Cpt(EpicsSignal, ':REACHABLE', kind='normal') - - - - """ - Positions - Readback - """ + reachable = Cpt(EpicsSignalRO, ':REACHABLE', kind='normal', doc='Test if the SP can reach a pose. Does not move the SP') + # Positions - Readback cmd_pos_rbv = Cpt(EpicsSignal, ':CMD:POS_RBV', kind='normal', doc='Readback current pose position') - x_m = Cpt(EpicsSignal, ':X_M', kind='normal') - y_m = Cpt(EpicsSignal, ':Y_M', kind='normal') - z_m = Cpt(EpicsSignal, ':Z_M', kind='normal') - x = Cpt(EpicsSignal, ':X', kind='normal') - y = Cpt(EpicsSignal, ':Y', kind='normal') - z = Cpt(EpicsSignal, ':Z', kind='normal') - rx = Cpt(EpicsSignal, ':RX', kind='normal') - ry = Cpt(EpicsSignal, ':RY', kind='normal') - rz = Cpt(EpicsSignal, ':RZ', kind='normal') - - - - """ - Movement - Readback - """ + x_m = Cpt(EpicsSignalRO, ':X_M', kind='normal') + y_m = Cpt(EpicsSignalRO, ':Y_M', kind='normal') + z_m = Cpt(EpicsSignalRO, ':Z_M', kind='normal') + x = Cpt(EpicsSignalRO, ':X', kind='normal') + y = Cpt(EpicsSignalRO, ':Y', kind='normal') + z = Cpt(EpicsSignalRO, ':Z', kind='normal') + rx = Cpt(EpicsSignalRO, ':RX', kind='normal') + ry = Cpt(EpicsSignalRO, ':RY', kind='normal') + rz = Cpt(EpicsSignalRO, ':RZ', kind='normal') + # Movement - Readback moving = Cpt(EpicsSignal, ':MOVING', kind='normal', doc='Movement status') - - - - """ - Movement - Sync - """ + # Movement - Sync cmd_sync = Cpt(EpicsSignal, ':CMD:SYNC', kind='normal') - error_code = Cpt(EpicsSignal, ':ERROR_CODE', kind='normal') - error_desc = Cpt(EpicsSignal, ':ERROR_DESC', kind='normal') - - - - """ - Pivot-point - """ + error_code = Cpt(EpicsSignalRO, ':ERROR_CODE', kind='normal') + error_desc = Cpt(EpicsSignalRO, ':ERROR_DESC', kind='normal') + # Pivot-point cmd_pivot_rbv = Cpt(EpicsSignal, ':CMD:PIVOT_RBV', kind='normal', doc='Readback pivot point') cmd_set_pivot = Cpt(EpicsSignal, ':CMD:SET_PIVOT', kind='normal') cmd_sync_pivot = Cpt(EpicsSignal, ':CMD:SYNC_PIVOT', kind='normal') cmd_pivot_mode = Cpt(EpicsSignal, ':CMD:PIVOT_MODE', kind='normal') pivot_mode = Cpt(EpicsSignal, ':PIVOT_MODE', kind='normal', doc='Pivot mode') - - - - """ - Pivot positions - """ + # Pivot positions px_m = Cpt(EpicsSignal, ':PX_M', kind='normal') py_m = Cpt(EpicsSignal, ':PY_M', kind='normal') pz_m = Cpt(EpicsSignal, ':PZ_M', kind='normal') px = Cpt(EpicsSignal, ':PX', kind='normal') py = Cpt(EpicsSignal, ':PY', kind='normal') pz = Cpt(EpicsSignal, ':PZ', kind='normal') - - - - """ - Pivot request positions - """ + # Pivot request positions cmd_px = Cpt(EpicsSignal, ':CMD:PX', kind='normal') cmd_py = Cpt(EpicsSignal, ':CMD:PY', kind='normal') cmd_pz = Cpt(EpicsSignal, ':CMD:PZ', kind='normal') - - - - """ - Miscellaneous - """ + # Miscellaneous cmd_calibrate = Cpt(EpicsSignal, ':CMD:CALIBRATE', kind='normal') cmd_read_ver = Cpt(EpicsSignal, ':CMD:READ_VER', kind='normal') - ver_sys = Cpt(EpicsSignal, ':VER:SYS', kind='normal') - - - - """ - Device Info - """ - ver_sn = Cpt(EpicsSignal, ':VER:SN', kind='normal') - ver_product = Cpt(EpicsSignal, ':VER:PRODUCT', kind='normal') - ver_firmware = Cpt(EpicsSignal, ':VER:FIRMWARE', kind='normal') - - - - """ - Status - """ + ver_sys = Cpt(EpicsSignalRO, ':VER:SYS', kind='omitted') + # Device Info + ver_sn = Cpt(EpicsSignalRO, ':VER:SN', kind='omitted') + ver_product = Cpt(EpicsSignalRO, ':VER:PRODUCT', kind='omitted') + ver_firmware = Cpt(EpicsSignalRO, ':VER:FIRMWARE', kind='omitted') + # Status cmd_read_status = Cpt(EpicsSignal, ':CMD:READ_STATUS', kind='normal') - status_temp = Cpt(EpicsSignal, ':STATUS:TEMP', kind='normal') - status_load = Cpt(EpicsSignal, ':STATUS:LOAD', kind='normal') - status_memory = Cpt(EpicsSignal, ':STATUS:MEMORY', kind='normal') - status_net_bytes_in = Cpt(EpicsSignal, ':STATUS:NET_BYTES_IN', kind='normal') - status_net_bytes_out = Cpt(EpicsSignal, ':STATUS:NET_BYTES_OUT', kind='normal') - status_net = Cpt(EpicsSignal, ':STATUS:NET', kind='normal') - status_status = Cpt(EpicsSignal, ':STATUS:STATUS', kind='normal') - status_bootcnt = Cpt(EpicsSignal, ':STATUS:BOOTCNT', kind='normal') - status_uptime = Cpt(EpicsSignal, ':STATUS:UPTIME', kind='normal') - status_ip = Cpt(EpicsSignal, ':STATUS:IP', kind='normal') - status_client_ip = Cpt(EpicsSignal, ':STATUS:CLIENT_IP', kind='normal') - status_ser_status = Cpt(EpicsSignal, ':STATUS:SER_STATUS', kind='normal') - status_ser_bytes_in = Cpt(EpicsSignal, ':STATUS:SER_BYTES_IN', kind='normal') - status_ser_bytes_out = Cpt(EpicsSignal, ':STATUS:SER_BYTES_OUT', kind='normal') - status_display = Cpt(EpicsSignal, ':STATUS:DISPLAY', kind='normal') - - - - """ - Sensor mode - """ + status_temp = Cpt(EpicsSignalRO, ':STATUS:TEMP', kind='omitted') + status_load = Cpt(EpicsSignalRO, ':STATUS:LOAD', kind='omitted') + status_memory = Cpt(EpicsSignalRO, ':STATUS:MEMORY', kind='omitted') + status_net_bytes_in = Cpt(EpicsSignalRO, ':STATUS:NET_BYTES_IN', kind='omitted') + status_net_bytes_out = Cpt(EpicsSignalRO, ':STATUS:NET_BYTES_OUT', kind='omitted') + status_net = Cpt(EpicsSignalRO, ':STATUS:NET', kind='omitted') + status_status = Cpt(EpicsSignalRO, ':STATUS:STATUS', kind='omitted') + status_bootcnt = Cpt(EpicsSignalRO, ':STATUS:BOOTCNT', kind='omitted') + status_uptime = Cpt(EpicsSignalRO, ':STATUS:UPTIME', kind='omitted') + status_ip = Cpt(EpicsSignalRO, ':STATUS:IP', kind='omitted') + status_client_ip = Cpt(EpicsSignalRO, ':STATUS:CLIENT_IP', kind='omitted') + status_ser_status = Cpt(EpicsSignalRO, ':STATUS:SER_STATUS', kind='omitted') + status_ser_bytes_in = Cpt(EpicsSignalRO, ':STATUS:SER_BYTES_IN', kind='omitted') + status_ser_bytes_out = Cpt(EpicsSignalRO, ':STATUS:SER_BYTES_OUT', kind='omitted') + status_display = Cpt(EpicsSignalRO, ':STATUS:DISPLAY', kind='omitted') + # Sensor mode cmd_sensor_mode = Cpt(EpicsSignal, ':CMD:SENSOR_MODE', kind='normal') sensor_mode = Cpt(EpicsSignal, ':SENSOR_MODE', kind='normal', doc='Sensor mode') - - - - """ - Maximum frequency - """ + # Maximum frequency cmd_freq = Cpt(EpicsSignal, ':CMD:FREQ', kind='normal') freq = Cpt(EpicsSignal, ':FREQ', kind='normal') - - - - """ - Maximum velocity - """ - cmd_vel = Cpt(EpicsSignal, ':CMD:VEL', kind='normal') - vel = Cpt(EpicsSignal, ':VEL', kind='normal') - - - - """ - Maximum acceleration - """ - cmd_accel = Cpt(EpicsSignal, ':CMD:ACCEL', kind='normal') - accel = Cpt(EpicsSignal, ':ACCEL', kind='normal') - - - - """ - Read and Set Poses, Pose 1-5: - """ - pose_1_name = Cpt(EpicsSignal, ':POSE_1:NAME', kind='normal', doc='Pose 1 name input') - pose_1_name_rbv = Cpt(EpicsSignal, ':POSE_1:NAME_RBV', kind='normal', doc='Pose 1 name readback') - pose_1_x = Cpt(EpicsSignal, ':POSE_1:X', kind='normal', doc='Pose 1 X Position Data') - pose_1_y = Cpt(EpicsSignal, ':POSE_1:Y', kind='normal', doc='Pose 1 Y Position Data') - pose_1_z = Cpt(EpicsSignal, ':POSE_1:Z', kind='normal', doc='Pose 1 Z Position Data') - pose_1_rx = Cpt(EpicsSignal, ':POSE_1:RX', kind='normal', doc='Pose 1 RX Position Data') - pose_1_ry = Cpt(EpicsSignal, ':POSE_1:RY', kind='normal', doc='Pose 1 RY Position Data') - pose_1_rz = Cpt(EpicsSignal, ':POSE_1:RZ', kind='normal', doc='Pose 1 RZ Position Data') - pose_1_record = Cpt(EpicsSignal, ':POSE_1:RECORD', kind='normal', doc='Fanout for pose') - pose_1_execute = Cpt(EpicsSignal, ':POSE_1:EXECUTE', kind='normal', doc='Enacts Pose 1 Positions') - - pose_2_name = Cpt(EpicsSignal, ':POSE_2:NAME', kind='normal', doc='Pose 2 name input') - pose_2_name_rbv = Cpt(EpicsSignal, ':POSE_2:NAME_RBV', kind='normal', doc='Pose 2 name readback') - pose_2_x = Cpt(EpicsSignal, ':POSE_2:X', kind='normal', doc='Pose 2 X Position Data') - pose_2_y = Cpt(EpicsSignal, ':POSE_2:Y', kind='normal', doc='Pose 2 Y Position Data') - pose_2_z = Cpt(EpicsSignal, ':POSE_2:Z', kind='normal', doc='Pose 2 Z Position Data') - pose_2_rx = Cpt(EpicsSignal, ':POSE_2:RX', kind='normal', doc='Pose 2 RX Position Data') - pose_2_ry = Cpt(EpicsSignal, ':POSE_2:RY', kind='normal', doc='Pose 2 RY Position Data') - pose_2_rz = Cpt(EpicsSignal, ':POSE_2:RZ', kind='normal', doc='Pose 2 RZ Position Data') - pose_2_record = Cpt(EpicsSignal, ':POSE_2:RECORD', kind='normal', doc='Fanout for pose') - pose_2_execute = Cpt(EpicsSignal, ':POSE_2:EXECUTE', kind='normal', doc='Enacts Pose 2 Positions') - - pose_3_name = Cpt(EpicsSignal, ':POSE_3:NAME', kind='normal', doc='Pose 3 name input') - pose_3_name_rbv = Cpt(EpicsSignal, ':POSE_3:NAME_RBV', kind='normal', doc='Pose 3 name readback') - pose_3_x = Cpt(EpicsSignal, ':POSE_3:X', kind='normal', doc='Pose 3 X Position Data') - pose_3_y = Cpt(EpicsSignal, ':POSE_3:Y', kind='normal', doc='Pose 3 Y Position Data') - pose_3_z = Cpt(EpicsSignal, ':POSE_3:Z', kind='normal', doc='Pose 3 Z Position Data') - pose_3_rx = Cpt(EpicsSignal, ':POSE_3:RX', kind='normal', doc='Pose 3 RX Position Data') - pose_3_ry = Cpt(EpicsSignal, ':POSE_3:RY', kind='normal', doc='Pose 3 RY Position Data') - pose_3_rz = Cpt(EpicsSignal, ':POSE_3:RZ', kind='normal', doc='Pose 3 RZ Position Data') - pose_3_record = Cpt(EpicsSignal, ':POSE_3:RECORD', kind='normal', doc='Fanout for pose') - pose_3_execute = Cpt(EpicsSignal, ':POSE_3:EXECUTE', kind='normal', doc='Enacts Pose 3 Positions') - - pose_4_name = Cpt(EpicsSignal, ':POSE_4:NAME', kind='normal', doc='Pose 4 name input') - pose_4_name_rbv = Cpt(EpicsSignal, ':POSE_4:NAME_RBV', kind='normal', doc='Pose 4 name readback') - pose_4_x = Cpt(EpicsSignal, ':POSE_4:X', kind='normal', doc='Pose 4 X Position Data') - pose_4_y = Cpt(EpicsSignal, ':POSE_4:Y', kind='normal', doc='Pose 4 Y Position Data') - pose_4_z = Cpt(EpicsSignal, ':POSE_4:Z', kind='normal', doc='Pose 4 Z Position Data') - pose_4_rx = Cpt(EpicsSignal, ':POSE_4:RX', kind='normal', doc='Pose 4 RX Position Data') - pose_4_ry = Cpt(EpicsSignal, ':POSE_4:RY', kind='normal', doc='Pose 4 RY Position Data') - pose_4_rz = Cpt(EpicsSignal, ':POSE_4:RZ', kind='normal', doc='Pose 4 RZ Position Data') - pose_4_record = Cpt(EpicsSignal, ':POSE_4:RECORD', kind='normal', doc='Fanout for pose') - pose_4_execute = Cpt(EpicsSignal, ':POSE_4:EXECUTE', kind='normal', doc='Enacts Pose 4 Positions') - - pose_5_name = Cpt(EpicsSignal, ':POSE_5:NAME', kind='normal', doc='Pose 5 name input') - pose_5_name_rbv = Cpt(EpicsSignal, ':POSE_5:NAME_RBV', kind='normal', doc='Pose 5 name readback') - pose_5_x = Cpt(EpicsSignal, ':POSE_5:X', kind='normal', doc='Pose 5 X Position Data') - pose_5_y = Cpt(EpicsSignal, ':POSE_5:Y', kind='normal', doc='Pose 5 Y Position Data') - pose_5_z = Cpt(EpicsSignal, ':POSE_5:Z', kind='normal', doc='Pose 5 Z Position Data') - pose_5_rx = Cpt(EpicsSignal, ':POSE_5:RX', kind='normal', doc='Pose 5 RX Position Data') - pose_5_ry = Cpt(EpicsSignal, ':POSE_5:RY', kind='normal', doc='Pose 5 RY Position Data') - pose_5_rz = Cpt(EpicsSignal, ':POSE_5:RZ', kind='normal', doc='Pose 5 RZ Position Data') - pose_5_record = Cpt(EpicsSignal, ':POSE_5:RECORD', kind='normal', doc='Fanout for pose') - pose_5_execute = Cpt(EpicsSignal, ':POSE_5:EXECUTE', kind='normal', doc='Enacts Pose 5 Positions') - + # Maximum velocity + cmd_vel = Cpt(EpicsSignal, ':CMD:VEL', kind='normal', doc='sets movement velocity') + vel = Cpt(EpicsSignal, ':VEL', kind='normal', doc='current speed-control and speed settings') + # Maximum acceleration + cmd_accel = Cpt(EpicsSignal, ':CMD:ACCEL', kind='normal', doc='sets movement acceleration') + accel = Cpt(EpicsSignal, ':ACCEL', kind='normal', doc='current acceleration-control and acceleration settings') +# Read and Set Poses, Pose 1-5: + + +class SmarpodPose(Device): + pose_name = Cpt(EpicsSignal, ':NAME_RBV', write_pv=':NAME', kind='normal', doc='Pose name input') + x = Cpt(EpicsSignal, ':X', kind='normal', doc='Pose X Position Data') + y = Cpt(EpicsSignal, ':Y', kind='normal', doc='Pose Y Position Data') + z = Cpt(EpicsSignal, ':Z', kind='normal', doc='Pose Z Position Data') + rx = Cpt(EpicsSignal, ':RX', kind='normal', doc='Pose RX Position Data') + ry = Cpt(EpicsSignal, ':RY', kind='normal', doc='Pose RY Position Data') + rz = Cpt(EpicsSignal, ':RZ', kind='normal', doc='Pose RZ Position Data') + record = Cpt(EpicsSignal, ':RECORD', kind='normal', doc='Fanout for pose') + execute = Cpt(EpicsSignal, ':EXECUTE', kind='normal', doc='Enacts Pose Positions') + + +class Smarpod(Device): + pose_1 = Cpt(SmarpodPose, ":POSE_1") + pose_2 = Cpt(SmarpodPose, ":POSE_2") + pose_3 = Cpt(SmarpodPose, ":POSE_3") + pose_4 = Cpt(SmarpodPose, ":POSE_4") + pose_5 = Cpt(SmarpodPose, ":POSE_5") From 4be4caeb64ad609f1937d9aa3dcb14e4b09c7803 Mon Sep 17 00:00:00 2001 From: Patrick Oppermann Date: Tue, 14 Mar 2023 10:41:04 -0700 Subject: [PATCH 3/6] add Status class, change from Positioner to device --- pcdsdevices/smarpod.py | 96 +++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/pcdsdevices/smarpod.py b/pcdsdevices/smarpod.py index 7d3599d6ea4..7798a887df1 100644 --- a/pcdsdevices/smarpod.py +++ b/pcdsdevices/smarpod.py @@ -1,19 +1,52 @@ """ Module for the SmarPod and related devices. """ -from ophyd import PVPositioner from ophyd.device import Component as Cpt from ophyd.device import Device from ophyd.signal import EpicsSignal, EpicsSignalRO -class SmarPod(PVPositioner): +class SmarPodPose(Device): + pose_name = Cpt(EpicsSignal, ':NAME_RBV', write_pv=':NAME', kind='normal', doc='Pose name input') + x = Cpt(EpicsSignal, ':X', kind='normal', doc='Pose X Position Data') + y = Cpt(EpicsSignal, ':Y', kind='normal', doc='Pose Y Position Data') + z = Cpt(EpicsSignal, ':Z', kind='normal', doc='Pose Z Position Data') + rx = Cpt(EpicsSignal, ':RX', kind='normal', doc='Pose RX Position Data') + ry = Cpt(EpicsSignal, ':RY', kind='normal', doc='Pose RY Position Data') + rz = Cpt(EpicsSignal, ':RZ', kind='normal', doc='Pose RZ Position Data') + record = Cpt(EpicsSignal, ':RECORD', kind='normal', doc='Fanout for pose') + execute = Cpt(EpicsSignal, ':EXECUTE', kind='normal', doc='Enacts Pose Positions') + + +class SmarPodStatus(Device): + temp = Cpt(EpicsSignalRO, ':TEMP', kind='omitted') + load = Cpt(EpicsSignalRO, ':LOAD', kind='omitted') + memory = Cpt(EpicsSignalRO, ':MEMORY', kind='omitted') + net_bytes_in = Cpt(EpicsSignalRO, ':NET_BYTES_IN', kind='omitted') + net_bytes_out = Cpt(EpicsSignalRO, ':NET_BYTES_OUT', kind='omitted') + net = Cpt(EpicsSignalRO, ':NET', kind='omitted') + status = Cpt(EpicsSignalRO, ':STATUS', kind='omitted') + bootcnt = Cpt(EpicsSignalRO, ':BOOTCNT', kind='omitted') + uptime = Cpt(EpicsSignalRO, ':UPTIME', kind='omitted') + ip = Cpt(EpicsSignalRO, ':IP', kind='omitted') + client_ip = Cpt(EpicsSignalRO, ':CLIENT_IP', kind='omitted') + ser_status = Cpt(EpicsSignalRO, ':SER_STATUS', kind='omitted') + ser_bytes_in = Cpt(EpicsSignalRO, ':SER_BYTES_IN', kind='omitted') + ser_bytes_out = Cpt(EpicsSignalRO, ':SER_BYTES_OUT', kind='omitted') + display = Cpt(EpicsSignalRO, ':DISPLAY', kind='omitted') + + +class SmarPod(Device): # A base class for a SmarPod controller. init = Cpt(EpicsSignal, ':CMD:INIT', kind='normal') status = Cpt(EpicsSignal, ':CMD:ALL_STATUS', kind='normal', doc='SmarPod status code') # Controlling unit number cmd_unit = Cpt(EpicsSignal, ':CMD:UNIT', kind='normal') unit = Cpt(EpicsSignal, ':UNIT', kind='normal', doc='Selected SmarPod unit') + # Device Info + ver_sn = Cpt(EpicsSignalRO, ':VER:SN', kind='omitted') + ver_product = Cpt(EpicsSignalRO, ':VER:PRODUCT', kind='omitted') + ver_firmware = Cpt(EpicsSignalRO, ':VER:FIRMWARE', kind='omitted') # Reference cmd_ref = Cpt(EpicsSignal, ':CMD:REF', kind='normal') ref = Cpt(EpicsSignalRO, ':REF', kind='normal', doc='Readback referenced state') @@ -73,31 +106,6 @@ class SmarPod(PVPositioner): cmd_px = Cpt(EpicsSignal, ':CMD:PX', kind='normal') cmd_py = Cpt(EpicsSignal, ':CMD:PY', kind='normal') cmd_pz = Cpt(EpicsSignal, ':CMD:PZ', kind='normal') - # Miscellaneous - cmd_calibrate = Cpt(EpicsSignal, ':CMD:CALIBRATE', kind='normal') - cmd_read_ver = Cpt(EpicsSignal, ':CMD:READ_VER', kind='normal') - ver_sys = Cpt(EpicsSignalRO, ':VER:SYS', kind='omitted') - # Device Info - ver_sn = Cpt(EpicsSignalRO, ':VER:SN', kind='omitted') - ver_product = Cpt(EpicsSignalRO, ':VER:PRODUCT', kind='omitted') - ver_firmware = Cpt(EpicsSignalRO, ':VER:FIRMWARE', kind='omitted') - # Status - cmd_read_status = Cpt(EpicsSignal, ':CMD:READ_STATUS', kind='normal') - status_temp = Cpt(EpicsSignalRO, ':STATUS:TEMP', kind='omitted') - status_load = Cpt(EpicsSignalRO, ':STATUS:LOAD', kind='omitted') - status_memory = Cpt(EpicsSignalRO, ':STATUS:MEMORY', kind='omitted') - status_net_bytes_in = Cpt(EpicsSignalRO, ':STATUS:NET_BYTES_IN', kind='omitted') - status_net_bytes_out = Cpt(EpicsSignalRO, ':STATUS:NET_BYTES_OUT', kind='omitted') - status_net = Cpt(EpicsSignalRO, ':STATUS:NET', kind='omitted') - status_status = Cpt(EpicsSignalRO, ':STATUS:STATUS', kind='omitted') - status_bootcnt = Cpt(EpicsSignalRO, ':STATUS:BOOTCNT', kind='omitted') - status_uptime = Cpt(EpicsSignalRO, ':STATUS:UPTIME', kind='omitted') - status_ip = Cpt(EpicsSignalRO, ':STATUS:IP', kind='omitted') - status_client_ip = Cpt(EpicsSignalRO, ':STATUS:CLIENT_IP', kind='omitted') - status_ser_status = Cpt(EpicsSignalRO, ':STATUS:SER_STATUS', kind='omitted') - status_ser_bytes_in = Cpt(EpicsSignalRO, ':STATUS:SER_BYTES_IN', kind='omitted') - status_ser_bytes_out = Cpt(EpicsSignalRO, ':STATUS:SER_BYTES_OUT', kind='omitted') - status_display = Cpt(EpicsSignalRO, ':STATUS:DISPLAY', kind='omitted') # Sensor mode cmd_sensor_mode = Cpt(EpicsSignal, ':CMD:SENSOR_MODE', kind='normal') sensor_mode = Cpt(EpicsSignal, ':SENSOR_MODE', kind='normal', doc='Sensor mode') @@ -110,24 +118,16 @@ class SmarPod(PVPositioner): # Maximum acceleration cmd_accel = Cpt(EpicsSignal, ':CMD:ACCEL', kind='normal', doc='sets movement acceleration') accel = Cpt(EpicsSignal, ':ACCEL', kind='normal', doc='current acceleration-control and acceleration settings') -# Read and Set Poses, Pose 1-5: - - -class SmarpodPose(Device): - pose_name = Cpt(EpicsSignal, ':NAME_RBV', write_pv=':NAME', kind='normal', doc='Pose name input') - x = Cpt(EpicsSignal, ':X', kind='normal', doc='Pose X Position Data') - y = Cpt(EpicsSignal, ':Y', kind='normal', doc='Pose Y Position Data') - z = Cpt(EpicsSignal, ':Z', kind='normal', doc='Pose Z Position Data') - rx = Cpt(EpicsSignal, ':RX', kind='normal', doc='Pose RX Position Data') - ry = Cpt(EpicsSignal, ':RY', kind='normal', doc='Pose RY Position Data') - rz = Cpt(EpicsSignal, ':RZ', kind='normal', doc='Pose RZ Position Data') - record = Cpt(EpicsSignal, ':RECORD', kind='normal', doc='Fanout for pose') - execute = Cpt(EpicsSignal, ':EXECUTE', kind='normal', doc='Enacts Pose Positions') - - -class Smarpod(Device): - pose_1 = Cpt(SmarpodPose, ":POSE_1") - pose_2 = Cpt(SmarpodPose, ":POSE_2") - pose_3 = Cpt(SmarpodPose, ":POSE_3") - pose_4 = Cpt(SmarpodPose, ":POSE_4") - pose_5 = Cpt(SmarpodPose, ":POSE_5") + # Read and Set Poses, Pose 1-5: + pose_1 = Cpt(SmarPodPose, ':POSE_1') + pose_2 = Cpt(SmarPodPose, ':POSE_2') + pose_3 = Cpt(SmarPodPose, ':POSE_3') + pose_4 = Cpt(SmarPodPose, ':POSE_4') + pose_5 = Cpt(SmarPodPose, ':POSE_5') + # Status + cmd_read_status = Cpt(EpicsSignal, ':CMD:READ_STATUS', kind='normal') + status = Cpt(SmarPodStatus, ":STATUS") + # Miscellaneous + cmd_calibrate = Cpt(EpicsSignal, ':CMD:CALIBRATE', kind='normal') + cmd_read_ver = Cpt(EpicsSignal, ':CMD:READ_VER', kind='normal') + ver_sys = Cpt(EpicsSignalRO, ':VER:SYS', kind='omitted') From 07f823a9c0495541415018a705d67bada94d15d0 Mon Sep 17 00:00:00 2001 From: Patrick Oppermann Date: Wed, 15 Mar 2023 10:56:21 -0700 Subject: [PATCH 4/6] add Doc for poses, add GUI --- pcdsdevices/smarpod.py | 5 + pcdsdevices/ui/SmarPod_Pivot.ui | 556 +++++++++ pcdsdevices/ui/SmarPod_Poses.ui | 743 ++++++++++++ pcdsdevices/ui/SmarPod_Position.ui | 1688 +++++++++++++++++++++++++++ pcdsdevices/ui/SmarPod_Reference.ui | 565 +++++++++ pcdsdevices/ui/Smarpod.detailed.ui | 327 ++++++ pcdsdevices/ui/smarpod.detailed.ui | 57 - 7 files changed, 3884 insertions(+), 57 deletions(-) create mode 100644 pcdsdevices/ui/SmarPod_Pivot.ui create mode 100644 pcdsdevices/ui/SmarPod_Poses.ui create mode 100644 pcdsdevices/ui/SmarPod_Position.ui create mode 100644 pcdsdevices/ui/SmarPod_Reference.ui create mode 100644 pcdsdevices/ui/Smarpod.detailed.ui delete mode 100644 pcdsdevices/ui/smarpod.detailed.ui diff --git a/pcdsdevices/smarpod.py b/pcdsdevices/smarpod.py index 7798a887df1..6b8a1098eac 100644 --- a/pcdsdevices/smarpod.py +++ b/pcdsdevices/smarpod.py @@ -7,6 +7,11 @@ class SmarPodPose(Device): + """ + The translation and orientation of the SmarPod stage is called the pose. The translation part of a pose is + the offset of the stage in X, Y and Z direction relative to the zero position. The angles Θx, Θy and Θz + define the rotation around the respective axis. + """ pose_name = Cpt(EpicsSignal, ':NAME_RBV', write_pv=':NAME', kind='normal', doc='Pose name input') x = Cpt(EpicsSignal, ':X', kind='normal', doc='Pose X Position Data') y = Cpt(EpicsSignal, ':Y', kind='normal', doc='Pose Y Position Data') diff --git a/pcdsdevices/ui/SmarPod_Pivot.ui b/pcdsdevices/ui/SmarPod_Pivot.ui new file mode 100644 index 00000000000..29f28dc6ca0 --- /dev/null +++ b/pcdsdevices/ui/SmarPod_Pivot.ui @@ -0,0 +1,556 @@ + + + Form + + + + 0 + 0 + 693 + 369 + + + + Form + + + + + 90 + 20 + 531 + 321 + + + + + 10 + + + + + + 0 + 0 + + + + + + + + + + + + + + Readback pivot point + + + ca://${BASE}:CMD:PIVOT_RBV + + + Are you sure you want to proceed? Only units that have been replaced require calibration. + + + 1 + + + true + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Pivot Point X-Direction: + + + 6 + + + + + + + + + + request pos + + + ca://${BASE}:CMD:PX + + + + + + 1 + + + true + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:PX_M + + + ca://${BASE}:PX + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:PX + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Pivot Point Y-Direction: + + + 6 + + + + + + + + + + request pos + + + ca://${BASE}:CMD:PY + + + + + + 1 + + + true + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:PY_M + + + ca://${BASE}:PY + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:PY + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Pivot Point Z-Direction: + + + 6 + + + + + + + + + + request pos + + + ca://${BASE}:CMD:PZ + + + + + + 1 + + + true + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:PZ_M + + + ca://${BASE}:PZ + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:PZ + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + + + Pivot Point Mode + + + ca://${BASE}:CMD:PIVOT_MODE + + + + + + 1 + + + true + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:PIVOT_MODE + + + ca://${BASE}:PX + + + + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Execute: + + + 6 + + + + + + + + + + Set + + + ca://${BASE}:CMD:SET_PIVOT + + + Are you sure you want to proceed? Only units that have been replaced require calibration. + + + 1 + + + true + + + + + + + + + + Sync + + + ca://${BASE}:CMD:SYNC_PIVOT + + + + + + 1 + + + true + + + + + + + + + + Qt::Horizontal + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 3 + + + 1 + + + 1 + + + + + + + + + + PyDMLabel + QLabel +
pydm.widgets.label
+
+ + PyDMLineEdit + QLineEdit +
pydm.widgets.line_edit
+
+ + PyDMPushButton + QPushButton +
pydm.widgets.pushbutton
+
+
+ + +
diff --git a/pcdsdevices/ui/SmarPod_Poses.ui b/pcdsdevices/ui/SmarPod_Poses.ui new file mode 100644 index 00000000000..b648852c7e5 --- /dev/null +++ b/pcdsdevices/ui/SmarPod_Poses.ui @@ -0,0 +1,743 @@ + + + Form + + + + 0 + 0 + 737 + 824 + + + + Form + + + + + 140 + 20 + 513 + 790 + + + + + 10 + + + + + + 0 + 0 + + + + + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Pose 1: + + + 6 + + + + + + + + + + + 75 + true + + + + + + + ca://${BASE}:POSE_1:NAME_RBV + + + 6 + + + ca://${BASE}:POSE_1:NAME_RBV + + + + + + + + + + + + + ca://${BASE}:POSE_1:NAME + + + + + + + + + + Set Pose + + + ca://${BASE}:POSE_1:RECORD + + + true + + + Are you sure you want to proceed? This will overwrite any previous pose. + + + 1 + + + 1 + + + true + + + + + + + + + + Execute + + + ca://${BASE}:POSE_1:EXECUTE + + + true + + + 1 + + + 1 + + + true + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Pose 2: + + + 6 + + + + + + + + + + + 75 + true + + + + + + + ca://${BASE}:POSE_2:NAME_RBV + + + 6 + + + ca://${BASE}:POSE_2:NAME_RBV + + + + + + + + + + + + + ca://${BASE}:POSE_2:NAME + + + + + + + + + + Set Pose + + + ca://${BASE}:POSE_2:RECORD + + + true + + + Are you sure you want to proceed? This will overwrite any previous pose. + + + 1 + + + 1 + + + true + + + + + + + + + + Execute + + + ca://${BASE}:POSE_2:EXECUTE + + + true + + + 1 + + + 1 + + + true + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Pose 3: + + + 6 + + + + + + + + + + + 75 + true + + + + + + + ca://${BASE}:POSE_3:NAME_RBV + + + 6 + + + ca://${BASE}:POSE_3:NAME_RBV + + + + + + + + + + ca://${BASE}:POSE_3:NAME + + + + + + + + + + Set Pose + + + ca://${BASE}:POSE_3:RECORD + + + true + + + Are you sure you want to proceed? This will overwrite any previous pose. + + + 1 + + + 1 + + + true + + + + + + + + + + Execute + + + ca://${BASE}:POSE_3:EXECUTE + + + true + + + 1 + + + 1 + + + true + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Pose 4: + + + 6 + + + + + + + + + + + 75 + true + + + + + + + ca://${BASE}:POSE_4:NAME_RBV + + + 6 + + + ca://${BASE}:POSE_4:NAME_RBV + + + + + + + + + + ca://${BASE}:POSE_4:NAME + + + + + + + + + + Set Pose + + + ca://${BASE}:POSE_4:RECORD + + + true + + + Are you sure you want to proceed? This will overwrite any previous pose. + + + 1 + + + 1 + + + true + + + + + + + + + + Execute + + + ca://${BASE}:POSE_4:EXECUTE + + + true + + + 1 + + + 1 + + + true + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Pose 5: + + + 6 + + + + + + + + + + + 75 + true + + + + + + + ca://${BASE}:POSE_5:NAME_RBV + + + 6 + + + ca://${BASE}:POSE_5:NAME_RBV + + + + + + + + + + ca://${BASE}:POSE_5:NAME + + + + + + + + + + Set Pose + + + ca://${BASE}:POSE_5:RECORD + + + true + + + Are you sure you want to proceed? This will overwrite any previous pose. + + + 1 + + + 1 + + + true + + + + + + + + + + Execute + + + ca://${BASE}:POSE_5:EXECUTE + + + true + + + 1 + + + 1 + + + true + + + + + + + + + + Qt::Horizontal + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 3 + + + 1 + + + 1 + + + + + + + + + + PyDMLabel + QLabel +
pydm.widgets.label
+
+ + PyDMLineEdit + QLineEdit +
pydm.widgets.line_edit
+
+ + PyDMPushButton + QPushButton +
pydm.widgets.pushbutton
+
+
+ + +
diff --git a/pcdsdevices/ui/SmarPod_Position.ui b/pcdsdevices/ui/SmarPod_Position.ui new file mode 100644 index 00000000000..f37dd3d00a6 --- /dev/null +++ b/pcdsdevices/ui/SmarPod_Position.ui @@ -0,0 +1,1688 @@ + + + Form + + + + 0 + 0 + 875 + 987 + + + + + + + + + 120 + 40 + 641 + 781 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 100 + 100 + + + + QFrame::Box + + + 0 + + + + 5 + + + + + 10 + + + + + + 0 + 0 + + + + + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + X + + + 6 + + + + + + + 0 + + + + + + 0 + 0 + + + + + 25 + 25 + + + + + 25 + 25 + + + + + + + + Widget for graphical representation of bits from an integer number + with support for Channels and more from PyDM + + Parameters + ---------- + parent : QWidget + The parent widget for the Label + init_channel : str, optional + The channel to be used by the widget. + + + + false + + + ca://${BASE}:MOVING + + + + 20 + 100 + 239 + + + + + 60 + 60 + 60 + + + + false + + + true + + + + + + + + 60 + 0 + + + + motion + + + Qt::AlignCenter + + + true + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + + + + + ca://${BASE}:X + + + Qt::AlignCenter + + + true + + + ca://${BASE}:X + + + + + + + + + + ca://${BASE}:CMD:X + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Y + + + + + + + 0 + + + + + + 0 + 0 + + + + + 25 + 25 + + + + + 25 + 25 + + + + + + + + Widget for graphical representation of bits from an integer number + with support for Channels and more from PyDM + + Parameters + ---------- + parent : QWidget + The parent widget for the Label + init_channel : str, optional + The channel to be used by the widget. + + + + false + + + ca://${BASE}:MOVING + + + + 20 + 100 + 239 + + + + + 60 + 60 + 60 + + + + false + + + true + + + + + + + + 60 + 0 + + + + motion + + + Qt::AlignCenter + + + true + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + + + + + ca://${BASE}:Y + + + Qt::AlignCenter + + + true + + + ca://${BASE}:Y + + + + + + + + + + ca://${BASE}:CMD:Y + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Z + + + + + + + 0 + + + + + + 0 + 0 + + + + + 25 + 25 + + + + + 25 + 25 + + + + + + + + Widget for graphical representation of bits from an integer number + with support for Channels and more from PyDM + + Parameters + ---------- + parent : QWidget + The parent widget for the Label + init_channel : str, optional + The channel to be used by the widget. + + + + false + + + ca://${BASE}:MOVING + + + + 20 + 100 + 239 + + + + + 60 + 60 + 60 + + + + false + + + true + + + + + + + + 60 + 0 + + + + motion + + + Qt::AlignCenter + + + true + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + + + + + ca://${BASE}:Z + + + Qt::AlignCenter + + + true + + + ca://${BASE}:Z + + + + + + + + + + ca://${BASE}:CMD:Z + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + rX + + + 0 + + + + + + + 0 + + + + + + 0 + 0 + + + + + 25 + 25 + + + + + 25 + 25 + + + + + + + + Widget for graphical representation of bits from an integer number + with support for Channels and more from PyDM + + Parameters + ---------- + parent : QWidget + The parent widget for the Label + init_channel : str, optional + The channel to be used by the widget. + + + + false + + + ca://${BASE}:MOVING + + + + 20 + 100 + 239 + + + + + 60 + 60 + 60 + + + + false + + + true + + + + + + + + 60 + 0 + + + + motion + + + Qt::AlignCenter + + + true + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + + + + + ca://${BASE}:RX + + + Qt::AlignCenter + + + true + + + ca://${BASE}:RX + + + + + + + + + + ca://${BASE}:CMD:RX + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + rY + + + 2 + + + + + + + 0 + + + + + + 0 + 0 + + + + + 25 + 25 + + + + + 25 + 25 + + + + + + + + Widget for graphical representation of bits from an integer number + with support for Channels and more from PyDM + + Parameters + ---------- + parent : QWidget + The parent widget for the Label + init_channel : str, optional + The channel to be used by the widget. + + + + false + + + ca://${BASE}:MOVING + + + + 20 + 100 + 239 + + + + + 60 + 60 + 60 + + + + false + + + true + + + + + + + + 60 + 0 + + + + motion + + + Qt::AlignCenter + + + true + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + + + + + ca://${BASE}:RY + + + Qt::AlignCenter + + + true + + + ca://${BASE}:RY + + + + + + + + + + ca://${BASE}:RY + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + rZ + + + 2 + + + + + + + 0 + + + + + + 0 + 0 + + + + + 25 + 25 + + + + + 25 + 25 + + + + + + + + Widget for graphical representation of bits from an integer number + with support for Channels and more from PyDM + + Parameters + ---------- + parent : QWidget + The parent widget for the Label + init_channel : str, optional + The channel to be used by the widget. + + + + false + + + ca://${BASE}:MOVING + + + + 20 + 100 + 239 + + + + + 60 + 60 + 60 + + + + false + + + true + + + + + + + + 60 + 0 + + + + motion + + + Qt::AlignCenter + + + true + + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + + + + + ca://${BASE}:RZ + + + Qt::AlignCenter + + + true + + + ca://${BASE}:RZ + + + + + + + + + + ca://${BASE}:CMD:RZ + + + + + + + + + + Qt::Horizontal + + + + + + + + 0 + 50 + + + + + 3 + + + 1 + + + 1 + + + + + + 0 + 0 + + + + + + + Pose Reachable? + + + ca://${BASE}:CMD:REACHABLE + + + + + + 1 + + + None + + + true + + + + + + + 0 + + + + + + 60 + 0 + + + + Reachable + + + Qt::AlignCenter + + + true + + + + + + + + + + ca://${BASE}:REACHABLE + + + + 255 + 0 + 0 + + + + false + + + true + + + + + + + + + + + + + + + + + 0 + 239 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 0 + 239 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 0 + 239 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 75 + true + + + + + + + + + + Move + + + ca://${BASE}:CMD:MOVE + + + 1 + + + None + + + true + + + + + + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 75 + true + + + + + + + + + + Stop + + + ca://${BASE}:CMD:STOP + + + + + + 1 + + + None + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Error: + + + 2 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + + + + + ca://${BASE}:ERROR_CODE + + + Qt::AlignCenter + + + true + + + ca://${BASE}:ERROR_CODE + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + + + + + ca://${BASE}:ERROR_DESC + + + Qt::AlignCenter + + + true + + + ca://${BASE}:ERROR_DESC + + + + + + + 0 + + + + + + 25 + 25 + + + + + 25 + 25 + + + + + + + 1.000000000000000 + + + + + + + + 60 + 0 + + + + alarm + + + Qt::AlignCenter + + + true + + + + + + + + + + + + + + + Reference and Calibration + + + + SmarPod_Reference.ui + + + + + + + + + + + + Pivot Settings + + + + SmarPod_Pivot.ui + + + + + + + + + + + Coordinate System + + + + + + + + + + Poses + + + + SmarPod_Poses.ui + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + PyDMLabel + QLabel +
pydm.widgets.label
+
+ + PyDMByteIndicator + QWidget +
pydm.widgets.byte
+
+ + PyDMLineEdit + QLineEdit +
pydm.widgets.line_edit
+
+ + PyDMPushButton + QPushButton +
pydm.widgets.pushbutton
+
+ + PyDMRelatedDisplayButton + QPushButton +
pydm.widgets.related_display_button
+
+ + TyphosAlarmCircle + QWidget +
typhos.alarm
+
+
+ + +
diff --git a/pcdsdevices/ui/SmarPod_Reference.ui b/pcdsdevices/ui/SmarPod_Reference.ui new file mode 100644 index 00000000000..10c3402ffba --- /dev/null +++ b/pcdsdevices/ui/SmarPod_Reference.ui @@ -0,0 +1,565 @@ + + + Form + + + + 0 + 0 + 734 + 370 + + + + Form + + + + + 170 + 30 + 452 + 291 + + + + + 10 + + + + + + 0 + 0 + + + + + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Reference Method: + + + 6 + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:REF_METHOD + + + ca://${BASE}:REF_METHOD + + + + + + + + + + + + + true + + + false + + + false + + + + + + + caput ${BASE}:CMD:REF_METHOD 0; + caput ${BASE}:CMD:REF_METHOD 1; + caput ${BASE}:CMD:REF_METHOD 2; + caput ${BASE}:CMD:REF_METHOD 3; + + + + false + + + + + + + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Reference X-Direction: + + + 6 + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:REF_X_DIRECT + + + + + + + + + + + + + true + + + false + + + false + + + + + + + caput ${BASE}:CMD:REF_X_DIRECT 0; + caput ${BASE}:CMD:REF_X_DIRECT 1; + caput ${BASE}:CMD:REF_X_DIRECT 2; + caput ${BASE}:CMD:REF_X_DIRECT 3; + caput ${BASE}:CMD:REF_X_DIRECT 4; + + + + false + + + + + + + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Reference Y-Direction: + + + 6 + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:CMD:REF_Y_DIRECT + + + + + + + + + + + + + true + + + false + + + false + + + + + + + caput ${BASE}:CMD:REF_Y_DIRECT 0; + caput ${BASE}:CMD:REF_Y_DIRECT 1; + caput ${BASE}:CMD:REF_Y_DIRECT 2; + caput ${BASE}:CMD:REF_Y_DIRECT 3; + caput ${BASE}:CMD:REF_Y_DIRECT 4; + + + + false + + + + + + + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Reference Z-Direction: + + + 6 + + + + + + + + 0 + 0 + + + + + + + ca://${BASE}:CMD:REF_Y_DIRECT + + + + + + + + + + + + + true + + + false + + + false + + + + + + + caput ${BASE}:CMD:REF_Z_DIRECT 0; + caput ${BASE}:CMD:REF_Z_DIRECT 1; + caput ${BASE}:CMD:REF_Z_DIRECT 2; + caput ${BASE}:CMD:REF_Z_DIRECT 3; + caput ${BASE}:CMD:REF_Z_DIRECT 4; + + + + false + + + + + + + + + + + + + + + + Qt::Horizontal + + + + + + + + 3 + + + 1 + + + 1 + + + + + + 75 + true + + + + + + + Execute: + + + 6 + + + + + + + + + + Reference + + + ca://${BASE}:CMD:REF + + + + + + 1 + + + true + + + + + + + + + + Calibration + + + ca://${BASE}:CMD:CALIBRATE + + + Are you sure you want to proceed? Only units that have been replaced require calibration. + + + 1 + + + true + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 3 + + + 1 + + + 1 + + + + + + + + + + PyDMLabel + QLabel +
pydm.widgets.label
+
+ + PyDMLineEdit + QLineEdit +
pydm.widgets.line_edit
+
+ + PyDMPushButton + QPushButton +
pydm.widgets.pushbutton
+
+ + PyDMShellCommand + QPushButton +
pydm.widgets.shell_command
+
+
+ + +
diff --git a/pcdsdevices/ui/Smarpod.detailed.ui b/pcdsdevices/ui/Smarpod.detailed.ui new file mode 100644 index 00000000000..3f361876f0f --- /dev/null +++ b/pcdsdevices/ui/Smarpod.detailed.ui @@ -0,0 +1,327 @@ + + + Form + + + + 0 + 0 + 713 + 559 + + + + + 0 + 0 + + + + Form + + + + + + + + + + + + + + + + + + + SmarPod_position.ui + + + + + + + + 0 + 0 + + + + + 0 + 250 + + + + + 16777215 + 500 + + + + false + + + QTabWidget::North + + + QTabWidget::Rounded + + + 1 + + + Qt::ElideNone + + + false + + + false + + + false + + + + Normal + + + + 2 + + + 2 + + + 2 + + + 2 + + + + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustToContentsOnFirstShow + + + true + + + + + 0 + 0 + 685 + 215 + + + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + + + + Panel of Signals for Device + + + + false + + + true + + + false + + + false + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + Configuration + + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + false + + + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustToContentsOnFirstShow + + + true + + + + + 0 + 0 + 685 + 215 + + + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 0 + 0 + + + + + + + + Panel of Signals for Device + + + + false + + + false + + + false + + + + + + + + + + SmarPod_position.ui + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + PyDMEmbeddedDisplay + QFrame +
pydm.widgets.embedded_display
+
+ + TyphosDisplayTitle + QFrame +
typhos.display
+
+ + TyphosSignalPanel + QWidget +
typhos.panel
+
+
+ + +
diff --git a/pcdsdevices/ui/smarpod.detailed.ui b/pcdsdevices/ui/smarpod.detailed.ui deleted file mode 100644 index ae10a9111dc..00000000000 --- a/pcdsdevices/ui/smarpod.detailed.ui +++ /dev/null @@ -1,57 +0,0 @@ - - - Form - - - - 0 - 0 - 400 - 316 - - - - Form - - - - - 100 - 0 - 201 - 75 - - - - - - - - - - 190 - 50 - 18 - 18 - - - - - - - - - - TyphosDisplayTitle - QFrame -
typhos.display
-
- - TyphosSignalPanel - QWidget -
typhos.panel
-
-
- - -
From bcd3bca23faf84d602fabb96b0a09474af9ec586 Mon Sep 17 00:00:00 2001 From: Zachary Lentz Date: Wed, 28 Feb 2024 11:18:29 -0800 Subject: [PATCH 5/6] DOC: with patrick, add basic docs --- pcdsdevices/smarpod.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pcdsdevices/smarpod.py b/pcdsdevices/smarpod.py index 6b8a1098eac..3a9eb6e269c 100644 --- a/pcdsdevices/smarpod.py +++ b/pcdsdevices/smarpod.py @@ -1,5 +1,14 @@ """ Module for the SmarPod and related devices. + +SmarPod is a hexapod-like positioning system from SmarAct + +> SMARPOD motion systems offer six degrees of freedom similar to classical hexapod +> systems while guaranteeing highest resolution and repeatability. Compared to +> serial kinematic systems, parallel kinematic SMARPODs exhibit a higher stiffness. +> A user-friendly software package allows easy integration into your own control environment assuring a very short setup time. + +see https://www.smaract.com/en/smarpod """ from ophyd.device import Component as Cpt from ophyd.device import Device @@ -24,6 +33,9 @@ class SmarPodPose(Device): class SmarPodStatus(Device): + """ + This class holds basic status information about the SmarPod. + """ temp = Cpt(EpicsSignalRO, ':TEMP', kind='omitted') load = Cpt(EpicsSignalRO, ':LOAD', kind='omitted') memory = Cpt(EpicsSignalRO, ':MEMORY', kind='omitted') @@ -42,6 +54,9 @@ class SmarPodStatus(Device): class SmarPod(Device): + """ + SmarPod is a hexapod-like positioning system from SmarAct + """ # A base class for a SmarPod controller. init = Cpt(EpicsSignal, ':CMD:INIT', kind='normal') status = Cpt(EpicsSignal, ':CMD:ALL_STATUS', kind='normal', doc='SmarPod status code') From f17a5161952ebe2c493bb9d6d1562e650ebcb779 Mon Sep 17 00:00:00 2001 From: Zachary Lentz Date: Wed, 28 Feb 2024 11:19:39 -0800 Subject: [PATCH 6/6] DOC: with patrick add pre-release docs --- .../upcoming_release_notes/1116-smarpod.rst | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 docs/source/upcoming_release_notes/1116-smarpod.rst diff --git a/docs/source/upcoming_release_notes/1116-smarpod.rst b/docs/source/upcoming_release_notes/1116-smarpod.rst new file mode 100644 index 00000000000..d8585e391f4 --- /dev/null +++ b/docs/source/upcoming_release_notes/1116-smarpod.rst @@ -0,0 +1,30 @@ +1116 smarpod +############ + +API Breaks +---------- +- N/A + +Features +-------- +- N/A + +Device Updates +-------------- +- N/A + +New Devices +----------- +- Add `SmarPod` and related devices in new `pcdsdevices.smarpod` module. + +Bugfixes +-------- +- N/A + +Maintenance +----------- +- N/A + +Contributors +------------ +- patoppermann