cgse 2023.38.0__py3-none-any.whl → 2024.1.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +77 -0
- cgse-2024.1.3.dist-info/METADATA +41 -0
- cgse-2024.1.3.dist-info/RECORD +5 -0
- {cgse-2023.38.0.dist-info → cgse-2024.1.3.dist-info}/WHEEL +1 -2
- cgse-2023.38.0.dist-info/COPYING +0 -674
- cgse-2023.38.0.dist-info/COPYING.LESSER +0 -165
- cgse-2023.38.0.dist-info/METADATA +0 -144
- cgse-2023.38.0.dist-info/RECORD +0 -649
- cgse-2023.38.0.dist-info/entry_points.txt +0 -75
- cgse-2023.38.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5235
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -626
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -912
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -234
- egse/alert/alertman_ui.py +0 -603
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -130
- egse/alert/gsm/beaglebone_protocol.py +0 -48
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -129
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1015
- egse/confman/confman.yaml +0 -67
- egse/confman/confman_cs.py +0 -239
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -442
- egse/coordinates/__init__.py +0 -531
- egse/coordinates/avoidance.py +0 -103
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -120
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -195
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1247
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -415
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2681
- egse/dpu/ccd_ui.py +0 -508
- egse/dpu/dpu.py +0 -786
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -668
- egse/dpu/fitsgen.py +0 -2077
- egse/dpu/fitsgen_test.py +0 -752
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/constants.py +0 -220
- egse/dsi/esl.py +0 -870
- egse/dsi/rmap.py +0 -1042
- egse/dsi/rmapci.py +0 -37
- egse/dsi/spw.py +0 -154
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -258
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -28
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -51
- egse/fdir/fdir_manager_controller.py +0 -228
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -25
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -37
- egse/fdir/fdir_remote_controller.py +0 -50
- egse/fdir/fdir_remote_cs.py +0 -97
- egse/fdir/fdir_remote_interface.py +0 -14
- egse/fdir/fdir_remote_popup.py +0 -31
- egse/fee/__init__.py +0 -114
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/fee.py +0 -631
- egse/fee/feesim.py +0 -750
- egse/fee/n_fee_hk.py +0 -761
- egse/fee/nfee.py +0 -187
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -24
- egse/filterwheel/eksma/fw8smc4.py +0 -661
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -81
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -111
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1068
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -712
- egse/fov/fov_ui.py +0 -861
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -135
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1281
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -588
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -138
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -196
- egse/hexapod/symetrie/puna_protocol.py +0 -131
- egse/hexapod/symetrie/puna_ui.py +0 -434
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -415
- egse/hexapod/symetrie/zonda_protocol.py +0 -119
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -765
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -69
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/macOS/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/macOS/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -73
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -98
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -163
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -811
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -603
- egse/proxy.py +0 -522
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -675
- egse/resource.py +0 -333
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -212
- egse/services.yaml +0 -51
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1180
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -69
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1479
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -247
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -193
- egse/stages/arun/smd3.py +0 -111
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -472
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -904
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -111
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1004
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -72
- egse/storage/storage_cs.py +0 -214
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -412
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1408
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -874
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -177
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -116
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -99
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -117
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -101
- egse/tempcontrol/beaglebone/beaglebone.py +0 -342
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -135
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -681
- egse/tempcontrol/digalox/digalox.py +0 -107
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -112
- egse/tempcontrol/digalox/digalox_protocol.py +0 -55
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -78
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -73
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -389
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -727
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -875
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -118
- egse/tempcontrol/srs/ptc10_protocol.py +0 -42
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -164
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -193
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -92
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -128
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -102
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -83
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -316
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -704
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -39
- egse/vacuum/pfeiffer/tc400.py +0 -113
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -140
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -24
- egse/vacuum/pfeiffer/tpg261.py +0 -81
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -60
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -24
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -44
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/create_hdf5_report.py +0 -295
- scripts/csl_model.py +0 -436
- scripts/csl_restore_setup.py +0 -230
- scripts/export-grafana-dashboards.py +0 -50
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -59
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -11
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -64
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -38
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
egse/stages/arun/smd3.py
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from prometheus_client import Gauge
|
|
4
|
-
|
|
5
|
-
from egse.control import ControlServer
|
|
6
|
-
from egse.command import ClientServerCommand
|
|
7
|
-
from egse.protocol import CommandProtocol
|
|
8
|
-
# from egse.fdir.fdir_manager import FdirManagerProxy
|
|
9
|
-
from egse.proxy import Proxy
|
|
10
|
-
from egse.settings import Settings
|
|
11
|
-
from egse.zmq_ser import bind_address
|
|
12
|
-
from egse.system import format_datetime
|
|
13
|
-
from egse.stages.arun.smd3_interface import Smd3Interface
|
|
14
|
-
from egse.stages.arun.smd3_controller import Smd3Controller, EFLAGS, SFLAGS
|
|
15
|
-
from egse.stages.arun.smd3_simulator import Smd3Simulator
|
|
16
|
-
from egse.zmq_ser import connect_address
|
|
17
|
-
|
|
18
|
-
logger = logging.getLogger(__name__)
|
|
19
|
-
|
|
20
|
-
FDIR_PREFIX = 200
|
|
21
|
-
|
|
22
|
-
DEVICE_SETTINGS = Settings.load(filename="smd3.yaml")
|
|
23
|
-
CTRL_SETTINGS = Settings.load("Arun SMD3 Control Server")
|
|
24
|
-
SITE_ID = Settings.load("SITE").ID
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class Smd3Command(ClientServerCommand):
|
|
28
|
-
pass
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class Smd3Protocol(CommandProtocol):
|
|
32
|
-
|
|
33
|
-
def __init__(self, control_server: ControlServer):
|
|
34
|
-
|
|
35
|
-
super().__init__()
|
|
36
|
-
self.control_server = control_server
|
|
37
|
-
|
|
38
|
-
if Settings.simulation_mode():
|
|
39
|
-
self.dev = Smd3Simulator()
|
|
40
|
-
else:
|
|
41
|
-
self.dev = Smd3Controller()
|
|
42
|
-
|
|
43
|
-
self.gauge_absolute_position_steps = Gauge('GSRON_SMD3_ABS_POS_STEPS', '')
|
|
44
|
-
self.gauge_absolute_position_mm = Gauge('GSRON_SMD3_ABS_POS_MM', '')
|
|
45
|
-
self.gauge_motor_temperature = Gauge('GSRON_SMD3_MOTOR_TEMP', '')
|
|
46
|
-
self.gauge_mask_in_fov = Gauge("GSRON_SMD3_MASK_IN_FOV", '')
|
|
47
|
-
self.gauge_status = []
|
|
48
|
-
self.gauge_errors = []
|
|
49
|
-
|
|
50
|
-
for _, x in enumerate(EFLAGS):
|
|
51
|
-
self.gauge_errors.append(Gauge(f'GSRON_SMD3_E_{EFLAGS[x]}', ''))
|
|
52
|
-
|
|
53
|
-
for _, x in enumerate(SFLAGS):
|
|
54
|
-
self.gauge_status.append(Gauge(f'GSRON_SMD3_S_{SFLAGS[x]}', ''))
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
self.load_commands(DEVICE_SETTINGS.Commands, Smd3Command, Smd3Interface)
|
|
58
|
-
self.build_device_method_lookup_table(self.dev)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
# move to parent class?
|
|
62
|
-
def get_bind_address(self):
|
|
63
|
-
return bind_address(
|
|
64
|
-
self.control_server.get_communication_protocol(),
|
|
65
|
-
self.control_server.get_commanding_port(),
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def get_status(self):
|
|
70
|
-
status_dict = super().get_status()
|
|
71
|
-
status_dict['hartmann_status'] = self.dev.mask_in_fov()
|
|
72
|
-
return status_dict
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
def get_housekeeping(self) -> dict:
|
|
76
|
-
result = dict()
|
|
77
|
-
result["timestamp"] = format_datetime()
|
|
78
|
-
|
|
79
|
-
# get values from device
|
|
80
|
-
try:
|
|
81
|
-
_, _, result["GSRON_SMD3_ABS_POS_STEPS"] = self.dev.actual_position()
|
|
82
|
-
result["GSRON_SMD3_ABS_POS_MM"] = self.dev.actual_position_mm()
|
|
83
|
-
result["GSRON_SMD3_STATUS"], \
|
|
84
|
-
result["GSRON_SMD3_ERRORS"], \
|
|
85
|
-
result["GSRON_SMD3_MOTOR_TEMP"] = self.dev.get_temperature()
|
|
86
|
-
result['GSRON_SMD3_MASK_IN_FOV'] = self.dev.mask_in_fov()
|
|
87
|
-
except Exception as exc:
|
|
88
|
-
logger.warning(f'failed to get HK ({exc})')
|
|
89
|
-
return result
|
|
90
|
-
|
|
91
|
-
for y, x in enumerate(EFLAGS):
|
|
92
|
-
self.gauge_errors[y].set((int(result["GSRON_SMD3_ERRORS"], 0) >> x) & 0b1)
|
|
93
|
-
|
|
94
|
-
for y, x in enumerate(SFLAGS):
|
|
95
|
-
self.gauge_status[y].set((int(result["GSRON_SMD3_STATUS"], 0) >> x) & 0b1)
|
|
96
|
-
|
|
97
|
-
# update prometheus
|
|
98
|
-
self.gauge_absolute_position_steps.set(result["GSRON_SMD3_ABS_POS_STEPS"])
|
|
99
|
-
self.gauge_absolute_position_mm.set(result["GSRON_SMD3_ABS_POS_MM"])
|
|
100
|
-
self.gauge_motor_temperature.set(result["GSRON_SMD3_MOTOR_TEMP"])
|
|
101
|
-
self.gauge_mask_in_fov.set(result['GSRON_SMD3_MASK_IN_FOV'])
|
|
102
|
-
|
|
103
|
-
return result
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
class Smd3Proxy(Proxy, Smd3Interface):
|
|
107
|
-
|
|
108
|
-
def __init__(self):
|
|
109
|
-
super().__init__(
|
|
110
|
-
connect_address(
|
|
111
|
-
CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.HOSTNAME, CTRL_SETTINGS.COMMANDING_PORT))
|
egse/stages/arun/smd3.yaml
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.stages.arun.smd3_interface.Smd3Interface
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.stages.arun.smd3.Smd3Proxy
|
|
6
|
-
|
|
7
|
-
ControlServer:
|
|
8
|
-
egse.stages.arun.smd3_cs
|
|
9
|
-
|
|
10
|
-
Commands:
|
|
11
|
-
|
|
12
|
-
disconnect:
|
|
13
|
-
description: Disconnect from the device.
|
|
14
|
-
|
|
15
|
-
connect:
|
|
16
|
-
description: Connect to the device.
|
|
17
|
-
|
|
18
|
-
reconnect:
|
|
19
|
-
description: Reconnect to the device.
|
|
20
|
-
This command will force a disconnect and then try to re-connect to the controller.
|
|
21
|
-
is_connected:
|
|
22
|
-
description: Check if the Thorlabs Hardware Controller is connected.
|
|
23
|
-
|
|
24
|
-
is_simulator:
|
|
25
|
-
description: Ask if the control server is a simulator instead of the real controller class.
|
|
26
|
-
returns: bool | True if the far end is a simulator instead of the real hardware
|
|
27
|
-
|
|
28
|
-
get_idn:
|
|
29
|
-
description: Get device IDN message.
|
|
30
|
-
returns: str | serial number
|
|
31
|
-
|
|
32
|
-
clear_flags:
|
|
33
|
-
description: Clear all faults on the controller
|
|
34
|
-
|
|
35
|
-
move_mask_fov:
|
|
36
|
-
description: Move mask into or out of the FOV
|
|
37
|
-
cmd: "{enable}"
|
|
38
|
-
|
|
39
|
-
mask_in_fov:
|
|
40
|
-
description: Get whether the mask is in the FOV
|
|
41
|
-
returns: bool | mask in FOV
|
|
42
|
-
|
|
43
|
-
emergency_stop:
|
|
44
|
-
description: Immediatly stops the motor and raises an error flag
|
|
45
|
-
|
|
46
|
-
bake:
|
|
47
|
-
description: Bake out the stepper motor
|
|
48
|
-
|
|
49
|
-
actual_position:
|
|
50
|
-
description: Set/Get the current position in steps
|
|
51
|
-
cmd: "{position}"
|
|
52
|
-
|
|
53
|
-
actual_position_mm:
|
|
54
|
-
description: Get the current position in steps
|
|
55
|
-
|
|
56
|
-
actual_frequency:
|
|
57
|
-
description: Get the current velocity in hz
|
|
58
|
-
|
|
59
|
-
absolute_move:
|
|
60
|
-
description:
|
|
61
|
-
cmd: "{absolute_position}"
|
|
62
|
-
|
|
63
|
-
relative_move:
|
|
64
|
-
description:
|
|
65
|
-
cmd: "{relative_position}"
|
|
66
|
-
|
|
67
|
-
run_homing:
|
|
68
|
-
description: Run the homing procedure for the hartmann stage
|
|
@@ -1,472 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import time
|
|
3
|
-
import os
|
|
4
|
-
from threading import Thread
|
|
5
|
-
import threading
|
|
6
|
-
import rich
|
|
7
|
-
|
|
8
|
-
from egse.serialdevice import SerialDevice
|
|
9
|
-
from egse.command import Command
|
|
10
|
-
from egse.settings import Settings
|
|
11
|
-
from egse.stages.arun.smd3_interface import Smd3Interface
|
|
12
|
-
from egse.state import GlobalState
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger('smd3_controller')
|
|
15
|
-
|
|
16
|
-
# Load the device settings from the global common-egse config file
|
|
17
|
-
DEVICE_SETTINGS = Settings.load("Arun SMD3 Controller")
|
|
18
|
-
|
|
19
|
-
# Load the device protocol
|
|
20
|
-
# DEVICE_PROTOCOL = Settings.load(filename='smd3.yaml')['Commands']
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class Smd3Exception(Exception):
|
|
24
|
-
pass
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class Smd3Mode:
|
|
28
|
-
STEP = 0
|
|
29
|
-
STEP_TRIGGERED_VELOCITY = 1
|
|
30
|
-
REMOTE = 2
|
|
31
|
-
JOYSTICK = 3
|
|
32
|
-
BAKE = 4
|
|
33
|
-
HOME = 5
|
|
34
|
-
|
|
35
|
-
EFLAGS = {
|
|
36
|
-
0: "TSHORT",
|
|
37
|
-
1: "TOPEN",
|
|
38
|
-
2: "TOVR",
|
|
39
|
-
3: "MOTORSHORT",
|
|
40
|
-
4: "EXTERNALDISABLE",
|
|
41
|
-
5: "EMERGENCYSTOP",
|
|
42
|
-
6: "CONFIGURATIONERROR"
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
SFLAGS = {
|
|
46
|
-
0: "JSCON",
|
|
47
|
-
1: "LIMITNEGATIVE",
|
|
48
|
-
2: "LIMITPOSITIVE",
|
|
49
|
-
3: "EXTEN",
|
|
50
|
-
4: "IDENT",
|
|
51
|
-
6: "STANDBY",
|
|
52
|
-
7: "BAKE",
|
|
53
|
-
8: "ATSPEED"
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
class Smd3Controller(SerialDevice, Smd3Interface):
|
|
57
|
-
STEP_SIZE_MM = 5E-3 # step size (5um) but in mm
|
|
58
|
-
|
|
59
|
-
def __init__(self, port='/dev/smd3', baudrate=115200):
|
|
60
|
-
# Load device configuration from the common-egse global config file
|
|
61
|
-
self._port = DEVICE_SETTINGS.PORT if port is None else port
|
|
62
|
-
self._baudrate = DEVICE_SETTINGS.BAUDRATE if baudrate is None else baudrate
|
|
63
|
-
|
|
64
|
-
setup = GlobalState.setup
|
|
65
|
-
self._in_fov_position = setup.gse.smd3.configuration.in_fov_position
|
|
66
|
-
|
|
67
|
-
self.status = {}
|
|
68
|
-
self.fault = {}
|
|
69
|
-
self.homed = False
|
|
70
|
-
self.homing_thread = None
|
|
71
|
-
self.limits = {'positive':None,
|
|
72
|
-
'negative':None}
|
|
73
|
-
|
|
74
|
-
super().__init__(port=self._port, baudrate=self._baudrate, terminator='\r\n')
|
|
75
|
-
self.connect()
|
|
76
|
-
|
|
77
|
-
self.emergency_stop()
|
|
78
|
-
# Clear any triggered flags
|
|
79
|
-
self.clear_flags()
|
|
80
|
-
|
|
81
|
-
self.configure_limits()
|
|
82
|
-
|
|
83
|
-
# General methods
|
|
84
|
-
def get_idn(self):
|
|
85
|
-
return self._query('SER\r\n')
|
|
86
|
-
|
|
87
|
-
def get_version(self):
|
|
88
|
-
return self._query('FW\r\n')
|
|
89
|
-
|
|
90
|
-
def clear_flags(self):
|
|
91
|
-
return self._query('CLR\r\n')
|
|
92
|
-
|
|
93
|
-
def load_configuration(self):
|
|
94
|
-
return self._query('LOAD\r\n')
|
|
95
|
-
|
|
96
|
-
def store_configuration(self):
|
|
97
|
-
return self._query('STORE\r\n')
|
|
98
|
-
|
|
99
|
-
def load_factory_defaults(self):
|
|
100
|
-
return self._query('LOADFD\r\n')
|
|
101
|
-
|
|
102
|
-
def select_mode(self, mode: Smd3Mode):
|
|
103
|
-
return self._query('MODE,{}\r\n'.format(mode))
|
|
104
|
-
|
|
105
|
-
def get_status(self):
|
|
106
|
-
return self._query('FLAGS\r\n')
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
# Command movement methods
|
|
110
|
-
def velocity_move(self, direction: str):
|
|
111
|
-
if direction in ['-', '+']:
|
|
112
|
-
return self._query('RUNV,{}\r\n'.format(direction))
|
|
113
|
-
else:
|
|
114
|
-
raise Smd3Exception("Direction can only be '-' or '+'")
|
|
115
|
-
|
|
116
|
-
def absolute_move(self, absolute_position: float):
|
|
117
|
-
return self._query('RUNA,{}\r\n'.format(absolute_position))
|
|
118
|
-
|
|
119
|
-
def relative_move(self, relative_position: float):
|
|
120
|
-
return self._query('RUNR,{}\r\n'.format(relative_position))
|
|
121
|
-
|
|
122
|
-
def bake(self):
|
|
123
|
-
return self._query('RUNB\r\n')
|
|
124
|
-
|
|
125
|
-
def home(self, direction: str):
|
|
126
|
-
if direction in ['-', '+']:
|
|
127
|
-
return self._query('RUNH,{}\r\n'.format(direction))
|
|
128
|
-
else:
|
|
129
|
-
raise Smd3Exception("Direction can only be '-' or '+'")
|
|
130
|
-
|
|
131
|
-
def stop(self):
|
|
132
|
-
return self._query('STOP\r\n')
|
|
133
|
-
|
|
134
|
-
def quick_stop(self):
|
|
135
|
-
return self._query('SSTOP\r\n')
|
|
136
|
-
|
|
137
|
-
def emergency_stop(self):
|
|
138
|
-
return self._query('ESTOP\r\n')
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
# Motor methods
|
|
142
|
-
def select_tsensor(self, sensor_type=None):
|
|
143
|
-
if sensor_type == None:
|
|
144
|
-
return self._query('TSEL\r\n')
|
|
145
|
-
else:
|
|
146
|
-
return self._query('TSEL,{}\r\n'.format(sensor_type))
|
|
147
|
-
|
|
148
|
-
def get_temperature(self):
|
|
149
|
-
return self._query('TMOT\r\n')
|
|
150
|
-
|
|
151
|
-
def run_current(self, current=None):
|
|
152
|
-
if current != None:
|
|
153
|
-
return self._query('IR,{}\r\n'.format(current))
|
|
154
|
-
else:
|
|
155
|
-
return self._query('IR\r\n')
|
|
156
|
-
|
|
157
|
-
def acceleration_current(self, current=None):
|
|
158
|
-
if current != None:
|
|
159
|
-
return self._query('IA,{}\r\n'.format(current))
|
|
160
|
-
else:
|
|
161
|
-
return self._query('IA\r\n')
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
def hold_current(self, current=None):
|
|
165
|
-
if current != None:
|
|
166
|
-
return self._query('IH,{}\r\n'.format(current))
|
|
167
|
-
else:
|
|
168
|
-
return self._query('IH\r\n')
|
|
169
|
-
|
|
170
|
-
def power_down_delay(self, delay=None):
|
|
171
|
-
if delay != None:
|
|
172
|
-
return self._query('PDDEL\r\n')
|
|
173
|
-
else:
|
|
174
|
-
return self._query('PDDEL,{}\r\n'.format(delay))
|
|
175
|
-
|
|
176
|
-
def power_down_ramp_delay(self, delay):
|
|
177
|
-
pass
|
|
178
|
-
|
|
179
|
-
def set_freewheel(self, fw=None):
|
|
180
|
-
if fw != None:
|
|
181
|
-
return self._query('FW,{}\r\n'.format(fw))
|
|
182
|
-
else:
|
|
183
|
-
return self._query('FW\r\n')
|
|
184
|
-
|
|
185
|
-
def resolution(self, res=None):
|
|
186
|
-
if res != None:
|
|
187
|
-
return self._query('RES,{}\r\n'.format(res))
|
|
188
|
-
else:
|
|
189
|
-
return self._query('RES\r\n')
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
# Limit input methods
|
|
193
|
-
def global_limit(self, enable=None):
|
|
194
|
-
if enable != None:
|
|
195
|
-
return self._query('L,{}\r\n'.format(enable))
|
|
196
|
-
else:
|
|
197
|
-
return self._query('L\r\n')
|
|
198
|
-
|
|
199
|
-
def positive_limit(self, enable=None):
|
|
200
|
-
if enable != None:
|
|
201
|
-
return self._query('L+,{}\r\n'.format(enable))
|
|
202
|
-
else:
|
|
203
|
-
return self._query('L+\r\n')
|
|
204
|
-
|
|
205
|
-
def negative_limit(self, enable=None):
|
|
206
|
-
if enable != None:
|
|
207
|
-
return self._query('L-,{}\r\n'.format(enable))
|
|
208
|
-
else:
|
|
209
|
-
return self._query('L-\r\n'.format(enable))
|
|
210
|
-
|
|
211
|
-
def positive_limit_polarity(self, polarity=None):
|
|
212
|
-
if polarity != None:
|
|
213
|
-
return self._query('LP+,{}\r\n'.format(polarity))
|
|
214
|
-
else:
|
|
215
|
-
return self._query('LP+\r\n')
|
|
216
|
-
|
|
217
|
-
def negative_limit_polarity(self, polarity=None):
|
|
218
|
-
if polarity != None:
|
|
219
|
-
return self._query('LP-,{}\r\n'.format(polarity))
|
|
220
|
-
else:
|
|
221
|
-
return self._query('LP-\r\n')
|
|
222
|
-
|
|
223
|
-
def limit_polarity(self, polarity):
|
|
224
|
-
return self.query('LP,{}\r\n'.format(polarity))
|
|
225
|
-
|
|
226
|
-
def limit_stop_mode(self, stop_mode):
|
|
227
|
-
return self._query('LSM,{}\r\n'.format(stop_mode))
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
# Profile methods
|
|
231
|
-
def acceleration(self, acceleration=None):
|
|
232
|
-
if acceleration != None:
|
|
233
|
-
return self._query('AMAX,{}\r\n'.format(acceleration))
|
|
234
|
-
else:
|
|
235
|
-
return self._query('AMAX\r\n')
|
|
236
|
-
|
|
237
|
-
def deceleration(self, deceleration=None):
|
|
238
|
-
if deceleration != None:
|
|
239
|
-
return self._query('DMAX,{}\r\n'.format(deceleration))
|
|
240
|
-
else:
|
|
241
|
-
return self._query('DMAX\r\n')
|
|
242
|
-
|
|
243
|
-
def start_frequency(self, frequency=None):
|
|
244
|
-
if frequency != None:
|
|
245
|
-
return self._query('VSTART,{}\r\n'.format(frequency))
|
|
246
|
-
else:
|
|
247
|
-
return self._query('VSTART\r\n')
|
|
248
|
-
|
|
249
|
-
def stop_frequency(self, frequency=None):
|
|
250
|
-
if frequency != None:
|
|
251
|
-
return self._query('VSTOP,{}\r\n'.format(frequency))
|
|
252
|
-
else:
|
|
253
|
-
return self._query('VSTOP\r\n')
|
|
254
|
-
|
|
255
|
-
def target_frequency(self, frequency=None):
|
|
256
|
-
if frequency != None:
|
|
257
|
-
return self._query('VMAX,{}\r\n'.format(frequency))
|
|
258
|
-
else:
|
|
259
|
-
return self._query('VMAX\r\n')
|
|
260
|
-
|
|
261
|
-
def actual_frequency(self):
|
|
262
|
-
return self._query('VACT\r\n')
|
|
263
|
-
|
|
264
|
-
def actual_position(self, position=None):
|
|
265
|
-
if position != None:
|
|
266
|
-
return self._query('PACT,{}\r\n'.format(position))
|
|
267
|
-
else:
|
|
268
|
-
return self._query('PACT\r\n')
|
|
269
|
-
|
|
270
|
-
def relative_position(self, position=None):
|
|
271
|
-
if position != None:
|
|
272
|
-
return self._query('PREL,{}\r\n'.format(position))
|
|
273
|
-
else:
|
|
274
|
-
return self._query('PREL\r\n')
|
|
275
|
-
|
|
276
|
-
def time_stop_before_move(self, time):
|
|
277
|
-
if time != None:
|
|
278
|
-
return self._query('TZW,{}\r\n'.format(time))
|
|
279
|
-
else:
|
|
280
|
-
return self._query('TZW\r\n')
|
|
281
|
-
|
|
282
|
-
def full_step(self, step):
|
|
283
|
-
if step != None:
|
|
284
|
-
return self._query('THIGH,{}\r\n'.format(step))
|
|
285
|
-
else:
|
|
286
|
-
return self._query('THIGH\r\n')
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
# Step/Direction methods
|
|
290
|
-
def step_edge(self, edge):
|
|
291
|
-
if edge != None:
|
|
292
|
-
return self._query('EDGE,{}\r\n'.format(edge))
|
|
293
|
-
else:
|
|
294
|
-
return self._query('EDGE\r\n')
|
|
295
|
-
|
|
296
|
-
def interpolate(self, enable):
|
|
297
|
-
if enable != None:
|
|
298
|
-
return self._query('INTERP,{}\r\n'.format(enable))
|
|
299
|
-
else:
|
|
300
|
-
return self._query('INTERP\r\n')
|
|
301
|
-
|
|
302
|
-
# Bake methods
|
|
303
|
-
def bakeout_setpoint(self, setpoint):
|
|
304
|
-
if setpoint != None:
|
|
305
|
-
return self._query('BAKET,{}\r\n'.format(setpoint))
|
|
306
|
-
else:
|
|
307
|
-
return self._query('BAKET\r\n')
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
# Advanced methods
|
|
311
|
-
def configure_limits(self):
|
|
312
|
-
self.global_limit(1)
|
|
313
|
-
self.positive_limit(1)
|
|
314
|
-
self.negative_limit(1)
|
|
315
|
-
self.limit_polarity(0)
|
|
316
|
-
self.negative_limit_polarity(0)
|
|
317
|
-
self.positive_limit_polarity(0)
|
|
318
|
-
self.limit_stop_mode(0)
|
|
319
|
-
|
|
320
|
-
def configure_homing(self):
|
|
321
|
-
self.select_mode(Smd3Mode.HOME)
|
|
322
|
-
self.target_frequency(500)
|
|
323
|
-
|
|
324
|
-
def configure_remote(self):
|
|
325
|
-
self.select_mode(Smd3Mode.REMOTE)
|
|
326
|
-
self.target_frequency(1000)
|
|
327
|
-
|
|
328
|
-
def save_status(self, status_word):
|
|
329
|
-
for bits, name in SFLAGS.items():
|
|
330
|
-
self.status[name] = bool(int(status_word, 0) & (1 << bits))
|
|
331
|
-
|
|
332
|
-
def save_fault(self, error_word):
|
|
333
|
-
for bits, name in EFLAGS.items():
|
|
334
|
-
self.fault[name] = bool(int(error_word, 0) & (1 << bits))
|
|
335
|
-
|
|
336
|
-
def run_homing(self):
|
|
337
|
-
if self.homing_thread is not None:
|
|
338
|
-
if self.homing_thread.is_alive():
|
|
339
|
-
return
|
|
340
|
-
|
|
341
|
-
self.homing_thread = Thread(target=self.hardware_homing_procedure)
|
|
342
|
-
self.homing_thread.start()
|
|
343
|
-
|
|
344
|
-
def software_homing_procedure(self):
|
|
345
|
-
logger.info("Starting homing procedure...")
|
|
346
|
-
logger.info("Moving into the end stop")
|
|
347
|
-
|
|
348
|
-
self.relative_move(-100000)
|
|
349
|
-
|
|
350
|
-
# until we stop moving
|
|
351
|
-
time.sleep(0.1)
|
|
352
|
-
_, _, velocity = self.actual_frequency()
|
|
353
|
-
while float(velocity) != 0.0:
|
|
354
|
-
_, _, velocity = self.actual_frequency()
|
|
355
|
-
time.sleep(1)
|
|
356
|
-
|
|
357
|
-
time.sleep(0.1)
|
|
358
|
-
|
|
359
|
-
self.actual_position(0.0)
|
|
360
|
-
self.limits['negative'] = 0
|
|
361
|
-
|
|
362
|
-
self.homed = True
|
|
363
|
-
logger.info("Homing procedure completed!")
|
|
364
|
-
|
|
365
|
-
def hardware_homing_procedure(self):
|
|
366
|
-
self.configure_homing()
|
|
367
|
-
self.configure_limits()
|
|
368
|
-
logger.info("Starting homing procedure...")
|
|
369
|
-
|
|
370
|
-
# Negative homing procedure
|
|
371
|
-
# Home negative side
|
|
372
|
-
self.home('-')
|
|
373
|
-
|
|
374
|
-
while not int(self.actual_position()[0], 16) >> 1 & 0x1:
|
|
375
|
-
time.sleep(0.5)
|
|
376
|
-
|
|
377
|
-
time.sleep(.5)
|
|
378
|
-
|
|
379
|
-
# Reset actual position
|
|
380
|
-
self.actual_position(0.0)
|
|
381
|
-
self.limits['negative'] = 0
|
|
382
|
-
|
|
383
|
-
self.homed = True
|
|
384
|
-
|
|
385
|
-
logger.info("Homing procedure completed!")
|
|
386
|
-
|
|
387
|
-
self.configure_remote()
|
|
388
|
-
|
|
389
|
-
def move_mask_fov(self, enable: bool):
|
|
390
|
-
if self.homed:
|
|
391
|
-
if enable:
|
|
392
|
-
self.absolute_move(self._in_fov_position)
|
|
393
|
-
else:
|
|
394
|
-
self.absolute_move(self.limits['negative'])
|
|
395
|
-
else:
|
|
396
|
-
raise Smd3Exception("SMD3 has not been homed. Move has been ignored")
|
|
397
|
-
|
|
398
|
-
def mask_in_fov(self):
|
|
399
|
-
if self.homed:
|
|
400
|
-
_, _, position = self.actual_position()
|
|
401
|
-
if self._in_fov_position - 1 <= round(float(position)) <= self._in_fov_position + 1:
|
|
402
|
-
return True
|
|
403
|
-
else:
|
|
404
|
-
return False
|
|
405
|
-
else:
|
|
406
|
-
return False
|
|
407
|
-
|
|
408
|
-
def actual_position_mm(self):
|
|
409
|
-
_, _, position = self.actual_position()
|
|
410
|
-
return float(position) * self.STEP_SIZE_MM
|
|
411
|
-
|
|
412
|
-
def _query(self, command):
|
|
413
|
-
""" Uses the parent query function and adds some sanity checks. """
|
|
414
|
-
response = super().query(command)
|
|
415
|
-
|
|
416
|
-
if response[-2:] != '\r\n':
|
|
417
|
-
raise ConnectionError(f"Missing termination characters in response: {response}")
|
|
418
|
-
|
|
419
|
-
msg_parts = response.strip().split(',')
|
|
420
|
-
|
|
421
|
-
if len(msg_parts) < 2:
|
|
422
|
-
raise ConnectionError(f"Reveived malformed response: {response}")
|
|
423
|
-
|
|
424
|
-
status_word = msg_parts[0]
|
|
425
|
-
error_word = msg_parts[1]
|
|
426
|
-
|
|
427
|
-
self.save_status(status_word)
|
|
428
|
-
self.save_fault(error_word)
|
|
429
|
-
|
|
430
|
-
if len(msg_parts) >= 3 and msg_parts[2][:3] == 'ERR':
|
|
431
|
-
raise ConnectionError(f"Reveived error response. Error flags: {msg_parts[1]}, " +
|
|
432
|
-
f"Error code: {msg_parts[2]}")
|
|
433
|
-
|
|
434
|
-
# return a list if multiple return values are received
|
|
435
|
-
|
|
436
|
-
if len(msg_parts) == 2:
|
|
437
|
-
return status_word, error_word, None
|
|
438
|
-
elif len(msg_parts) > 3:
|
|
439
|
-
return status_word, error_word, msg_parts[2:]
|
|
440
|
-
else:
|
|
441
|
-
return status_word, error_word, msg_parts[2]
|
|
442
|
-
|
|
443
|
-
def main():
|
|
444
|
-
dev = Smd3Controller()
|
|
445
|
-
while not dev.homed:
|
|
446
|
-
_, _, velocity = dev.actual_frequency()
|
|
447
|
-
_, _, position = dev.actual_position()
|
|
448
|
-
_, _, temperature = dev.get_temperature()
|
|
449
|
-
rich.print("Position: {}, Velocity: {}, Temperature: {}"
|
|
450
|
-
.format(position, velocity, temperature))
|
|
451
|
-
time.sleep(1)
|
|
452
|
-
|
|
453
|
-
dev.move_mask_fov(True)
|
|
454
|
-
|
|
455
|
-
while not dev.mask_in_fov():
|
|
456
|
-
_, _, velocity = dev.actual_frequency()
|
|
457
|
-
_, _, position = dev.actual_position()
|
|
458
|
-
_, _, temperature = dev.get_temperature()
|
|
459
|
-
rich.print("Position: {}, Position(rounded): {}, Position(inted): {}, Velocity: {}, Temperature: {}"
|
|
460
|
-
.format(position, round(float(position)), int(float(position)), velocity, temperature))
|
|
461
|
-
rich.print('Negative: {}, Positive: {}'.format(dev.limits['negative'], dev.limits['positive']))
|
|
462
|
-
time.sleep(1)
|
|
463
|
-
|
|
464
|
-
print("Hartmann Mask has been enabed")
|
|
465
|
-
|
|
466
|
-
if __name__ == '__main__':
|
|
467
|
-
main()
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|