cgse 2023.38.0__py3-none-any.whl → 2024.1.4__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-2024.1.4.dist-info/METADATA +38 -0
- cgse-2024.1.4.dist-info/RECORD +5 -0
- {cgse-2023.38.0.dist-info → cgse-2024.1.4.dist-info}/WHEEL +1 -2
- cgse-2023.38.0.dist-info/COPYING +0 -674
- cgse-2023.38.0.dist-info/COPYING.LESSER +0 -165
- cgse-2023.38.0.dist-info/METADATA +0 -144
- cgse-2023.38.0.dist-info/RECORD +0 -649
- cgse-2023.38.0.dist-info/entry_points.txt +0 -75
- cgse-2023.38.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5235
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -626
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -912
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -234
- egse/alert/alertman_ui.py +0 -603
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -130
- egse/alert/gsm/beaglebone_protocol.py +0 -48
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -129
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1015
- egse/confman/confman.yaml +0 -67
- egse/confman/confman_cs.py +0 -239
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -442
- egse/coordinates/__init__.py +0 -531
- egse/coordinates/avoidance.py +0 -103
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -120
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -195
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1247
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -415
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2681
- egse/dpu/ccd_ui.py +0 -508
- egse/dpu/dpu.py +0 -786
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -668
- egse/dpu/fitsgen.py +0 -2077
- egse/dpu/fitsgen_test.py +0 -752
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/constants.py +0 -220
- egse/dsi/esl.py +0 -870
- egse/dsi/rmap.py +0 -1042
- egse/dsi/rmapci.py +0 -37
- egse/dsi/spw.py +0 -154
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -258
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -28
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -51
- egse/fdir/fdir_manager_controller.py +0 -228
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -25
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -37
- egse/fdir/fdir_remote_controller.py +0 -50
- egse/fdir/fdir_remote_cs.py +0 -97
- egse/fdir/fdir_remote_interface.py +0 -14
- egse/fdir/fdir_remote_popup.py +0 -31
- egse/fee/__init__.py +0 -114
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/fee.py +0 -631
- egse/fee/feesim.py +0 -750
- egse/fee/n_fee_hk.py +0 -761
- egse/fee/nfee.py +0 -187
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -24
- egse/filterwheel/eksma/fw8smc4.py +0 -661
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -81
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -111
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1068
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -712
- egse/fov/fov_ui.py +0 -861
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -135
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1281
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -588
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -138
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -196
- egse/hexapod/symetrie/puna_protocol.py +0 -131
- egse/hexapod/symetrie/puna_ui.py +0 -434
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -415
- egse/hexapod/symetrie/zonda_protocol.py +0 -119
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -765
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -69
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/macOS/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/macOS/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -73
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -98
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -163
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -811
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -603
- egse/proxy.py +0 -522
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -675
- egse/resource.py +0 -333
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -212
- egse/services.yaml +0 -51
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1180
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -69
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1479
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -247
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -193
- egse/stages/arun/smd3.py +0 -111
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -472
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -904
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -111
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1004
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -72
- egse/storage/storage_cs.py +0 -214
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -412
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1408
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -874
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -177
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -116
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -99
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -117
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -101
- egse/tempcontrol/beaglebone/beaglebone.py +0 -342
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -135
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -681
- egse/tempcontrol/digalox/digalox.py +0 -107
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -112
- egse/tempcontrol/digalox/digalox_protocol.py +0 -55
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -78
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -73
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -389
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -727
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -875
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -118
- egse/tempcontrol/srs/ptc10_protocol.py +0 -42
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -164
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -193
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -92
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -128
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -102
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -83
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -316
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -704
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -39
- egse/vacuum/pfeiffer/tc400.py +0 -113
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -140
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -24
- egse/vacuum/pfeiffer/tpg261.py +0 -81
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -60
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -24
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -44
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/create_hdf5_report.py +0 -295
- scripts/csl_model.py +0 -436
- scripts/csl_restore_setup.py +0 -230
- scripts/export-grafana-dashboards.py +0 -50
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -59
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -11
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -64
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -38
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.tempcontrol.keithley.daq6510.DAQ6510Interface
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.tempcontrol.keithley.daq6510.DAQ6510Proxy
|
|
6
|
-
|
|
7
|
-
ControlServerClass:
|
|
8
|
-
egse.tempcontrol.keithley.daq6510_cs.DAQ6510ControlServer
|
|
9
|
-
|
|
10
|
-
ControlServer:
|
|
11
|
-
egse.tempcontrol.keithley.daq6510_cs
|
|
12
|
-
|
|
13
|
-
Commands:
|
|
14
|
-
|
|
15
|
-
# Each of these groups is parsed and used on both the server and the client side.
|
|
16
|
-
# The group name (e.g. is_simulator) will be monkey patched in the Proxy class for the device or service.
|
|
17
|
-
# The other field are:
|
|
18
|
-
# description: Used by the doc_string method to generate a help string
|
|
19
|
-
# cmd: Command string that will eventually be send to the hardware controller for the
|
|
20
|
-
# device after the arguments have been filled.
|
|
21
|
-
# device_method: The name of the method to be called on the device class.
|
|
22
|
-
# These should all be defined by the base class for the device, i.e. KeithleyBase.
|
|
23
|
-
# response: The name of the method to be called from the device protocol.
|
|
24
|
-
# This method should exist in the subclass of the CommandProtocol base class, i.e.
|
|
25
|
-
# in this case it will be the KeithleyProtocol class.
|
|
26
|
-
|
|
27
|
-
# Definition of the the DeviceInterface
|
|
28
|
-
|
|
29
|
-
disconnect:
|
|
30
|
-
description : Disconnect from the Keithley controller. This command will be send to the
|
|
31
|
-
Keithley Control Server which will then disconnect from the hardware controller.
|
|
32
|
-
This command doesn't affect the ZeroMQ connection of this Proxy to the
|
|
33
|
-
control server. Use the service command ``disconnect()`` to disconnect
|
|
34
|
-
from the control server.
|
|
35
|
-
|
|
36
|
-
connect:
|
|
37
|
-
description: Connect the Keithley hardware controller
|
|
38
|
-
|
|
39
|
-
reconnect:
|
|
40
|
-
description: Reconnect the Keithley hardware controller.
|
|
41
|
-
|
|
42
|
-
This command will force a disconnect and then try to re-connect to the controller.
|
|
43
|
-
|
|
44
|
-
is_simulator:
|
|
45
|
-
description: Ask if the control server is a simulator instead of the real KeithleyController class.
|
|
46
|
-
returns: bool | True if the far end is a simulator instead of the real hardware
|
|
47
|
-
|
|
48
|
-
is_connected:
|
|
49
|
-
description: Check if the Keithley Hardware Controller is connected.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
# Definition of the device commands
|
|
53
|
-
|
|
54
|
-
info:
|
|
55
|
-
description: Retrieve basic information about the Keithley and the Controller.
|
|
56
|
-
|
|
57
|
-
reset:
|
|
58
|
-
description: Resets the device. This returns the instrument to default settings, and cancels all
|
|
59
|
-
pending commands.
|
|
60
|
-
|
|
61
|
-
send_command:
|
|
62
|
-
description: Sends a SCPI command to the device
|
|
63
|
-
cmd: '{command} {response}'
|
|
64
|
-
|
|
65
|
-
set_time:
|
|
66
|
-
description: Set the absolute date and time of the device.
|
|
67
|
-
cmd: '{year} {month} {day} {hour} {minute} {second}'
|
|
68
|
-
|
|
69
|
-
get_time:
|
|
70
|
-
description: Get the time and time of the device.
|
|
71
|
-
|
|
72
|
-
read_buffer:
|
|
73
|
-
description: Reads specific data elements (measurements) from the given buffer.
|
|
74
|
-
|
|
75
|
-
get_buffer_count:
|
|
76
|
-
description: The number of readings in the specified reading buffer.
|
|
77
|
-
|
|
78
|
-
get_buffer_capacity:
|
|
79
|
-
description: The total number of readings that the buffer can store.
|
|
80
|
-
|
|
81
|
-
delete_buffer:
|
|
82
|
-
description: Deletes the given buffer.
|
|
83
|
-
|
|
84
|
-
clear_buffer:
|
|
85
|
-
description: Clears all readings and statistics from the specified buffer.
|
|
86
|
-
|
|
87
|
-
create_buffer:
|
|
88
|
-
description: Creates a Reading Buffer with the given name.
|
|
89
|
-
|
|
90
|
-
configure_sensors:
|
|
91
|
-
description: Allows to configure the different sensors in the `channel_list`. Each sensor
|
|
92
|
-
in the list will be configured according to the settings given in the
|
|
93
|
-
`sense` dictionary.
|
|
94
|
-
cmd: '{channel_list} {sense}'
|
|
95
|
-
|
|
96
|
-
setup_measurements:
|
|
97
|
-
description: Setup the measurements for the given channel list.
|
|
98
|
-
cmd: '{channel_list}'
|
|
99
|
-
|
|
100
|
-
perform_measurement:
|
|
101
|
-
description: Perform the actual measurements. This function will wait until all
|
|
102
|
-
measurements have completed, so be careful with the arguments `count` and
|
|
103
|
-
`interval` as they will multiply into the number of seconds that you will
|
|
104
|
-
have to wait for the response.
|
|
105
|
-
cmd: '{channel_list} {count} {interval}'
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from prometheus_client import start_http_server
|
|
4
|
-
|
|
5
|
-
import multiprocessing
|
|
6
|
-
multiprocessing.current_process().name = "daq6510_cs"
|
|
7
|
-
|
|
8
|
-
import sys
|
|
9
|
-
|
|
10
|
-
import click
|
|
11
|
-
import invoke
|
|
12
|
-
import rich
|
|
13
|
-
import zmq
|
|
14
|
-
|
|
15
|
-
from egse.control import ControlServer
|
|
16
|
-
from egse.control import is_control_server_active
|
|
17
|
-
from egse.settings import Settings
|
|
18
|
-
from egse.tempcontrol.keithley.daq6510 import DAQ6510Proxy
|
|
19
|
-
from egse.tempcontrol.keithley.daq6510_protocol import DAQ6510Protocol
|
|
20
|
-
from egse.zmq_ser import connect_address
|
|
21
|
-
|
|
22
|
-
logger = logging.getLogger(__name__)
|
|
23
|
-
|
|
24
|
-
CTRL_SETTINGS = Settings.load("Keithley Control Server")
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def is_daq6510_cs_active(timeout: float = 0.5):
|
|
28
|
-
"""Check if the DAQ6510 Control Server is running.
|
|
29
|
-
|
|
30
|
-
Args:
|
|
31
|
-
timeout (float): timeout when waiting for a reply [seconds, default=0.5]
|
|
32
|
-
Returns:
|
|
33
|
-
True if the control server is running and replied with the expected answer.
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
endpoint = connect_address(
|
|
37
|
-
CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.HOSTNAME, CTRL_SETTINGS.COMMANDING_PORT
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
return is_control_server_active(endpoint, timeout)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class DAQ6510ControlServer(ControlServer):
|
|
44
|
-
"""
|
|
45
|
-
Keithley DAQ6510ControlServer - Command and monitor the Keithley Data Acquisition System.
|
|
46
|
-
|
|
47
|
-
This class works as a command and monitoring server to control the DAQ6510 Controller.
|
|
48
|
-
|
|
49
|
-
The sever binds to the following ZeroMQ sockets:
|
|
50
|
-
|
|
51
|
-
* a REQ-REP socket that can be used as a command server. Any client can connect and
|
|
52
|
-
send a command to the DAQ6510 controller.
|
|
53
|
-
|
|
54
|
-
* a PUB-SUP socket that serves as a monitoring server. It will send out DAQ6510 status
|
|
55
|
-
information to all the connected clients every DELAY seconds.
|
|
56
|
-
|
|
57
|
-
"""
|
|
58
|
-
|
|
59
|
-
def __init__(self):
|
|
60
|
-
super().__init__()
|
|
61
|
-
|
|
62
|
-
self.device_protocol = DAQ6510Protocol(self)
|
|
63
|
-
|
|
64
|
-
self.logger.info(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
65
|
-
|
|
66
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
67
|
-
|
|
68
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
69
|
-
|
|
70
|
-
def get_communication_protocol(self):
|
|
71
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
72
|
-
|
|
73
|
-
def get_commanding_port(self):
|
|
74
|
-
return CTRL_SETTINGS.COMMANDING_PORT
|
|
75
|
-
|
|
76
|
-
def get_service_port(self):
|
|
77
|
-
return CTRL_SETTINGS.SERVICE_PORT
|
|
78
|
-
|
|
79
|
-
def get_monitoring_port(self):
|
|
80
|
-
return CTRL_SETTINGS.MONITORING_PORT
|
|
81
|
-
|
|
82
|
-
def get_storage_mnemonic(self):
|
|
83
|
-
try:
|
|
84
|
-
return CTRL_SETTINGS.STORAGE_MNEMONIC
|
|
85
|
-
except AttributeError:
|
|
86
|
-
return "DAQ6510"
|
|
87
|
-
|
|
88
|
-
def before_serve(self):
|
|
89
|
-
start_http_server(CTRL_SETTINGS.METRICS_PORT)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
@click.group()
|
|
93
|
-
def cli():
|
|
94
|
-
pass
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
@cli.command()
|
|
98
|
-
def start():
|
|
99
|
-
"""Starts the Keithley DAQ6510 Control Server."""
|
|
100
|
-
|
|
101
|
-
try:
|
|
102
|
-
control_server = DAQ6510ControlServer()
|
|
103
|
-
control_server.serve()
|
|
104
|
-
except KeyboardInterrupt:
|
|
105
|
-
logger.debug("Shutdown requested...exiting")
|
|
106
|
-
except SystemExit as exit_code:
|
|
107
|
-
logger.debug("System Exit with code {}.".format(exit_code))
|
|
108
|
-
sys.exit(exit_code)
|
|
109
|
-
except Exception:
|
|
110
|
-
msg = "Cannot start the DAQ6510 Control Server"
|
|
111
|
-
logger.exception(msg)
|
|
112
|
-
rich.print(f"[red]{msg}.")
|
|
113
|
-
|
|
114
|
-
return 0
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
@cli.command()
|
|
118
|
-
def start_bg():
|
|
119
|
-
"""Start the DAQ6510 Control Server in the background."""
|
|
120
|
-
invoke.run("daq6510_cs start", disown=True)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
@cli.command()
|
|
124
|
-
def stop():
|
|
125
|
-
"""Send a 'quit_server' command to the Keithley DAQ6510 control server."""
|
|
126
|
-
|
|
127
|
-
try:
|
|
128
|
-
with DAQ6510Proxy() as daq:
|
|
129
|
-
sp = daq.get_service_proxy()
|
|
130
|
-
sp.quit_server()
|
|
131
|
-
except ConnectionError as exc:
|
|
132
|
-
msg = "Cannot stop the DAQ6510 Control Server"
|
|
133
|
-
logger.exception(msg)
|
|
134
|
-
rich.print(f"[red]{msg}, could not send the Quit command. [black]Check log messages.")
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
@cli.command()
|
|
138
|
-
def status():
|
|
139
|
-
"""Request status information from the Control Server."""
|
|
140
|
-
|
|
141
|
-
protocol = CTRL_SETTINGS.PROTOCOL
|
|
142
|
-
hostname = CTRL_SETTINGS.HOSTNAME
|
|
143
|
-
port = CTRL_SETTINGS.COMMANDING_PORT
|
|
144
|
-
|
|
145
|
-
endpoint = connect_address(protocol, hostname, port)
|
|
146
|
-
|
|
147
|
-
if is_control_server_active(endpoint):
|
|
148
|
-
rich.print(f"DAQ6510 CS: [green]active")
|
|
149
|
-
with DAQ6510Proxy() as daq6510:
|
|
150
|
-
sim = daq6510.is_simulator()
|
|
151
|
-
connected = daq6510.is_connected()
|
|
152
|
-
ip = daq6510.get_ip_address()
|
|
153
|
-
rich.print(f"mode: {'simulator' if sim else 'device'}{' not' if not connected else ''} connected")
|
|
154
|
-
rich.print(f"hostname: {ip}")
|
|
155
|
-
else:
|
|
156
|
-
rich.print(f"DAQ6510 CS: [red]not active")
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
if __name__ == "__main__":
|
|
160
|
-
|
|
161
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
162
|
-
|
|
163
|
-
sys.exit(cli())
|
|
@@ -1,343 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import socket
|
|
3
|
-
import time
|
|
4
|
-
|
|
5
|
-
from egse.command import ClientServerCommand
|
|
6
|
-
from egse.device import DeviceConnectionError
|
|
7
|
-
from egse.device import DeviceConnectionInterface
|
|
8
|
-
from egse.device import DeviceError
|
|
9
|
-
from egse.device import DeviceTimeoutError
|
|
10
|
-
from egse.device import DeviceTransport
|
|
11
|
-
from egse.settings import Settings
|
|
12
|
-
from egse.system import Timer
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
IDENTIFICATION_QUERY = "*IDN?"
|
|
17
|
-
|
|
18
|
-
DEVICE_SETTINGS = Settings.load("Keithley DAQ6510")
|
|
19
|
-
DEVICE_NAME = "DAQ6510"
|
|
20
|
-
READ_TIMEOUT = DEVICE_SETTINGS.TIMEOUT # READ_TIMEOUT in second. READ_TIMEOUT can be smaller than timeout (for DAQ6510Proxy) (e.g. 1 second)
|
|
21
|
-
|
|
22
|
-
class DAQ6510Command(ClientServerCommand):
|
|
23
|
-
def get_cmd_string(self, *args, **kwargs) -> str:
|
|
24
|
-
out = super().get_cmd_string(*args, **kwargs)
|
|
25
|
-
return out + "\n"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class DAQ6510EthernetInterface(DeviceConnectionInterface, DeviceTransport):
|
|
29
|
-
"""Defines the low-level interface to the Keithley DAQ6510 Controller."""
|
|
30
|
-
|
|
31
|
-
def __init__(self, hostname=None, port=None):
|
|
32
|
-
self.hostname = DEVICE_SETTINGS.HOSTNAME if hostname is None else hostname
|
|
33
|
-
self.port = DEVICE_SETTINGS.PORT if port is None else port
|
|
34
|
-
self.sock = None
|
|
35
|
-
|
|
36
|
-
self.is_connection_open = False
|
|
37
|
-
|
|
38
|
-
def connect(self):
|
|
39
|
-
"""Connect the device.
|
|
40
|
-
|
|
41
|
-
Raises:
|
|
42
|
-
DeviceConnectionError: When the connection could not be established. Check the logging
|
|
43
|
-
messages for more detail.
|
|
44
|
-
|
|
45
|
-
DeviceTimeoutError: When the connection timed out.
|
|
46
|
-
|
|
47
|
-
ValueError: When hostname or port number are not provided.
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
# Sanity checks
|
|
51
|
-
|
|
52
|
-
if self.is_connection_open:
|
|
53
|
-
logger.warning(f"{DEVICE_NAME}: trying to connect to an already connected socket.")
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
if self.hostname in (None, ""):
|
|
57
|
-
raise ValueError(f"{DEVICE_NAME}: hostname is not initialized.")
|
|
58
|
-
|
|
59
|
-
if self.port in (None, 0):
|
|
60
|
-
raise ValueError(f"{DEVICE_NAME}: port number is not initialized.")
|
|
61
|
-
|
|
62
|
-
# Create a new socket instance
|
|
63
|
-
|
|
64
|
-
try:
|
|
65
|
-
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
66
|
-
# The following lines are to experiment with blocking and timeout, but there is no need.
|
|
67
|
-
# self.sock.setblocking(1)
|
|
68
|
-
# self.sock.settimeout(3)
|
|
69
|
-
except socket.error as e_socket:
|
|
70
|
-
raise DeviceConnectionError(DEVICE_NAME, "Failed to create socket.") from e_socket
|
|
71
|
-
|
|
72
|
-
# Attempt to establish a connection to the remote host
|
|
73
|
-
|
|
74
|
-
# FIXME: Socket shall be closed on exception?
|
|
75
|
-
|
|
76
|
-
# We set a timeout of 3 sec before connecting and reset to None
|
|
77
|
-
# (=blocking) after the connect. The reason for this is because when no
|
|
78
|
-
# device is available, e.g during testing, the timeout will take about
|
|
79
|
-
# two minutes which is way too long. It needs to be evaluated if this
|
|
80
|
-
# approach is acceptable and not causing problems during production.
|
|
81
|
-
|
|
82
|
-
try:
|
|
83
|
-
logger.debug(f'Connecting a socket to host "{self.hostname}" using port {self.port}')
|
|
84
|
-
self.sock.settimeout(3)
|
|
85
|
-
self.sock.connect((self.hostname, self.port))
|
|
86
|
-
self.sock.settimeout(None)
|
|
87
|
-
except ConnectionRefusedError as exc:
|
|
88
|
-
raise DeviceConnectionError(
|
|
89
|
-
DEVICE_NAME, f"Connection refused to {self.hostname}:{self.port}."
|
|
90
|
-
) from exc
|
|
91
|
-
except TimeoutError as exc:
|
|
92
|
-
raise DeviceTimeoutError(
|
|
93
|
-
DEVICE_NAME, f"Connection to {self.hostname}:{self.port} timed out."
|
|
94
|
-
) from exc
|
|
95
|
-
except socket.gaierror as exc:
|
|
96
|
-
raise DeviceConnectionError(
|
|
97
|
-
DEVICE_NAME, f"socket address info error for {self.hostname}"
|
|
98
|
-
) from exc
|
|
99
|
-
except socket.herror as exc:
|
|
100
|
-
raise DeviceConnectionError(
|
|
101
|
-
DEVICE_NAME, f"socket host address error for {self.hostname}"
|
|
102
|
-
) from exc
|
|
103
|
-
except socket.timeout as exc:
|
|
104
|
-
raise DeviceTimeoutError(
|
|
105
|
-
DEVICE_NAME, f"socket timeout error for {self.hostname}:{self.port}"
|
|
106
|
-
) from exc
|
|
107
|
-
except OSError as exc:
|
|
108
|
-
raise DeviceConnectionError(DEVICE_NAME, f"OSError caught ({exc}).") from exc
|
|
109
|
-
|
|
110
|
-
self.is_connection_open = True
|
|
111
|
-
|
|
112
|
-
# Check that we are connected to the controller by issuing the "VERSION" or
|
|
113
|
-
# "*ISDN?" query. If we don't get the right response, then disconnect automatically.
|
|
114
|
-
|
|
115
|
-
if not self.is_connected():
|
|
116
|
-
raise DeviceConnectionError(
|
|
117
|
-
DEVICE_NAME, "Device is not connected, check logging messages for the cause."
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
def disconnect(self):
|
|
121
|
-
"""Disconnect from the Ethernet connection.
|
|
122
|
-
|
|
123
|
-
Raises:
|
|
124
|
-
DeviceConnectionError when the socket could not be closed.
|
|
125
|
-
"""
|
|
126
|
-
|
|
127
|
-
try:
|
|
128
|
-
if self.is_connection_open:
|
|
129
|
-
logger.debug(f"Disconnecting from {self.hostname}")
|
|
130
|
-
self.sock.close()
|
|
131
|
-
self.is_connection_open = False
|
|
132
|
-
except Exception as e_exc:
|
|
133
|
-
raise DeviceConnectionError(
|
|
134
|
-
DEVICE_NAME, f"Could not close socket to {self.hostname}") from e_exc
|
|
135
|
-
|
|
136
|
-
def reconnect(self):
|
|
137
|
-
if self.is_connection_open:
|
|
138
|
-
self.disconnect()
|
|
139
|
-
self.connect()
|
|
140
|
-
|
|
141
|
-
def is_connected(self) -> bool:
|
|
142
|
-
"""
|
|
143
|
-
Check if the device is connected. This will send a query for the device identification
|
|
144
|
-
and validate the answer.
|
|
145
|
-
|
|
146
|
-
Returns:
|
|
147
|
-
True is the device is connected and answered with the proper ID, False otherwise.
|
|
148
|
-
"""
|
|
149
|
-
|
|
150
|
-
if not self.is_connection_open:
|
|
151
|
-
return False
|
|
152
|
-
|
|
153
|
-
try:
|
|
154
|
-
response = self.query(IDENTIFICATION_QUERY)
|
|
155
|
-
except DeviceError as exc:
|
|
156
|
-
logger.exception(exc)
|
|
157
|
-
logger.error("Most probably the client connection was closed. Disconnecting...")
|
|
158
|
-
self.disconnect()
|
|
159
|
-
return False
|
|
160
|
-
|
|
161
|
-
version = response
|
|
162
|
-
|
|
163
|
-
if "DAQ6510" not in version:
|
|
164
|
-
logger.error(
|
|
165
|
-
f'Device did not respond correctly to a "VERSION" command, response={response}. '
|
|
166
|
-
f"Disconnecting..."
|
|
167
|
-
)
|
|
168
|
-
self.disconnect()
|
|
169
|
-
return False
|
|
170
|
-
|
|
171
|
-
return True
|
|
172
|
-
|
|
173
|
-
def write(self, command: str):
|
|
174
|
-
"""
|
|
175
|
-
Send a single command to the device controller without waiting for a response.
|
|
176
|
-
|
|
177
|
-
Args:
|
|
178
|
-
command: an order command for the controller.
|
|
179
|
-
|
|
180
|
-
Raises:
|
|
181
|
-
DeviceConnectionError when the command could not be sent due to a
|
|
182
|
-
communication problem.
|
|
183
|
-
|
|
184
|
-
DeviceTimeoutError when the command could not be sent due to a timeout.
|
|
185
|
-
"""
|
|
186
|
-
|
|
187
|
-
try:
|
|
188
|
-
|
|
189
|
-
command += "\n" if not command.endswith("\n") else ""
|
|
190
|
-
|
|
191
|
-
self.sock.sendall(command.encode())
|
|
192
|
-
|
|
193
|
-
except socket.timeout as e_timeout:
|
|
194
|
-
raise DeviceTimeoutError(DEVICE_NAME, "Socket timeout error") from e_timeout
|
|
195
|
-
except socket.error as e_socket:
|
|
196
|
-
# Interpret any socket-related error as a connection error
|
|
197
|
-
raise DeviceConnectionError(DEVICE_NAME, "Socket communication error.") from e_socket
|
|
198
|
-
except AttributeError:
|
|
199
|
-
if not self.is_connection_open:
|
|
200
|
-
msg = "The DAQ6510 is not connected, use the connect() method."
|
|
201
|
-
raise DeviceConnectionError(DEVICE_NAME, msg)
|
|
202
|
-
raise
|
|
203
|
-
|
|
204
|
-
def trans(self, command: str) -> str:
|
|
205
|
-
"""
|
|
206
|
-
Send a single command to the device controller and block until a response from the
|
|
207
|
-
controller. This is seen as a transaction.
|
|
208
|
-
|
|
209
|
-
Args:
|
|
210
|
-
command: is the command to be sent
|
|
211
|
-
Returns:
|
|
212
|
-
Either a string returned by the controller (on success), or an error message (on
|
|
213
|
-
failure).
|
|
214
|
-
Raises:
|
|
215
|
-
DeviceConnectionError when there was an I/O problem during communication with the
|
|
216
|
-
controller.
|
|
217
|
-
|
|
218
|
-
DeviceTimeoutError when there was a timeout in either sending the command or
|
|
219
|
-
receiving the response.
|
|
220
|
-
"""
|
|
221
|
-
|
|
222
|
-
try:
|
|
223
|
-
|
|
224
|
-
# Attempt to send the complete command
|
|
225
|
-
|
|
226
|
-
command += "\n" if not command.endswith("\n") else ""
|
|
227
|
-
|
|
228
|
-
self.sock.sendall(command.encode())
|
|
229
|
-
|
|
230
|
-
# wait for, read and return the response from HUBER (will be at most TBD chars)
|
|
231
|
-
|
|
232
|
-
return_string = self.read()
|
|
233
|
-
|
|
234
|
-
response = return_string.decode().rstrip()
|
|
235
|
-
|
|
236
|
-
return response
|
|
237
|
-
|
|
238
|
-
except socket.timeout as e_timeout:
|
|
239
|
-
raise DeviceTimeoutError(DEVICE_NAME, "Socket timeout error") from e_timeout
|
|
240
|
-
except socket.error as e_socket:
|
|
241
|
-
# Interpret any socket-related error as an I/O error
|
|
242
|
-
raise DeviceConnectionError(DEVICE_NAME, "Socket communication error.") from e_socket
|
|
243
|
-
except ConnectionError as exc:
|
|
244
|
-
raise DeviceConnectionError(DEVICE_NAME, "Connection error.") from exc
|
|
245
|
-
except AttributeError:
|
|
246
|
-
if not self.is_connection_open:
|
|
247
|
-
raise DeviceConnectionError(
|
|
248
|
-
DEVICE_NAME, "Device not connected, use the connect() method."
|
|
249
|
-
)
|
|
250
|
-
raise
|
|
251
|
-
|
|
252
|
-
def read(self) -> bytes:
|
|
253
|
-
n_total = 0
|
|
254
|
-
buf_size = 2048
|
|
255
|
-
|
|
256
|
-
# Set a timeout of READ_TIMEOUT to the socket.recv
|
|
257
|
-
|
|
258
|
-
saved_timeout = self.sock.gettimeout()
|
|
259
|
-
self.sock.settimeout(READ_TIMEOUT)
|
|
260
|
-
|
|
261
|
-
try:
|
|
262
|
-
for idx in range(100):
|
|
263
|
-
time.sleep(0.001) # Give the device time to fill the buffer
|
|
264
|
-
data = self.sock.recv(buf_size)
|
|
265
|
-
n = len(data)
|
|
266
|
-
n_total += n
|
|
267
|
-
if n < buf_size:
|
|
268
|
-
break
|
|
269
|
-
except socket.timeout as e_timeout:
|
|
270
|
-
logger.warning(f"Socket timeout error for {self.hostname}:{self.port}")
|
|
271
|
-
return b"\r\n"
|
|
272
|
-
except TimeoutError as exc:
|
|
273
|
-
logger.warning(f"Socket timeout error: {exc}")
|
|
274
|
-
return b"\r\n"
|
|
275
|
-
finally:
|
|
276
|
-
self.sock.settimeout(saved_timeout)
|
|
277
|
-
|
|
278
|
-
# logger.debug(f"Total number of bytes received is {n_total}, idx={idx}")
|
|
279
|
-
|
|
280
|
-
return data
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
if __name__ == "__main__":
|
|
284
|
-
|
|
285
|
-
daq = DAQ6510EthernetInterface()
|
|
286
|
-
|
|
287
|
-
with Timer():
|
|
288
|
-
daq.connect()
|
|
289
|
-
|
|
290
|
-
# print(daq.info())
|
|
291
|
-
|
|
292
|
-
# Initialize
|
|
293
|
-
|
|
294
|
-
daq.write('TRAC:DEL "test1"\n')
|
|
295
|
-
|
|
296
|
-
for cmd, response in [
|
|
297
|
-
('TRAC:MAKE "test1", 1000', False), # create a new buffer
|
|
298
|
-
# settings for channel 1 and 2 of slot 1
|
|
299
|
-
('SENS:FUNC "TEMP", (@101:102)', False), # set the function to temperature
|
|
300
|
-
("SENS:TEMP:TRAN FRTD, (@101:102)", False), # set the transducer to 4-wire RTD
|
|
301
|
-
("SENS:TEMP:RTD:FOUR PT100, (@101:102)", False), # set the type of the 4-wire RTD
|
|
302
|
-
('ROUT:SCAN:BUFF "test1"', False),
|
|
303
|
-
("ROUT:SCAN:CRE (@101:102)", False),
|
|
304
|
-
("ROUT:CHAN:OPEN (@101:102)", False),
|
|
305
|
-
("ROUT:STAT? (@101:102)", True),
|
|
306
|
-
("ROUT:SCAN:STAR:STIM NONE", False),
|
|
307
|
-
# ("ROUT:SCAN:ADD:SING (@101, 102)", False), # not sure what this does, not really needed
|
|
308
|
-
("ROUT:SCAN:COUN:SCAN 1", False), # not sure if this is needed in this setting
|
|
309
|
-
# ("ROUT:SCAN:INT 1", False),
|
|
310
|
-
]:
|
|
311
|
-
print(f"Sending {cmd}...")
|
|
312
|
-
if response:
|
|
313
|
-
print(daq.trans(cmd), end="")
|
|
314
|
-
else:
|
|
315
|
-
daq.write(cmd)
|
|
316
|
-
|
|
317
|
-
# Read out the channels
|
|
318
|
-
|
|
319
|
-
# daq.write('TRAC:CLE "test1"\n')
|
|
320
|
-
|
|
321
|
-
for _ in range(10):
|
|
322
|
-
daq.write("INIT:IMM")
|
|
323
|
-
daq.write("*WAI")
|
|
324
|
-
|
|
325
|
-
# Reading the data
|
|
326
|
-
|
|
327
|
-
# When a trigger mode is running, these READ? commands can not be used.
|
|
328
|
-
|
|
329
|
-
# print(daq.trans('READ? "test1", CHAN, TST, READ\n', wait=False), end="")
|
|
330
|
-
# print(daq.trans('READ? "test1", CHAN, TST, READ\n', wait=False), end="")
|
|
331
|
-
# time.sleep(1)
|
|
332
|
-
# print(daq.trans('READ? "test1", CHAN, TST, READ\n', wait=False), end="")
|
|
333
|
-
# print(daq.trans('READ? "test1", CHAN, TST, READ\n', wait=False), end="")
|
|
334
|
-
|
|
335
|
-
# Read out the buffer
|
|
336
|
-
|
|
337
|
-
response = daq.trans('TRAC:DATA? 1, 2, "test1", CHAN, TST, READ')
|
|
338
|
-
ch1, tst1, val1, ch2, tst2, val2 = response[:-1].split(",")
|
|
339
|
-
print(f"Channel: {ch1} Time: {tst1} Value: {float(val1):.4f}\t", end="")
|
|
340
|
-
print(f"Channel: {ch2} Time: {tst2} Value: {float(val2):.4f}")
|
|
341
|
-
time.sleep(2)
|
|
342
|
-
|
|
343
|
-
daq.disconnect()
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from egse.control import ControlServer
|
|
4
|
-
from egse.device import DeviceTimeoutError
|
|
5
|
-
from egse.hk import read_conversion_dict
|
|
6
|
-
from egse.metrics import define_metrics
|
|
7
|
-
from egse.protocol import CommandProtocol
|
|
8
|
-
from egse.settings import Settings
|
|
9
|
-
from egse.state import GlobalState
|
|
10
|
-
from egse.synoptics import SynopticsManagerProxy
|
|
11
|
-
from egse.system import format_datetime
|
|
12
|
-
from egse.tempcontrol.keithley.daq6510 import DAQ6510Controller
|
|
13
|
-
from egse.tempcontrol.keithley.daq6510 import DAQ6510Interface
|
|
14
|
-
from egse.tempcontrol.keithley.daq6510 import DAQ6510Simulator
|
|
15
|
-
from egse.tempcontrol.keithley.daq6510_devif import DAQ6510Command
|
|
16
|
-
from egse.zmq_ser import bind_address
|
|
17
|
-
|
|
18
|
-
COMMAND_SETTINGS = Settings.load(filename="daq6510.yaml")
|
|
19
|
-
|
|
20
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class DAQ6510Protocol(CommandProtocol):
|
|
24
|
-
def __init__(self, control_server: ControlServer):
|
|
25
|
-
super().__init__()
|
|
26
|
-
self.control_server = control_server
|
|
27
|
-
|
|
28
|
-
if Settings.simulation_mode():
|
|
29
|
-
self.daq = DAQ6510Simulator()
|
|
30
|
-
else:
|
|
31
|
-
self.daq = DAQ6510Controller()
|
|
32
|
-
|
|
33
|
-
try:
|
|
34
|
-
self.daq.connect()
|
|
35
|
-
except (ConnectionError, DeviceTimeoutError) as exc:
|
|
36
|
-
MODULE_LOGGER.warning(
|
|
37
|
-
f"Couldn't establish a connection to the DAQ6510, check the log messages.")
|
|
38
|
-
|
|
39
|
-
self.load_commands(COMMAND_SETTINGS.Commands, DAQ6510Command, DAQ6510Interface)
|
|
40
|
-
self.build_device_method_lookup_table(self.daq)
|
|
41
|
-
|
|
42
|
-
self.channels = GlobalState.setup.gse.DAQ6510.channels
|
|
43
|
-
|
|
44
|
-
self.hk_conversion_table = read_conversion_dict(self.control_server.get_storage_mnemonic())
|
|
45
|
-
|
|
46
|
-
self.synoptics = SynopticsManagerProxy()
|
|
47
|
-
self.metrics = define_metrics(origin="DAS-DAQ6510", use_site=True)
|
|
48
|
-
|
|
49
|
-
def get_bind_address(self):
|
|
50
|
-
return bind_address(
|
|
51
|
-
self.control_server.get_communication_protocol(),
|
|
52
|
-
self.control_server.get_commanding_port(),
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
def get_status(self):
|
|
56
|
-
return super().get_status()
|
|
57
|
-
|
|
58
|
-
def get_housekeeping(self) -> dict:
|
|
59
|
-
|
|
60
|
-
hk_dict = dict()
|
|
61
|
-
hk_dict["timestamp"] = format_datetime()
|
|
62
|
-
|
|
63
|
-
# # TODO I guess we have to do something along those lines
|
|
64
|
-
# # (We'll have to increase the HK delay, cfr. Agilents)
|
|
65
|
-
# measurement = self.daq.perform_measurement(channel_list=self.channels)
|
|
66
|
-
# temperatures = convert_hk_names(measurement, self.hk_conversion_table)
|
|
67
|
-
# hk_dict.update(temperatures)
|
|
68
|
-
#
|
|
69
|
-
# self.synoptics.store_th_synoptics(hk_dict)
|
|
70
|
-
#
|
|
71
|
-
# for key, value in hk_dict.items():
|
|
72
|
-
# if key != "timestamp":
|
|
73
|
-
# self.metrics[key].set(value)
|
|
74
|
-
|
|
75
|
-
return hk_dict
|
|
76
|
-
|
|
77
|
-
def quit(self):
|
|
78
|
-
self.synoptics.disconnect_cs()
|