cgse 2024.7.0__py3-none-any.whl → 2025.0.1__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 +85 -0
- cgse-2025.0.1.dist-info/METADATA +38 -0
- cgse-2025.0.1.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.1.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- 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 -233
- egse/alert/alertman_ui.py +0 -600
- 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 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- 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 -132
- 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 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- 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 -1240
- 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 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- 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/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- 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 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- 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 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- 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 -138
- 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 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- 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 -137
- 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 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- 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 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- 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 -71
- 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/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 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- 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 -165
- 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 -834
- 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 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- 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 -71
- 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 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- 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 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- 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 -920
- 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 -113
- 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 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- 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 -180
- 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 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- 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 -79
- 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 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- 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 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- 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 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- 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 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- 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 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- 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 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- 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 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- 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 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- 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/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- 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/remove_lines_between_matches.py +0 -188
- 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/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- 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
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from numpy import degrees, arccos, cos, radians
|
|
4
|
-
|
|
5
|
-
from egse.command import Command
|
|
6
|
-
from egse.settings import Settings
|
|
7
|
-
from egse.setup import load_setup
|
|
8
|
-
from egse.socketdevice import SocketDevice
|
|
9
|
-
from egse.stages.aerotech.ensemble_interface import EnsembleInterface
|
|
10
|
-
from egse.stages.aerotech.ensemble_parameters import EnsembleParameter
|
|
11
|
-
|
|
12
|
-
logger = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
|
-
# Load the device settings from the global common-egse config file
|
|
15
|
-
DEVICE_SETTINGS = Settings.load("Aerotech Ensemble Controller")
|
|
16
|
-
|
|
17
|
-
# Load the device protocol
|
|
18
|
-
DEVICE_PROTOCOL = Settings.load(filename='ensemble.yaml')['Commands']
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class EnsembleException(Exception):
|
|
22
|
-
pass
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class EnsembleController(SocketDevice, EnsembleInterface):
|
|
26
|
-
def __init__(self, hostname=None, port=None):
|
|
27
|
-
|
|
28
|
-
# Load device configuration from the common-egse global config file
|
|
29
|
-
self._hostname = DEVICE_SETTINGS.HOSTNAME if hostname is None else hostname
|
|
30
|
-
self._port = DEVICE_SETTINGS.PORT if port is None else port
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# Create a dict of Command objects for each function
|
|
34
|
-
self._commands = {}
|
|
35
|
-
for name, items in DEVICE_PROTOCOL.items():
|
|
36
|
-
if 'cmd' in items:
|
|
37
|
-
self._commands[name] = Command(name, items['cmd'])
|
|
38
|
-
|
|
39
|
-
# Get the movement speed from the setup
|
|
40
|
-
setup = load_setup()
|
|
41
|
-
self.speed = setup.gse.ensemble.maximum_speed
|
|
42
|
-
self.limit = setup.gse.ensemble.limit
|
|
43
|
-
|
|
44
|
-
self.limits = {'X': [(0 - self.limit), self.limit], 'Y': [(0 - self.limit), self.limit]}
|
|
45
|
-
# Initialize the parent class with the port and baudrate
|
|
46
|
-
super().__init__(hostname=self._hostname, port=self._port, timeout=10000)
|
|
47
|
-
self.connect()
|
|
48
|
-
|
|
49
|
-
self.set_absolute()
|
|
50
|
-
self.set_wait_mode('NOWAIT')
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def get_idn(self):
|
|
54
|
-
return self.query(self._commands['get_idn'].get_cmd_string())
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
def reset(self):
|
|
58
|
-
return self.query(self._commands['reset'].get_cmd_string())
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def abort(self):
|
|
62
|
-
return self.query(self._commands['abort'].get_cmd_string())
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def clear_errors(self):
|
|
66
|
-
return self.query(self._commands['clear_errors'].get_cmd_string())
|
|
67
|
-
|
|
68
|
-
def get_plane_status(self):
|
|
69
|
-
status = self.query(self._commands['get_plane_status'].get_cmd_string())
|
|
70
|
-
return int(status) & 0xFFFFFFF # turn into unsigned
|
|
71
|
-
|
|
72
|
-
def get_status(self, axis):
|
|
73
|
-
status = self.query(self._commands['get_status'].get_cmd_string(axis=axis))
|
|
74
|
-
return int(status) & 0xFFFFFFFF # turn into unsigned
|
|
75
|
-
|
|
76
|
-
def get_fault(self, axis):
|
|
77
|
-
fault = self.query(self._commands['get_fault'].get_cmd_string(axis=axis))
|
|
78
|
-
return int(fault) & 0xFFFFFFFF # turn into unsigned
|
|
79
|
-
|
|
80
|
-
def set_blocking(self, axis, enable):
|
|
81
|
-
enable_string = 'ON' if enable else 'OFF'
|
|
82
|
-
return self.query(self._commands['set_blocking'].get_cmd_string(
|
|
83
|
-
axis=axis, enable=enable_string))
|
|
84
|
-
|
|
85
|
-
def get_command_position(self, axis):
|
|
86
|
-
return float(self.query(self._commands['get_command_position'].get_cmd_string(axis=axis)))
|
|
87
|
-
|
|
88
|
-
def get_actual_position(self, axis):
|
|
89
|
-
return float(self.query(self._commands['get_actual_position'].get_cmd_string(axis=axis)))
|
|
90
|
-
|
|
91
|
-
def get_error_position(self, axis):
|
|
92
|
-
return float(self.query(self._commands['get_error_position'].get_cmd_string(axis=axis)))
|
|
93
|
-
|
|
94
|
-
def get_command_velocity(self, axis):
|
|
95
|
-
return float(self.query(self._commands['get_command_velocity'].get_cmd_string(axis=axis)))
|
|
96
|
-
|
|
97
|
-
def get_actual_velocity(self, axis):
|
|
98
|
-
return float(self.query(self._commands['get_actual_velocity'].get_cmd_string(axis=axis)))
|
|
99
|
-
|
|
100
|
-
def get_command_current(self, axis):
|
|
101
|
-
return float(self.query(self._commands['get_command_current'].get_cmd_string(axis=axis)))
|
|
102
|
-
|
|
103
|
-
def get_actual_current(self, axis):
|
|
104
|
-
return float(self.query(self._commands['get_actual_current'].get_cmd_string(axis=axis)))
|
|
105
|
-
|
|
106
|
-
def enable_axis(self, axis):
|
|
107
|
-
logger.info(f"Enabeling the {axis} axis")
|
|
108
|
-
return self.query(f"ENABLE {axis}\n")
|
|
109
|
-
|
|
110
|
-
def enable_axes(self):
|
|
111
|
-
logger.info("Enabling X Y Axes")
|
|
112
|
-
return self.query("ENABLE X Y\n")
|
|
113
|
-
|
|
114
|
-
def disable_axis(self, axis):
|
|
115
|
-
logger.info(f"Disabeling the {axis} axis")
|
|
116
|
-
return self.query(f"DISABLE {axis}\n")
|
|
117
|
-
|
|
118
|
-
def disable_axes(self):
|
|
119
|
-
logger.info("Disabling the X Y axes")
|
|
120
|
-
return self.query(f"DISABLE X Y\n")
|
|
121
|
-
|
|
122
|
-
def set_wait_mode(self, mode):
|
|
123
|
-
return self.query(f"WAIT MODE {mode}\n")
|
|
124
|
-
|
|
125
|
-
def set_absolute(self):
|
|
126
|
-
return self.query(self._commands['set_absolute'].get_cmd_string())
|
|
127
|
-
|
|
128
|
-
def set_incremental(self):
|
|
129
|
-
return self.query(self._commands['set_incremental'].get_cmd_string())
|
|
130
|
-
|
|
131
|
-
def move_axis_degrees(self, axis, position):
|
|
132
|
-
if not self.is_homed(axis):
|
|
133
|
-
logger.warning("The gimbal has not been homed")
|
|
134
|
-
raise EnsembleException(f'axis {axis} is not homed')
|
|
135
|
-
|
|
136
|
-
if not (self.limits[axis][0] <= position <= self.limits[axis][1]):
|
|
137
|
-
logger.warning("Move denied: Position out of limit")
|
|
138
|
-
raise EnsembleException(f'position {axis} outside limits\
|
|
139
|
-
{self.limits[axis][0]} <= {position} <= {self.limits[axis][1]}')
|
|
140
|
-
|
|
141
|
-
logger.info(f"Moving {axis} axis to {position}")
|
|
142
|
-
|
|
143
|
-
self.query(f"LINEAR {axis} {position} {axis}F {self.speed}\n")
|
|
144
|
-
|
|
145
|
-
def move_axes_degrees(self, position_x, position_y):
|
|
146
|
-
if not self.is_homed('X') or not self.is_homed('Y'):
|
|
147
|
-
logger.warning("The gimbal has not been homed")
|
|
148
|
-
raise EnsembleException(f'not all axes are homed')
|
|
149
|
-
|
|
150
|
-
if not (self.limits['X'][0] <= position_x <= self.limits['X'][1]):
|
|
151
|
-
logger.warning("Move denied: X Position out of limit")
|
|
152
|
-
raise EnsembleException(f"position X outside limits \
|
|
153
|
-
{self.limits['X'][0]} <= {position_x} <= {self.limits['X'][1]}")
|
|
154
|
-
|
|
155
|
-
if not (self.limits['Y'][0] <= position_y <= self.limits['Y'][1]):
|
|
156
|
-
logger.warning("Move denied: Y Position out of limit")
|
|
157
|
-
raise EnsembleException(f"position Y outside limits \
|
|
158
|
-
{self.limits['Y'][0]} <= {position_y} <= {self.limits['Y'][1]}")
|
|
159
|
-
|
|
160
|
-
radius = degrees(arccos(cos(radians(position_x)) * cos(radians(position_y))))
|
|
161
|
-
|
|
162
|
-
# Due to rounding errors, we have to round the radius as well
|
|
163
|
-
radius = round(radius, 6)
|
|
164
|
-
|
|
165
|
-
logger.info(f"Radial distance is: {radius}")
|
|
166
|
-
|
|
167
|
-
if not (radius <= self.limit):
|
|
168
|
-
logger.warning("Move denied: radial distance out of limit")
|
|
169
|
-
raise EnsembleException(f"Command is outside allowed radial distance \
|
|
170
|
-
{radius} <= {self.limit}")
|
|
171
|
-
|
|
172
|
-
logger.info(f"Moving Y to {position_y} and X to {position_x}")
|
|
173
|
-
|
|
174
|
-
self.query(f"LINEAR X {position_x} Y {position_y} F {self.speed}\n")
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
def home_axis(self, axis):
|
|
178
|
-
if self.is_homed(axis):
|
|
179
|
-
logger.info("Gimbal has already been homed")
|
|
180
|
-
return
|
|
181
|
-
|
|
182
|
-
logger.info(f"Homing the {axis} axis...")
|
|
183
|
-
|
|
184
|
-
self.query(f"HOME {axis}\n")
|
|
185
|
-
|
|
186
|
-
logger.info(f"{axis} axis has been homed")
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
def home_axes(self):
|
|
190
|
-
if self.is_homed('Y') and self.is_homed('X'):
|
|
191
|
-
logger.info("Gimbal was already homed")
|
|
192
|
-
return
|
|
193
|
-
|
|
194
|
-
logger.info(f"Homing both axis")
|
|
195
|
-
|
|
196
|
-
self.query(f"HOME X Y\n")
|
|
197
|
-
|
|
198
|
-
logger.info(f"Homing complete")
|
|
199
|
-
|
|
200
|
-
def is_moving(self, axis):
|
|
201
|
-
return bool(self.get_status(axis) & 0x08)
|
|
202
|
-
|
|
203
|
-
def is_homed(self, axis):
|
|
204
|
-
return bool(self.get_status(axis) & 0x02)
|
|
205
|
-
|
|
206
|
-
def get_parameter(self, paramId: EnsembleParameter):
|
|
207
|
-
return int(self.query(self._commands['get_parameter'].get_cmd_string(index=paramId)))
|
|
208
|
-
|
|
209
|
-
def set_parameter(self, paramId: EnsembleParameter, value):
|
|
210
|
-
return self.query(self._commands['set_parameter'].get_cmd_string(index=paramId, value=value))
|
|
211
|
-
|
|
212
|
-
def print_status(self):
|
|
213
|
-
""" Pretty print the status word. """
|
|
214
|
-
status = self.get_status('X')
|
|
215
|
-
print('STATUS:')
|
|
216
|
-
print(f'\t{"Enabled":20s}: {bool(status & 0x00000001)}')
|
|
217
|
-
print(f'\t{"Homed":20s}: {bool(status & 0x00000002)}')
|
|
218
|
-
print(f'\t{"InPosition":20s}: {bool(status & 0x00000004)}')
|
|
219
|
-
print(f'\t{"MoveActive":20s}: {bool(status & 0x00000008)}')
|
|
220
|
-
print(f'\t{"AccelPhase":20s}: {bool(status & 0x00000010)}')
|
|
221
|
-
print(f'\t{"DecelPhase":20s}: {bool(status & 0x00000020)}')
|
|
222
|
-
print(f'\t{"PositionCapture":20s}: {bool(status & 0x00000040)}')
|
|
223
|
-
print(f'\t{"CurrentClamp":20s}: {bool(status & 0x00000080)}')
|
|
224
|
-
print(f'\t{"BrakeOutput":20s}: {bool(status & 0x00000100)}')
|
|
225
|
-
print(f'\t{"MotionIsCw":20s}: {bool(status & 0x00000200)}')
|
|
226
|
-
print(f'\t{"MasterSlaveControl":20s}: {bool(status & 0x0000400)}')
|
|
227
|
-
print(f'\t{"CalActive":20s}: {bool(status & 0x00000800)}')
|
|
228
|
-
print(f'\t{"CallEnabled":20s}: {bool(status & 0x00001000)}')
|
|
229
|
-
print(f'\t{"JoystickControl":20s}: {bool(status & 0x0002000)}')
|
|
230
|
-
print(f'\t{"Homing":20s}: {bool(status & 0x00004000)}')
|
|
231
|
-
print(f'\t{"MasterSupress":20s}: {bool(status & 0x00008000)}')
|
|
232
|
-
print(f'\t{"GantryActive":20s}: {bool(status & 0x00010000)}')
|
|
233
|
-
print(f'\t{"GantryMaster":20s}: {bool(status & 0x00020000)}')
|
|
234
|
-
print(f'\t{"AutoFocusActive":20s}: {bool(status & 0x00040000)}')
|
|
235
|
-
print(f'\t{"CommandFilterDone":20s}: {bool(status & 0x00080000)}')
|
|
236
|
-
print(f'\t{"InPosition2":20s}: {bool(status & 0x00100000)}')
|
|
237
|
-
print(f'\t{"ServoControl":20s}: {bool(status & 0x002000000)}')
|
|
238
|
-
print(f'\t{"CwEOTLimit":20s}: {bool(status & 0x004000000)}')
|
|
239
|
-
print(f'\t{"CcwEOTLimit":20s}: {bool(status & 0x008000000)}')
|
|
240
|
-
print(f'\t{"HomeLimit":20s}: {bool(status & 0x01000000)}')
|
|
241
|
-
print(f'\t{"MarkerInput":20s}: {bool(status & 0x02000000)}')
|
|
242
|
-
print(f'\t{"HallAInput":20s}: {bool(status & 0x04000000)}')
|
|
243
|
-
print(f'\t{"HallBInput":20s}: {bool(status & 0x08000000)}')
|
|
244
|
-
print(f'\t{"HallCInput":20s}: {bool(status & 0x10000000)}')
|
|
245
|
-
print(f'\t{"SineEncoderError":20s}: {bool(status & 0x20000000)}')
|
|
246
|
-
print(f'\t{"CosineEncoderError":20s}: {bool(status & 0x40000000)}')
|
|
247
|
-
print(f'\t{"ESTOPInput":20s}: {bool(status & 0x80000000)}')
|
|
248
|
-
|
|
249
|
-
def query(self, command: str):
|
|
250
|
-
""" Override the parent class to do some error checking on the response. """
|
|
251
|
-
|
|
252
|
-
# print(command)
|
|
253
|
-
|
|
254
|
-
response = super().query(command)
|
|
255
|
-
|
|
256
|
-
# print(response)
|
|
257
|
-
|
|
258
|
-
if response[-1] != '\n':
|
|
259
|
-
raise ConnectionError(f"Invalid termination character in response: {response}")
|
|
260
|
-
elif response[0] == '!':
|
|
261
|
-
raise ConnectionError(f"Command invalid error for command: {command}")
|
|
262
|
-
elif response[0] == '#':
|
|
263
|
-
raise ConnectionError(f"Command fault error for command: {command}")
|
|
264
|
-
elif response[0] != '%':
|
|
265
|
-
raise ConnectionError(f"Invalid starting character in response: {response}")
|
|
266
|
-
elif len(response[:-1]) > 1:
|
|
267
|
-
return response[1:-1]
|
|
268
|
-
else:
|
|
269
|
-
return None
|
|
270
|
-
|
|
271
|
-
if __name__ == "__main__":
|
|
272
|
-
ens = EnsembleController()
|
|
273
|
-
ens.get_idn()
|
|
274
|
-
|
|
275
|
-
ens.move_axes_degrees(14, 13, True)
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import click
|
|
2
|
-
import logging
|
|
3
|
-
import sys
|
|
4
|
-
|
|
5
|
-
import zmq
|
|
6
|
-
from prometheus_client import start_http_server
|
|
7
|
-
|
|
8
|
-
from egse.control import ControlServer
|
|
9
|
-
from egse.settings import Settings
|
|
10
|
-
from egse.stages.aerotech.ensemble import EnsembleProtocol, EnsembleProxy
|
|
11
|
-
|
|
12
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
CTRL_SETTINGS = Settings.load("Aerotech Ensemble Control Server")
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class EnsembleControlServer(ControlServer):
|
|
20
|
-
"""
|
|
21
|
-
EnsembleControlServer - Command and monitor the Ensemble motor controller.
|
|
22
|
-
This class works as a command and monitoring server to control the device remotely.
|
|
23
|
-
The sever binds to the following ZeroMQ sockets:
|
|
24
|
-
* a REP socket that can be used as a command server. Any client can connect and
|
|
25
|
-
send a command to the Lamp controller.
|
|
26
|
-
* a PUB socket that serves as a monitoring server. It will send out Lamp status
|
|
27
|
-
information to all the connected clients every DELAY seconds.
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
def __init__(self):
|
|
31
|
-
super().__init__()
|
|
32
|
-
|
|
33
|
-
self.device_protocol = EnsembleProtocol(self)
|
|
34
|
-
|
|
35
|
-
self.logger.debug(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
36
|
-
|
|
37
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
38
|
-
|
|
39
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
40
|
-
|
|
41
|
-
self.set_hk_delay(CTRL_SETTINGS.DELAY)
|
|
42
|
-
|
|
43
|
-
def get_communication_protocol(self):
|
|
44
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
45
|
-
|
|
46
|
-
def get_commanding_port(self):
|
|
47
|
-
return CTRL_SETTINGS.COMMANDING_PORT
|
|
48
|
-
|
|
49
|
-
def get_service_port(self):
|
|
50
|
-
return CTRL_SETTINGS.SERVICE_PORT
|
|
51
|
-
|
|
52
|
-
def get_monitoring_port(self):
|
|
53
|
-
return CTRL_SETTINGS.MONITORING_PORT
|
|
54
|
-
|
|
55
|
-
def get_storage_mnemonic(self):
|
|
56
|
-
try:
|
|
57
|
-
return CTRL_SETTINGS.STORAGE_MNEMONIC
|
|
58
|
-
except AttributeError:
|
|
59
|
-
return "Ensemble"
|
|
60
|
-
|
|
61
|
-
def before_serve(self):
|
|
62
|
-
start_http_server(CTRL_SETTINGS.METRICS_PORT)
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
@click.group()
|
|
66
|
-
def cli():
|
|
67
|
-
pass
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
@cli.command()
|
|
71
|
-
@click.option("--simulator", "--sim", is_flag=True, help="Start the Simulator as the backend.")
|
|
72
|
-
def start(simulator):
|
|
73
|
-
"""Start the Control Server."""
|
|
74
|
-
|
|
75
|
-
if simulator:
|
|
76
|
-
Settings.set_simulation_mode(True)
|
|
77
|
-
try:
|
|
78
|
-
controller = EnsembleControlServer()
|
|
79
|
-
controller.serve()
|
|
80
|
-
|
|
81
|
-
except KeyboardInterrupt:
|
|
82
|
-
print("Shutdown requested...exiting")
|
|
83
|
-
|
|
84
|
-
except SystemExit as exit_code:
|
|
85
|
-
print("System Exit with code {}.".format(exit_code))
|
|
86
|
-
sys.exit(exit_code)
|
|
87
|
-
|
|
88
|
-
except Exception:
|
|
89
|
-
|
|
90
|
-
logger.exception("Cannot start the Ensemble Control Server")
|
|
91
|
-
# The above line does exactly the same as the traceback, but on the logger
|
|
92
|
-
# import traceback
|
|
93
|
-
# traceback.print_exc(file=sys.stdout)
|
|
94
|
-
|
|
95
|
-
return 0
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
@cli.command()
|
|
99
|
-
def stop():
|
|
100
|
-
"""Send a 'quit_server' command to the Control Server."""
|
|
101
|
-
|
|
102
|
-
with EnsembleProxy() as proxy:
|
|
103
|
-
|
|
104
|
-
sp = proxy.get_service_proxy()
|
|
105
|
-
sp.quit_server()
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
if __name__ == "__main__":
|
|
109
|
-
|
|
110
|
-
sys.exit(cli())
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
from egse.device import DeviceInterface
|
|
2
|
-
from egse.decorators import dynamic_interface
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class EnsembleInterface(DeviceInterface):
|
|
6
|
-
@dynamic_interface
|
|
7
|
-
def get_idn(self):
|
|
8
|
-
return NotImplemented
|
|
9
|
-
|
|
10
|
-
@dynamic_interface
|
|
11
|
-
def reset(self):
|
|
12
|
-
return NotImplemented
|
|
13
|
-
|
|
14
|
-
@dynamic_interface
|
|
15
|
-
def abort(self, axis):
|
|
16
|
-
return NotImplemented
|
|
17
|
-
|
|
18
|
-
@dynamic_interface
|
|
19
|
-
def clear_errors(self):
|
|
20
|
-
return NotImplemented
|
|
21
|
-
|
|
22
|
-
@dynamic_interface
|
|
23
|
-
def get_status(self, axis):
|
|
24
|
-
return NotImplemented
|
|
25
|
-
|
|
26
|
-
@dynamic_interface
|
|
27
|
-
def get_fault(self, axis):
|
|
28
|
-
return NotImplemented
|
|
29
|
-
|
|
30
|
-
@dynamic_interface
|
|
31
|
-
def get_plane_status(self):
|
|
32
|
-
return NotImplemented
|
|
33
|
-
|
|
34
|
-
@dynamic_interface
|
|
35
|
-
def set_blocking(self, axis, enable):
|
|
36
|
-
return NotImplemented
|
|
37
|
-
|
|
38
|
-
@dynamic_interface
|
|
39
|
-
def get_actual_position(self, axis):
|
|
40
|
-
return NotImplemented
|
|
41
|
-
|
|
42
|
-
@dynamic_interface
|
|
43
|
-
def get_command_position(self, axis):
|
|
44
|
-
return NotImplemented
|
|
45
|
-
|
|
46
|
-
@dynamic_interface
|
|
47
|
-
def get_error_position(self, axis):
|
|
48
|
-
return NotImplemented
|
|
49
|
-
|
|
50
|
-
@dynamic_interface
|
|
51
|
-
def get_command_velocity(self, axis):
|
|
52
|
-
return NotImplemented
|
|
53
|
-
|
|
54
|
-
@dynamic_interface
|
|
55
|
-
def get_actual_velocity(self, axis):
|
|
56
|
-
return NotImplemented
|
|
57
|
-
|
|
58
|
-
@dynamic_interface
|
|
59
|
-
def get_actual_current(self, axis):
|
|
60
|
-
return NotImplemented
|
|
61
|
-
|
|
62
|
-
@dynamic_interface
|
|
63
|
-
def get_command_current(self, axis):
|
|
64
|
-
return NotImplemented
|
|
65
|
-
|
|
66
|
-
@dynamic_interface
|
|
67
|
-
def enable_axis(self, axis):
|
|
68
|
-
return NotImplemented
|
|
69
|
-
|
|
70
|
-
@dynamic_interface
|
|
71
|
-
def enable_axes(self):
|
|
72
|
-
return NotImplemented
|
|
73
|
-
|
|
74
|
-
@dynamic_interface
|
|
75
|
-
def disable_axis(self, axis):
|
|
76
|
-
return NotImplemented
|
|
77
|
-
|
|
78
|
-
@dynamic_interface
|
|
79
|
-
def disable_axes(self):
|
|
80
|
-
return NotImplemented
|
|
81
|
-
|
|
82
|
-
@dynamic_interface
|
|
83
|
-
def set_absolute(self):
|
|
84
|
-
return NotImplemented
|
|
85
|
-
|
|
86
|
-
@dynamic_interface
|
|
87
|
-
def set_incremental(self):
|
|
88
|
-
return NotImplemented
|
|
89
|
-
|
|
90
|
-
@dynamic_interface
|
|
91
|
-
def set_wait_mode(self, mode):
|
|
92
|
-
return NotImplemented
|
|
93
|
-
|
|
94
|
-
@dynamic_interface
|
|
95
|
-
def move_axis_degrees(self, axis, position):
|
|
96
|
-
return NotImplemented
|
|
97
|
-
|
|
98
|
-
@dynamic_interface
|
|
99
|
-
def move_axes_degrees(self, position_x, position_y):
|
|
100
|
-
return NotImplemented
|
|
101
|
-
|
|
102
|
-
@dynamic_interface
|
|
103
|
-
def home_axes(self):
|
|
104
|
-
return NotImplemented
|
|
105
|
-
|
|
106
|
-
@dynamic_interface
|
|
107
|
-
def home_axis(self, axis):
|
|
108
|
-
return NotImplemented
|
|
109
|
-
|
|
110
|
-
@dynamic_interface
|
|
111
|
-
def is_moving(self, axis):
|
|
112
|
-
return NotImplemented
|
|
113
|
-
|
|
114
|
-
@dynamic_interface
|
|
115
|
-
def is_homed(self, axis):
|
|
116
|
-
return NotImplemented
|
|
117
|
-
|
|
118
|
-
@dynamic_interface
|
|
119
|
-
def get_parameter(self, index):
|
|
120
|
-
return NotImplemented
|
|
121
|
-
|
|
122
|
-
@dynamic_interface
|
|
123
|
-
def set_parameter(self, index, value):
|
|
124
|
-
return NotImplemented
|
|
125
|
-
|
|
126
|
-
@dynamic_interface
|
|
127
|
-
def print_status(self):
|
|
128
|
-
return NotImplemented
|
|
129
|
-
|
|
130
|
-
@dynamic_interface
|
|
131
|
-
def query(self, command):
|
|
132
|
-
return NotImplemented
|