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
egse/vacuum/pfeiffer/acp40.py
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from prometheus_client import Gauge
|
|
4
|
-
|
|
5
|
-
from egse.command import ClientServerCommand
|
|
6
|
-
from egse.control import ControlServer
|
|
7
|
-
from egse.protocol import CommandProtocol
|
|
8
|
-
from egse.proxy import Proxy
|
|
9
|
-
from egse.settings import Settings
|
|
10
|
-
from egse.system import format_datetime
|
|
11
|
-
from egse.vacuum.pfeiffer.acp40_controller import Acp40Controller
|
|
12
|
-
from egse.vacuum.pfeiffer.acp40_interface import Acp40Interface
|
|
13
|
-
from egse.vacuum.pfeiffer.acp40_simulator import Acp40Simulator
|
|
14
|
-
from egse.zmq_ser import bind_address
|
|
15
|
-
from egse.zmq_ser import connect_address
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger(__name__)
|
|
18
|
-
|
|
19
|
-
DEVICE_SETTINGS = Settings.load(filename="acp40.yaml")
|
|
20
|
-
CTRL_SETTINGS = Settings.load("Pfeiffer ACP40 Control Server")
|
|
21
|
-
SITE_ID = Settings.load("SITE").ID
|
|
22
|
-
|
|
23
|
-
gauge_status = Gauge('GSRON_ACP40_STATUS', 'device status word')
|
|
24
|
-
gauge_faults = Gauge('GSRON_ACP40_FAULTS', 'device faults word')
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class Acp40Command(ClientServerCommand):
|
|
28
|
-
pass
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class Acp40Protocol(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 = Acp40Simulator()
|
|
40
|
-
else:
|
|
41
|
-
self.dev = Acp40Controller()
|
|
42
|
-
|
|
43
|
-
self.load_commands(DEVICE_SETTINGS.Commands, Acp40Command, Acp40Interface)
|
|
44
|
-
self.build_device_method_lookup_table(self.dev)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
# move to parent class?
|
|
48
|
-
def get_bind_address(self):
|
|
49
|
-
return bind_address(
|
|
50
|
-
self.control_server.get_communication_protocol(),
|
|
51
|
-
self.control_server.get_commanding_port(),
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
def get_status(self):
|
|
56
|
-
status_dict = super().get_status()
|
|
57
|
-
|
|
58
|
-
# need to get the channel from somewhere
|
|
59
|
-
# status_dict['device_status'] = self.dev.get_status(channel)
|
|
60
|
-
|
|
61
|
-
return status_dict
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
def get_housekeeping(self) -> dict:
|
|
65
|
-
result = dict()
|
|
66
|
-
result["timestamp"] = format_datetime()
|
|
67
|
-
|
|
68
|
-
try:
|
|
69
|
-
status_list = self.dev.get_device_status().split(',')
|
|
70
|
-
|
|
71
|
-
result[f"GSRON_ACP40_STATUS"] = status_list[0]
|
|
72
|
-
result[f"GSRON_ACP40_FAULTS"] = status_list[1]
|
|
73
|
-
|
|
74
|
-
gauge_status.set(result[f"GSRON_ACP40_STATUS"])
|
|
75
|
-
gauge_faults.set(result[f"GSRON_ACP40_FAULTS"])
|
|
76
|
-
except Exception as e:
|
|
77
|
-
logger.warning(f"An exception was raised by the serial device: {e}")
|
|
78
|
-
self.dev.reconnect()
|
|
79
|
-
return result
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
class Acp40Proxy(Proxy, Acp40Interface):
|
|
83
|
-
|
|
84
|
-
def __init__(self):
|
|
85
|
-
super().__init__(
|
|
86
|
-
connect_address(
|
|
87
|
-
CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.HOSTNAME, CTRL_SETTINGS.COMMANDING_PORT))
|
egse/vacuum/pfeiffer/acp40.yaml
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.vacuum.pfeiffer.acp40_interface.Acp40Interface
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.vacuum.pfeiffer.acp40.Acp40Proxy
|
|
6
|
-
|
|
7
|
-
ControlServer:
|
|
8
|
-
egse.vacuum.pfeiffer.acp40_cs
|
|
9
|
-
|
|
10
|
-
Commands:
|
|
11
|
-
# The commands in this file are fake.
|
|
12
|
-
# One of the parameters of the command is the device index. If this is included here, the client
|
|
13
|
-
# will have to pass this argument for every function call. I prefer to add this on the
|
|
14
|
-
# controller side. Note that arguments must be included in the cmd string for the proxy interface.
|
|
15
|
-
|
|
16
|
-
disconnect:
|
|
17
|
-
description: Disconnect from the device.
|
|
18
|
-
|
|
19
|
-
connect:
|
|
20
|
-
description: Connect to the device.
|
|
21
|
-
|
|
22
|
-
reconnect:
|
|
23
|
-
description: Reconnect to the device.
|
|
24
|
-
This command will force a disconnect and then try to re-connect to the controller.
|
|
25
|
-
is_connected:
|
|
26
|
-
description: Check if the Thorlabs Hardware Controller is connected.
|
|
27
|
-
|
|
28
|
-
is_simulator:
|
|
29
|
-
description: Ask if the control server is a simulator instead of the real ShutterKSC01Controller class.
|
|
30
|
-
returns: bool | True if the far end is a simulator instead of the real hardware
|
|
31
|
-
|
|
32
|
-
get_idn:
|
|
33
|
-
description: Get device IDN message.
|
|
34
|
-
returns: str | ID string
|
|
35
|
-
|
|
36
|
-
get_device_status:
|
|
37
|
-
description: Get the device status word
|
|
38
|
-
returns: str | Status word
|
|
39
|
-
|
|
40
|
-
get_address:
|
|
41
|
-
description: Get the device addres
|
|
42
|
-
returns: int | Device address
|
|
43
|
-
|
|
44
|
-
set_standby:
|
|
45
|
-
description: Switches from stand-by speed to the default setting (?)
|
|
46
|
-
|
|
47
|
-
set_nominal_speed:
|
|
48
|
-
description: Set the pump to nominal speed (80 RPM). Must be preceded by a set_standby command
|
|
49
|
-
|
|
50
|
-
set_rpm:
|
|
51
|
-
description: Set the pump to a specific RPM.
|
|
52
|
-
args:
|
|
53
|
-
rpm: int | Pump speed (RMP) [35, 80].
|
|
54
|
-
cmd: "{address}"
|
|
55
|
-
|
|
56
|
-
set_enable:
|
|
57
|
-
description: Turn the pump on or off.
|
|
58
|
-
args:
|
|
59
|
-
enable: bool | True = on
|
|
60
|
-
cmd: "{enable}"
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from serial import SerialTimeoutException
|
|
4
|
-
|
|
5
|
-
from egse.serialdevice import SerialDevice
|
|
6
|
-
from egse.settings import Settings
|
|
7
|
-
from egse.vacuum.pfeiffer.acp40_interface import Acp40Interface
|
|
8
|
-
|
|
9
|
-
logger = logging.getLogger(__name__)
|
|
10
|
-
|
|
11
|
-
# Load the device settings from the global common-egse config file
|
|
12
|
-
DEVICE_SETTINGS = Settings.load("Pfeiffer ACP40 Controller")
|
|
13
|
-
|
|
14
|
-
# Load the device protocol
|
|
15
|
-
DEVICE_PROTOCOL = Settings.load(filename='acp40.yaml')['Commands']
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class Acp40Controller(SerialDevice, Acp40Interface):
|
|
19
|
-
|
|
20
|
-
def __init__(self, port=None, baudrate=None, address=None):
|
|
21
|
-
|
|
22
|
-
# Load device configuration from the common-egse global config file
|
|
23
|
-
self._port = DEVICE_SETTINGS.PORT if port is None else port
|
|
24
|
-
self._baudrate = DEVICE_SETTINGS.BAUDRATE if baudrate is None else baudrate
|
|
25
|
-
self._address = DEVICE_SETTINGS.ADDRESS if address is None else address
|
|
26
|
-
|
|
27
|
-
# Initialize the parent class with the port and baudrate
|
|
28
|
-
super().__init__(port=self._port, baudrate=self._baudrate, terminator='\r', timeout=1)
|
|
29
|
-
self.connect()
|
|
30
|
-
|
|
31
|
-
def is_connected(self):
|
|
32
|
-
return True
|
|
33
|
-
|
|
34
|
-
def is_simulator(self):
|
|
35
|
-
return False
|
|
36
|
-
|
|
37
|
-
def get_idn(self):
|
|
38
|
-
cmd = f"#{self._address:03d}IDN\r"
|
|
39
|
-
return self.query(cmd)
|
|
40
|
-
|
|
41
|
-
def get_device_status(self):
|
|
42
|
-
cmd = f"#{self._address:03d}STA\r"
|
|
43
|
-
return self.query(cmd)
|
|
44
|
-
|
|
45
|
-
def get_address(self):
|
|
46
|
-
cmd = "#???ADR\r"
|
|
47
|
-
return self.query(cmd)
|
|
48
|
-
|
|
49
|
-
def set_standby(self):
|
|
50
|
-
cmd = f"#{self._address:03d}SBY\r"
|
|
51
|
-
return self.query(cmd)
|
|
52
|
-
|
|
53
|
-
def set_nominal_speed(self):
|
|
54
|
-
cmd = f"#{self._address:03d}NSP\r"
|
|
55
|
-
return self.query(cmd)
|
|
56
|
-
|
|
57
|
-
def set_rpm(self, rpm):
|
|
58
|
-
cmd = f"#{self._address:03d}RPM{rpm:02d}\r"
|
|
59
|
-
return self.query(cmd)
|
|
60
|
-
|
|
61
|
-
def set_enable(self, enable):
|
|
62
|
-
enablestr = 'ON' if enable else 'OFF'
|
|
63
|
-
cmd = f"#{self._address:03d}ACP{enablestr:s}\r"
|
|
64
|
-
return self.query(cmd)
|
|
65
|
-
|
|
66
|
-
def query(self, command: str):
|
|
67
|
-
""" The ACP40 does some strange undocumented things that does not allow using the normal
|
|
68
|
-
parent class query function other serial controllers use.
|
|
69
|
-
"""
|
|
70
|
-
|
|
71
|
-
# Attempt to send the command
|
|
72
|
-
self.send_command(command)
|
|
73
|
-
|
|
74
|
-
try:
|
|
75
|
-
with self._lock:
|
|
76
|
-
return_string = self._serial.read_until(b'\r', size=1024)
|
|
77
|
-
|
|
78
|
-
except SerialTimeoutException as e_timeout:
|
|
79
|
-
raise ConnectionError("Serial timeout during query") from e_timeout
|
|
80
|
-
|
|
81
|
-
if len(return_string) == 0:
|
|
82
|
-
raise ConnectionError(f"No reply from device")
|
|
83
|
-
|
|
84
|
-
if not b'#' in return_string:
|
|
85
|
-
raise ConnectionError(f"Invalid header character in response: {return_string}")
|
|
86
|
-
|
|
87
|
-
# the device sends garbage characters before the `#` starting character.
|
|
88
|
-
# Mostly \x00's but sometimes other non-ascii characters
|
|
89
|
-
response = (b'#' + return_string.split(b'#')[1]).decode()
|
|
90
|
-
|
|
91
|
-
return_value = response[5:-1]
|
|
92
|
-
|
|
93
|
-
if return_value == 'ERR0':
|
|
94
|
-
raise ConnectionError(f"Setting fault for command: {command}")
|
|
95
|
-
if return_value == 'ERR1':
|
|
96
|
-
raise ConnectionError(f"Context fault for command: {command}")
|
|
97
|
-
if return_value == 'ERR2':
|
|
98
|
-
raise ConnectionError(f"Parameter fault for command: {command}")
|
|
99
|
-
if return_value == 'ERR3':
|
|
100
|
-
raise ConnectionError(f"Order fault for command: {command}")
|
|
101
|
-
|
|
102
|
-
return return_value
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
def main():
|
|
106
|
-
logging.basicConfig()
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
dev = Acp40Controller()
|
|
110
|
-
|
|
111
|
-
#print(dev.get_address())
|
|
112
|
-
print(dev.get_idn())
|
|
113
|
-
print(dev.get_device_status())
|
|
114
|
-
# print(dev.set_enable(False, address=0))
|
|
115
|
-
|
|
116
|
-
if __name__ == '__main__':
|
|
117
|
-
main()
|
egse/vacuum/pfeiffer/acp40_cs.py
DELETED
|
@@ -1,109 +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.vacuum.pfeiffer.acp40 import Acp40Protocol, Acp40Proxy
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
14
|
-
|
|
15
|
-
logger = logging.getLogger(__name__)
|
|
16
|
-
|
|
17
|
-
CTRL_SETTINGS = Settings.load("Pfeiffer ACP40 Control Server")
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class Acp40ControlServer(ControlServer):
|
|
21
|
-
"""
|
|
22
|
-
Acp40ControlServer - Command and monitor the ACP40 turbo pump.
|
|
23
|
-
This class works as a command and monitoring server to control the device remotely.
|
|
24
|
-
The sever binds to the following ZeroMQ sockets:
|
|
25
|
-
* a REP socket that can be used as a command server. Any client can connect and
|
|
26
|
-
send a command to the Lamp controller.
|
|
27
|
-
* a PUB socket that serves as a monitoring server. It will send out Lamp status
|
|
28
|
-
information to all the connected clients every DELAY seconds.
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
def __init__(self):
|
|
32
|
-
super().__init__()
|
|
33
|
-
|
|
34
|
-
self.device_protocol = Acp40Protocol(self)
|
|
35
|
-
|
|
36
|
-
self.logger.debug(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
37
|
-
|
|
38
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
39
|
-
|
|
40
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
41
|
-
|
|
42
|
-
def get_communication_protocol(self):
|
|
43
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
44
|
-
|
|
45
|
-
def get_commanding_port(self):
|
|
46
|
-
return CTRL_SETTINGS.COMMANDING_PORT
|
|
47
|
-
|
|
48
|
-
def get_service_port(self):
|
|
49
|
-
return CTRL_SETTINGS.SERVICE_PORT
|
|
50
|
-
|
|
51
|
-
def get_monitoring_port(self):
|
|
52
|
-
return CTRL_SETTINGS.MONITORING_PORT
|
|
53
|
-
|
|
54
|
-
def get_storage_mnemonic(self):
|
|
55
|
-
try:
|
|
56
|
-
return CTRL_SETTINGS.STORAGE_MNEMONIC
|
|
57
|
-
except AttributeError:
|
|
58
|
-
return "ACP40"
|
|
59
|
-
|
|
60
|
-
def before_serve(self):
|
|
61
|
-
start_http_server(CTRL_SETTINGS.METRICS_PORT)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
@click.group()
|
|
65
|
-
def cli():
|
|
66
|
-
pass
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
@cli.command()
|
|
70
|
-
@click.option("--simulator", "--sim", is_flag=True, help="Start the ACP40 Simulator as the backend.")
|
|
71
|
-
def start(simulator):
|
|
72
|
-
"""Start the ACP40 Control Server."""
|
|
73
|
-
|
|
74
|
-
if simulator:
|
|
75
|
-
Settings.set_simulation_mode(True)
|
|
76
|
-
try:
|
|
77
|
-
controller = Acp40ControlServer()
|
|
78
|
-
controller.serve()
|
|
79
|
-
|
|
80
|
-
except KeyboardInterrupt:
|
|
81
|
-
print("Shutdown requested...exiting")
|
|
82
|
-
|
|
83
|
-
except SystemExit as exit_code:
|
|
84
|
-
print("System Exit with code {}.".format(exit_code))
|
|
85
|
-
sys.exit(exit_code)
|
|
86
|
-
|
|
87
|
-
except Exception:
|
|
88
|
-
|
|
89
|
-
logger.exception("Cannot start the ACP40 Control Server")
|
|
90
|
-
# The above line does exactly the same as the traceback, but on the logger
|
|
91
|
-
# import traceback
|
|
92
|
-
# traceback.print_exc(file=sys.stdout)
|
|
93
|
-
|
|
94
|
-
return 0
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
@cli.command()
|
|
98
|
-
def stop():
|
|
99
|
-
"""Send a 'quit_server' command to the Control Server."""
|
|
100
|
-
|
|
101
|
-
with Acp40Proxy() as proxy:
|
|
102
|
-
|
|
103
|
-
sp = proxy.get_service_proxy()
|
|
104
|
-
sp.quit_server()
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if __name__ == "__main__":
|
|
108
|
-
|
|
109
|
-
sys.exit(cli())
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
from egse.device import DeviceInterface
|
|
2
|
-
from egse.decorators import dynamic_interface
|
|
3
|
-
|
|
4
|
-
class Acp40Interface(DeviceInterface):
|
|
5
|
-
|
|
6
|
-
@dynamic_interface
|
|
7
|
-
def is_connected(self):
|
|
8
|
-
return NotImplemented
|
|
9
|
-
|
|
10
|
-
@dynamic_interface
|
|
11
|
-
def is_simulator(self):
|
|
12
|
-
return NotImplemented
|
|
13
|
-
|
|
14
|
-
@dynamic_interface
|
|
15
|
-
def get_idn(self):
|
|
16
|
-
return NotImplemented
|
|
17
|
-
|
|
18
|
-
@dynamic_interface
|
|
19
|
-
def get_device_status(self):
|
|
20
|
-
return NotImplemented
|
|
21
|
-
|
|
22
|
-
@dynamic_interface
|
|
23
|
-
def get_address(self):
|
|
24
|
-
return NotImplemented
|
|
25
|
-
|
|
26
|
-
@dynamic_interface
|
|
27
|
-
def set_standby(self):
|
|
28
|
-
return NotImplemented
|
|
29
|
-
|
|
30
|
-
@dynamic_interface
|
|
31
|
-
def set_nominal_speed(self):
|
|
32
|
-
return NotImplemented
|
|
33
|
-
|
|
34
|
-
@dynamic_interface
|
|
35
|
-
def set_rpm(self, rpm):
|
|
36
|
-
return NotImplemented
|
|
37
|
-
|
|
38
|
-
@dynamic_interface
|
|
39
|
-
def set_enable(self, enable):
|
|
40
|
-
return NotImplemented
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from egse.simulator import Simulator
|
|
4
|
-
from egse.vacuum.pfeiffer.acp40_interface import Acp40Interface
|
|
5
|
-
|
|
6
|
-
logger = logging.getLogger(__name__)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class Acp40Simulator(Acp40Interface, Simulator):
|
|
10
|
-
|
|
11
|
-
def __init__(self):
|
|
12
|
-
super().__init__()
|
|
13
|
-
self.connect()
|
|
14
|
-
|
|
15
|
-
def is_simulator(self):
|
|
16
|
-
return True
|
|
17
|
-
|
|
18
|
-
def get_idn(self):
|
|
19
|
-
return "VPACP40-VB.1 (simulator)"
|
|
20
|
-
|
|
21
|
-
def get_device_status(self):
|
|
22
|
-
return "000100,100000,000000,00000,0000,000,027,000,01597"
|
|
23
|
-
|
|
24
|
-
def get_address(self):
|
|
25
|
-
raise NotImplementedError
|
|
26
|
-
|
|
27
|
-
def set_standby(self):
|
|
28
|
-
raise NotImplementedError
|
|
29
|
-
|
|
30
|
-
def set_nominal_speed(self):
|
|
31
|
-
raise NotImplementedError
|
|
32
|
-
|
|
33
|
-
def set_rpm(self, rpm):
|
|
34
|
-
raise NotImplementedError
|
|
35
|
-
|
|
36
|
-
def set_enable(self, enable):
|
|
37
|
-
raise NotImplementedError
|
egse/vacuum/pfeiffer/tc400.py
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from prometheus_client import Gauge
|
|
4
|
-
|
|
5
|
-
from egse.control import ControlServer
|
|
6
|
-
from egse.fdir.fdir_manager import FdirManagerProxy
|
|
7
|
-
from egse.protocol import CommandProtocol
|
|
8
|
-
from egse.proxy import Proxy
|
|
9
|
-
from egse.settings import Settings
|
|
10
|
-
from egse.zmq_ser import bind_address
|
|
11
|
-
from egse.system import format_datetime
|
|
12
|
-
from egse.vacuum.pfeiffer.tc400_interface import Tc400Command, Tc400Interface
|
|
13
|
-
from egse.vacuum.pfeiffer.tc400_controller import Tc400Controller
|
|
14
|
-
from egse.vacuum.pfeiffer.tc400_simulator import Tc400Simulator
|
|
15
|
-
from egse.zmq_ser import connect_address
|
|
16
|
-
|
|
17
|
-
LOGGER = logging.getLogger(__name__)
|
|
18
|
-
|
|
19
|
-
DEVICE_SETTINGS = Settings.load(filename="tc400.yaml")
|
|
20
|
-
CTRL_SETTINGS = Settings.load("Pfeiffer TC400 Control Server")
|
|
21
|
-
|
|
22
|
-
gauge_active_speed = Gauge('GSRON_TC400_ACT_SPEED', 'active pump speed')
|
|
23
|
-
gauge_drive_power = Gauge('GSRON_TC400_POWER', 'pump power')
|
|
24
|
-
gauge_motor_temperature = Gauge('GSRON_TC400_MOTOR_TEMP', 'motor temperature')
|
|
25
|
-
gauge_last_error = Gauge('GSRON_TC400_LAST_ERROR', 'last encountered error')
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class Tc400Protocol(CommandProtocol):
|
|
29
|
-
|
|
30
|
-
def __init__(self, control_server: ControlServer):
|
|
31
|
-
|
|
32
|
-
super().__init__()
|
|
33
|
-
self.control_server = control_server
|
|
34
|
-
|
|
35
|
-
if Settings.simulation_mode():
|
|
36
|
-
self.dev = Tc400Simulator()
|
|
37
|
-
else:
|
|
38
|
-
self.dev = Tc400Controller()
|
|
39
|
-
|
|
40
|
-
self.load_commands(DEVICE_SETTINGS.Commands, Tc400Command, Tc400Interface)
|
|
41
|
-
|
|
42
|
-
self.build_device_method_lookup_table(self.dev)
|
|
43
|
-
|
|
44
|
-
# move to parent class?
|
|
45
|
-
def get_bind_address(self):
|
|
46
|
-
return bind_address(
|
|
47
|
-
self.control_server.get_communication_protocol(),
|
|
48
|
-
self.control_server.get_commanding_port(),
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
def get_status(self):
|
|
52
|
-
status_dict = super().get_status()
|
|
53
|
-
|
|
54
|
-
# need to get the channel from somewhere
|
|
55
|
-
# status_dict['device_status'] = self.dev.get_status(channel)
|
|
56
|
-
|
|
57
|
-
return status_dict
|
|
58
|
-
|
|
59
|
-
def get_housekeeping(self) -> dict:
|
|
60
|
-
result = dict()
|
|
61
|
-
result["timestamp"] = format_datetime()
|
|
62
|
-
|
|
63
|
-
try:
|
|
64
|
-
result[f"GSRON_TC400_LAST_ERROR"] = self.dev.get_last_error()
|
|
65
|
-
result[f"GSRON_TC400_ACT_SPEED"] = self.dev.get_active_speed()
|
|
66
|
-
result[f"GSRON_TC400_POWER"] = self.dev.get_drive_power()
|
|
67
|
-
result[f"GSRON_TC400_MOTOR_TEMP"] = self.dev.get_motor_temperature()
|
|
68
|
-
except Exception as e:
|
|
69
|
-
LOGGER.warning(f'failed to get HK ({e})')
|
|
70
|
-
|
|
71
|
-
return result
|
|
72
|
-
|
|
73
|
-
gauge_active_speed.set(result[f"GSRON_TC400_ACT_SPEED"])
|
|
74
|
-
gauge_drive_power.set(result[f"GSRON_TC400_POWER"])
|
|
75
|
-
gauge_motor_temperature.set(result[f"GSRON_TC400_MOTOR_TEMP"])
|
|
76
|
-
gauge_last_error.set(result[f'GSRON_TC400_LAST_ERROR'])
|
|
77
|
-
|
|
78
|
-
return result
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
class Tc400Proxy(Proxy, Tc400Interface):
|
|
82
|
-
|
|
83
|
-
def __init__(self):
|
|
84
|
-
super().__init__(
|
|
85
|
-
connect_address(
|
|
86
|
-
CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.HOSTNAME, CTRL_SETTINGS.COMMANDING_PORT))
|
|
87
|
-
|
egse/vacuum/pfeiffer/tc400.yaml
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# The commands in this file are fake.
|
|
2
|
-
# One of the parameters of the command is the device index. If this is included here, the client
|
|
3
|
-
# will have to pass this argument for every function call. I prefer to add this on the
|
|
4
|
-
# controller side. Note that arguments must be included in the cmd string for the proxy interface.
|
|
5
|
-
# Additionally, this device requires a checksum that can only sensibly be calculated on the
|
|
6
|
-
# controller side as well.
|
|
7
|
-
|
|
8
|
-
BaseClass:
|
|
9
|
-
egse.vacuum.pfeiffer.tc400_interface.Tc400Interface
|
|
10
|
-
|
|
11
|
-
ProxyClass:
|
|
12
|
-
egse.vacuum.pfeiffer.tc400.Tc400Proxy
|
|
13
|
-
|
|
14
|
-
ControlServer:
|
|
15
|
-
egse.vacuum.pfeiffer.tc400_cs
|
|
16
|
-
|
|
17
|
-
Commands:
|
|
18
|
-
|
|
19
|
-
disconnect:
|
|
20
|
-
description: Disconnect from the device.
|
|
21
|
-
|
|
22
|
-
connect:
|
|
23
|
-
description: Connect to the device.
|
|
24
|
-
|
|
25
|
-
reconnect:
|
|
26
|
-
description: Reconnect to the device.
|
|
27
|
-
This command will force a disconnect and then try to re-connect to the controller.
|
|
28
|
-
is_connected:
|
|
29
|
-
description: Check if the Thorlabs Hardware Controller is connected.
|
|
30
|
-
|
|
31
|
-
is_simulator:
|
|
32
|
-
description: Ask if the control server is a simulator instead of the real controller class.
|
|
33
|
-
returns: bool | True if the far end is a simulator instead of the real hardware
|
|
34
|
-
|
|
35
|
-
get_idn:
|
|
36
|
-
description: Read the type of display and control unit
|
|
37
|
-
returns: str | ID string
|
|
38
|
-
|
|
39
|
-
get_last_error:
|
|
40
|
-
description: Read latest error
|
|
41
|
-
returns: int | error code of last encountered error
|
|
42
|
-
|
|
43
|
-
get_active_speed:
|
|
44
|
-
description: Read the active rotation speed
|
|
45
|
-
returns: int | current speed in Hz
|
|
46
|
-
|
|
47
|
-
get_drive_power:
|
|
48
|
-
description: Read the power
|
|
49
|
-
returns: int | current power in W
|
|
50
|
-
|
|
51
|
-
get_motor_temperature:
|
|
52
|
-
description: Read the temperature
|
|
53
|
-
returns: int | current temperature in C
|
|
54
|
-
|
|
55
|
-
set_heating:
|
|
56
|
-
description: Turn heating on or off.
|
|
57
|
-
args:
|
|
58
|
-
enable: bool | True to enable heating.
|
|
59
|
-
cmd: "{enable}"
|
|
60
|
-
|
|
61
|
-
set_standby:
|
|
62
|
-
description: Set the device in standby (idle).
|
|
63
|
-
args:
|
|
64
|
-
enable: bool | True to enable standby.
|
|
65
|
-
cmd: "{enable}"
|
|
66
|
-
|
|
67
|
-
set_pumpingstation:
|
|
68
|
-
description: Enable the external power. Needs to be enabled before the pump.
|
|
69
|
-
args:
|
|
70
|
-
enable: bool | Enable the external power.
|
|
71
|
-
cmd: "{enable}"
|
|
72
|
-
|
|
73
|
-
set_motorpump:
|
|
74
|
-
description: Turn the turbopump on or off.
|
|
75
|
-
args:
|
|
76
|
-
enable: bool | True to turn on the pump motor.
|
|
77
|
-
cmd: "{enable}"
|
|
78
|
-
|
|
79
|
-
set_gasmode:
|
|
80
|
-
description: Select gas type setting.
|
|
81
|
-
args:
|
|
82
|
-
mode: int | 0 - heavy, 1 - light, 2 - helium.
|
|
83
|
-
cmd: "{mode}"
|