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
egse/powermeter/ni/cdaq9184.yaml
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.powermeter.ni.cdaq9184.cdaq9184Interface
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.powermeter.ni.cdaq9184.cdaq9184Proxy
|
|
6
|
-
|
|
7
|
-
ControlServerClass:
|
|
8
|
-
egse.powermeter.ni.cdaq9184_cs.cdaq9184ControlServer
|
|
9
|
-
|
|
10
|
-
ControlServer:
|
|
11
|
-
egse.powermeter.ni.cdaq9184_cs
|
|
12
|
-
|
|
13
|
-
UserInterface:
|
|
14
|
-
egse.powermeter.ni.cdaq9184_ui
|
|
15
|
-
|
|
16
|
-
Commands:
|
|
17
|
-
|
|
18
|
-
# Each of these groups is parsed and used on both the server and the client side.
|
|
19
|
-
# The group name (e.g. is_simulator) will be monkey patched in the Proxy class for the device or service.
|
|
20
|
-
# The other field are:
|
|
21
|
-
# description: Used by the doc_string method to generate a help string
|
|
22
|
-
# cmd: Command string that will eventually be send to the hardware controller for the
|
|
23
|
-
# device after the arguments have been filled.
|
|
24
|
-
# device_method: The name of the method to be called on the device class.
|
|
25
|
-
# These should all be defined by the base class for the device.
|
|
26
|
-
# This method should exist in the subclass of the CommandProtocol base class.
|
|
27
|
-
|
|
28
|
-
# Definition of the the DeviceInterface
|
|
29
|
-
|
|
30
|
-
disconnect:
|
|
31
|
-
description: Disconnect from the NI device controller. This command will be send to the
|
|
32
|
-
NI Control Server which will then disconnect from the hardware controller.
|
|
33
|
-
This command doesn't affect the ZeroMQ connection of this Proxy to the
|
|
34
|
-
control server. Use the service command ``disconnect_cs()`` to disconnect
|
|
35
|
-
from the control server.
|
|
36
|
-
|
|
37
|
-
connect:
|
|
38
|
-
description: Connect the temperature hardware controller
|
|
39
|
-
|
|
40
|
-
reconnect:
|
|
41
|
-
description: Reconnect the temperature hardware controller.
|
|
42
|
-
|
|
43
|
-
This command will force a disconnect and then try to re-connect to the controller.
|
|
44
|
-
|
|
45
|
-
is_simulator:
|
|
46
|
-
description: Ask if the control server is a simulator instead of the real cdaq9184Controller class.
|
|
47
|
-
returns: bool | True if the far end is a simulator instead of the real hardware
|
|
48
|
-
|
|
49
|
-
is_connected:
|
|
50
|
-
description: Check if the SRS Hardware Controller is connected.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
# Definition of the device commands
|
|
54
|
-
info:
|
|
55
|
-
description: Returns basic information about the device, its name, firmwre version etc.
|
|
56
|
-
returns: str
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
read_values:
|
|
60
|
-
description: Reads the timestamped signals of the CDAQ9184. Returns all the values with date.
|
|
61
|
-
returns: list
|
|
62
|
-
|
|
63
|
-
read_photodiodes:
|
|
64
|
-
description: À MODIFIER Returns the timestamped and voltage signals from the photodidodes connected to the NI9239.
|
|
65
|
-
Returns 2 lists in a tuple, 1st list with mean and 2nd with standard deviation.
|
|
66
|
-
returns: dict
|
|
67
|
-
|
|
68
|
-
read_temperatures:
|
|
69
|
-
description: Returns the timestamped and temperature signals from the PT1000 connected to the NI9226
|
|
70
|
-
Returns a dictionary with 2 elements which are lists, 1st list with mean temperature
|
|
71
|
-
and 2nd with standard deviation temperature.
|
|
72
|
-
returns: dict
|
|
73
|
-
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import click
|
|
3
|
-
import logging
|
|
4
|
-
import sys
|
|
5
|
-
|
|
6
|
-
import zmq
|
|
7
|
-
|
|
8
|
-
from egse.control import ControlServer
|
|
9
|
-
from egse.control import is_control_server_active
|
|
10
|
-
|
|
11
|
-
from egse.powermeter.ni.cdaq9184 import cdaq9184Proxy
|
|
12
|
-
from egse.powermeter.ni.cdaq9184_protocol import cdaq9184Protocol
|
|
13
|
-
from egse.settings import Settings
|
|
14
|
-
from egse.zmq_ser import connect_address
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger(__name__)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
CTRL_SETTINGS = Settings.load("NI Control Server")
|
|
21
|
-
|
|
22
|
-
def is_cdaq9184_cs_active(timeout: float = 0.5):
|
|
23
|
-
"""Check if the CDAQ9184 Control Server is running.
|
|
24
|
-
|
|
25
|
-
Args:
|
|
26
|
-
timeout (float): timeout when waiting for a reply [seconds, default=0.5]
|
|
27
|
-
Returns:
|
|
28
|
-
True if the control server is running and replied with the expected answer.
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
endpoint = connect_address(
|
|
32
|
-
CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.HOSTNAME, CTRL_SETTINGS.CDAQ9184.get("COMMANDING_PORT")
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
return is_control_server_active(endpoint, timeout)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class cdaq9184ControlServer(ControlServer):
|
|
39
|
-
"""
|
|
40
|
-
cdaq9184ControlServer - Command and monitor the NI CDAQ 9184 Controllers.
|
|
41
|
-
This class works as a command and monitoring server to control the Temp Controller remotely.
|
|
42
|
-
The sever binds to the following ZeroMQ sockets:
|
|
43
|
-
* a REQ-REP socket that can be used as a command server. Any client can connect and
|
|
44
|
-
send a command to the Temp controller.
|
|
45
|
-
* a PUB-SUP socket that serves as a monitoring server. It will send out Temp status
|
|
46
|
-
information to all the connected clients every DELAY seconds.
|
|
47
|
-
"""
|
|
48
|
-
|
|
49
|
-
def __init__(self):
|
|
50
|
-
super().__init__()
|
|
51
|
-
|
|
52
|
-
self.device_protocol = cdaq9184Protocol(self)
|
|
53
|
-
|
|
54
|
-
self.logger.debug(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
55
|
-
|
|
56
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
57
|
-
|
|
58
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
59
|
-
|
|
60
|
-
def get_communication_protocol(self):
|
|
61
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
62
|
-
|
|
63
|
-
def get_commanding_port(self):
|
|
64
|
-
return CTRL_SETTINGS.CDAQ9184.get("COMMANDING_PORT")
|
|
65
|
-
|
|
66
|
-
def get_service_port(self):
|
|
67
|
-
return CTRL_SETTINGS.CDAQ9184.get("SERVICE_PORT")
|
|
68
|
-
|
|
69
|
-
def get_monitoring_port(self):
|
|
70
|
-
return CTRL_SETTINGS.CDAQ9184.get("MONITORING_PORT")
|
|
71
|
-
|
|
72
|
-
def get_storage_mnemonic(self):
|
|
73
|
-
try:
|
|
74
|
-
return CTRL_SETTINGS.CDAQ9184.get("STORAGE_MNEMONIC")
|
|
75
|
-
except AttributeError:
|
|
76
|
-
return "DAS-CDAQ-PHOTODIODES-EMPTY"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
@click.group()
|
|
80
|
-
def cli():
|
|
81
|
-
pass
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
@cli.command()
|
|
85
|
-
@click.option("--simulator", "--sim", is_flag=True, help="Start the NI CDAQ9184 Simulator as the backend.")
|
|
86
|
-
def start(simulator):
|
|
87
|
-
"""Start the NI CDAQ9184 Control Server."""
|
|
88
|
-
|
|
89
|
-
if simulator:
|
|
90
|
-
|
|
91
|
-
Settings.set_simulation_mode(True)
|
|
92
|
-
|
|
93
|
-
try:
|
|
94
|
-
|
|
95
|
-
controller = cdaq9184ControlServer()
|
|
96
|
-
controller.serve()
|
|
97
|
-
|
|
98
|
-
except KeyboardInterrupt:
|
|
99
|
-
|
|
100
|
-
print("Shutdown requested...exiting")
|
|
101
|
-
|
|
102
|
-
except SystemExit as exit_code:
|
|
103
|
-
|
|
104
|
-
print("System Exit with code {}.".format(exit_code))
|
|
105
|
-
sys.exit(exit_code)
|
|
106
|
-
|
|
107
|
-
except Exception:
|
|
108
|
-
|
|
109
|
-
logger.exception("Cannot start the NI CDAQ9184Control Server")
|
|
110
|
-
|
|
111
|
-
# The above line does exactly the same as the traceback, but on the logger
|
|
112
|
-
# import traceback
|
|
113
|
-
# traceback.print_exc(file=sys.stdout)
|
|
114
|
-
|
|
115
|
-
return 0
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
@cli.command()
|
|
119
|
-
def stop():
|
|
120
|
-
"""Send a 'quit_server' command to the NI CDAQ9184 Control Server."""
|
|
121
|
-
|
|
122
|
-
with cdaq9184Proxy() as proxy:
|
|
123
|
-
|
|
124
|
-
sp = proxy.get_service_proxy()
|
|
125
|
-
sp.quit_server()
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if __name__ == "__main__":
|
|
129
|
-
|
|
130
|
-
sys.exit(cli())
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
The device interface for the NICDAQ 9184 Controller that will be used at IAS for TVAC the PLATO Cameras.
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
import logging
|
|
7
|
-
import time
|
|
8
|
-
import socket
|
|
9
|
-
import struct
|
|
10
|
-
from typing import List
|
|
11
|
-
|
|
12
|
-
from egse.settings import Settings
|
|
13
|
-
from egse.exceptions import DeviceNotFoundError
|
|
14
|
-
from egse.device import DeviceConnectionError, DeviceError
|
|
15
|
-
from egse.device import DeviceConnectionInterface, DeviceTransport, DeviceTimeoutError
|
|
16
|
-
from egse.command import ClientServerCommand
|
|
17
|
-
|
|
18
|
-
logger = logging.getLogger(__name__)
|
|
19
|
-
|
|
20
|
-
ctrl_settings = Settings.load("NI Controller")
|
|
21
|
-
|
|
22
|
-
DEVICE_NAME = "CDAQ9184"
|
|
23
|
-
|
|
24
|
-
READ_TIMEOUT = 1
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class cdaq9184Error(Exception):
|
|
28
|
-
"""Base exception for all ptc10 errors."""
|
|
29
|
-
pass
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class cdaq9184Command(ClientServerCommand):
|
|
33
|
-
def get_cmd_string(self, *args, **kwargs) -> str:
|
|
34
|
-
out = super().get_cmd_string(*args, **kwargs)
|
|
35
|
-
return out + "\n"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class cdaq9184SocketInterface(DeviceConnectionInterface, DeviceTransport):
|
|
39
|
-
"""Defines the low-level interface to the NI CDAQ919 Controller.
|
|
40
|
-
Connects to the Labview interface via TCP/IP socket"""
|
|
41
|
-
|
|
42
|
-
def __init__(self, hostname=None, port=None):
|
|
43
|
-
self.hostname = ctrl_settings.HOSTNAME if hostname is None else hostname
|
|
44
|
-
self.port = ctrl_settings.CDAQ9174_PORT if port is None else port
|
|
45
|
-
self.sock = None
|
|
46
|
-
|
|
47
|
-
self.is_connection_open = False
|
|
48
|
-
|
|
49
|
-
def connect(self, hostname: str):
|
|
50
|
-
# Sanity checks
|
|
51
|
-
if self.is_connection_open:
|
|
52
|
-
logger.warning(f"{DEVICE_NAME}: trying to connect to an already connected socket.")
|
|
53
|
-
return
|
|
54
|
-
if self.hostname in (None, ""):
|
|
55
|
-
raise ValueError(f"{DEVICE_NAME}: hostname is not initialized.")
|
|
56
|
-
|
|
57
|
-
if self.port in (None, 0):
|
|
58
|
-
raise ValueError(f"{DEVICE_NAME}: port number is not initialized.")
|
|
59
|
-
|
|
60
|
-
try:
|
|
61
|
-
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
62
|
-
_id = self.get_id()
|
|
63
|
-
logger.warning(f"Connected to: {_id}")
|
|
64
|
-
|
|
65
|
-
except socket.error as e_socket:
|
|
66
|
-
raise DeviceConnectionError(DEVICE_NAME, "Failed to create socket.") from e_socket
|
|
67
|
-
# Asking for instrument description
|
|
68
|
-
|
|
69
|
-
# We set a timeout of 3 sec before connecting and reset to None
|
|
70
|
-
# (=blocking) after the connect. The reason for this is because when no
|
|
71
|
-
# device is available, e.g during testing, the timeout will take about
|
|
72
|
-
# two minutes which is way too long. It needs to be evaluated if this
|
|
73
|
-
# approach is acceptable and not causing problems during production.
|
|
74
|
-
|
|
75
|
-
try:
|
|
76
|
-
logger.debug(f'Connecting a socket to host "{self.hostname}" using port {self.port}')
|
|
77
|
-
self.sock.settimeout(3)
|
|
78
|
-
self.sock.connect((self.hostname, self.port))
|
|
79
|
-
self.sock.settimeout(None)
|
|
80
|
-
except ConnectionRefusedError as exc:
|
|
81
|
-
raise DeviceConnectionError(
|
|
82
|
-
DEVICE_NAME, f"Connection refused to {self.hostname}:{self.port}."
|
|
83
|
-
) from exc
|
|
84
|
-
except TimeoutError as exc:
|
|
85
|
-
raise DeviceTimeoutError(
|
|
86
|
-
DEVICE_NAME, f"Connection to {self.hostname}:{self.port} timed out."
|
|
87
|
-
) from exc
|
|
88
|
-
except socket.gaierror as exc:
|
|
89
|
-
raise DeviceConnectionError(
|
|
90
|
-
DEVICE_NAME, f"socket address info error for {self.hostname}"
|
|
91
|
-
) from exc
|
|
92
|
-
except socket.herror as exc:
|
|
93
|
-
raise DeviceConnectionError(
|
|
94
|
-
DEVICE_NAME, f"socket host address error for {self.hostname}"
|
|
95
|
-
) from exc
|
|
96
|
-
except socket.timeout as exc:
|
|
97
|
-
raise DeviceTimeoutError(
|
|
98
|
-
DEVICE_NAME, f"socket timeout error for {self.hostname}:{self.port}"
|
|
99
|
-
) from exc
|
|
100
|
-
except OSError as exc:
|
|
101
|
-
raise DeviceConnectionError(DEVICE_NAME, f"OSError caught ({exc}).") from exc
|
|
102
|
-
|
|
103
|
-
self.is_connection_open = True
|
|
104
|
-
|
|
105
|
-
if not self.is_connected():
|
|
106
|
-
raise DeviceConnectionError(
|
|
107
|
-
DEVICE_NAME, "Device is not connected, check logging messages for the cause."
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
def disconnect(self):
|
|
111
|
-
"""
|
|
112
|
-
Disconnects from the device
|
|
113
|
-
Raises:
|
|
114
|
-
DeviceConnectionError when the connection has not been closed correctly
|
|
115
|
-
|
|
116
|
-
"""
|
|
117
|
-
try:
|
|
118
|
-
if self.is_connection_open:
|
|
119
|
-
logger.debug(f"Disconnecting from {self.hostname}")
|
|
120
|
-
self.sock.close()
|
|
121
|
-
self.is_connection_open = False
|
|
122
|
-
except Exception as e_exc:
|
|
123
|
-
raise DeviceConnectionError(
|
|
124
|
-
DEVICE_NAME, f"Could not close socket to {self.hostname}") from e_exc
|
|
125
|
-
|
|
126
|
-
def is_connected(self):
|
|
127
|
-
"""Return True if the device is connected."""
|
|
128
|
-
if not self.is_connection_open:
|
|
129
|
-
return False
|
|
130
|
-
return True
|
|
131
|
-
|
|
132
|
-
def get_response(self, cmd_string):
|
|
133
|
-
pass
|
|
134
|
-
|
|
135
|
-
def get_id(self):
|
|
136
|
-
return DEVICE_NAME
|
|
137
|
-
|
|
138
|
-
def write(self, command: str):
|
|
139
|
-
try:
|
|
140
|
-
#logger.info(f"{command=}")
|
|
141
|
-
self.sock.sendall(command.encode())
|
|
142
|
-
|
|
143
|
-
except socket.timeout as e_timeout:
|
|
144
|
-
raise DeviceTimeoutError(DEVICE_NAME, "Socket timeout error") from e_timeout
|
|
145
|
-
except socket.error as e_socket:
|
|
146
|
-
# Interpret any socket-related error as a connection error
|
|
147
|
-
raise DeviceConnectionError(DEVICE_NAME, "Socket communication error.") from e_socket
|
|
148
|
-
except AttributeError:
|
|
149
|
-
if not self.is_connection_open:
|
|
150
|
-
msg = "The CDAQ9184 is not connected, use the connect() method."
|
|
151
|
-
raise DeviceConnectionError(DEVICE_NAME, msg)
|
|
152
|
-
raise
|
|
153
|
-
|
|
154
|
-
def read(self) -> List:
|
|
155
|
-
# Set a timeout of READ_TIMEOUT to the socket.recv
|
|
156
|
-
saved_timeout = self.sock.gettimeout()
|
|
157
|
-
self.sock.settimeout(READ_TIMEOUT)
|
|
158
|
-
try:
|
|
159
|
-
# Extracts the msg size from 4 bytes sent by Labview - mind the encoding. The number
|
|
160
|
-
# reprensets the number of bytes of data
|
|
161
|
-
size = struct.unpack('i', self.sock.recv(4))[0]
|
|
162
|
-
data = self.sock.recv(size)
|
|
163
|
-
except socket.timeout as e_timeout:
|
|
164
|
-
logger.warning(f"Socket timeout error from {e_timeout}")
|
|
165
|
-
return b"\r\n"
|
|
166
|
-
except TimeoutError as exc:
|
|
167
|
-
logger.warning(f"Socket timeout error: {exc}")
|
|
168
|
-
return b"\r\n"
|
|
169
|
-
finally:
|
|
170
|
-
self.sock.settimeout(saved_timeout)
|
|
171
|
-
|
|
172
|
-
#logger.info(f"Total number of bytes received from the cdaq 9184 is {size}")
|
|
173
|
-
|
|
174
|
-
data = data.decode("ascii")
|
|
175
|
-
data = data.replace("\x00", " ")
|
|
176
|
-
data = data.replace("\x08", " ")
|
|
177
|
-
data = data.replace("\n", " ")
|
|
178
|
-
data = data.replace(",", ".")
|
|
179
|
-
data = data.replace("\x0c", ",")
|
|
180
|
-
data = data.replace("\r", ",")
|
|
181
|
-
data = data.replace("\x04", ",")
|
|
182
|
-
data = data.replace("\x12", ",")
|
|
183
|
-
data = data.replace("\x0e", ",")
|
|
184
|
-
data = data.replace(" ", ",")
|
|
185
|
-
data = data.replace("0^", "E")
|
|
186
|
-
data = data.split(",")
|
|
187
|
-
|
|
188
|
-
data = [element.strip() for element in data]
|
|
189
|
-
|
|
190
|
-
# The first element of data is "#" so I delete it.
|
|
191
|
-
# But to avoid to delete a relevant value I check if this unwanted element is well in data before deleting.
|
|
192
|
-
if data[0] == "#":
|
|
193
|
-
del data[0]
|
|
194
|
-
|
|
195
|
-
return data
|
|
196
|
-
|
|
197
|
-
def trans(self, cmd: str) -> List:
|
|
198
|
-
self.write(cmd)
|
|
199
|
-
response = self.read()
|
|
200
|
-
return response
|
|
201
|
-
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import datetime
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
from egse.control import ControlServer
|
|
6
|
-
from egse.powermeter.ni.cdaq9184 import cdaq9184Controller, cdaq9184Simulator, cdaq9184Interface
|
|
7
|
-
from egse.powermeter.ni.cdaq9184_devif import cdaq9184Command
|
|
8
|
-
|
|
9
|
-
from egse.protocol import CommandProtocol
|
|
10
|
-
from egse.device import DeviceConnectionState
|
|
11
|
-
from egse.settings import Settings
|
|
12
|
-
from egse.system import format_datetime
|
|
13
|
-
from egse.zmq_ser import bind_address
|
|
14
|
-
|
|
15
|
-
COMMAND_SETTINGS = Settings.load(filename="cdaq9184.yaml")
|
|
16
|
-
logger = logging.getLogger(__name__)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class cdaq9184Protocol(CommandProtocol):
|
|
21
|
-
def __init__(self, control_server: ControlServer):
|
|
22
|
-
super().__init__()
|
|
23
|
-
self.control_server = control_server
|
|
24
|
-
|
|
25
|
-
if Settings.simulation_mode():
|
|
26
|
-
self.cdaq = cdaq9184Simulator()
|
|
27
|
-
else:
|
|
28
|
-
self.cdaq = cdaq9184Controller()
|
|
29
|
-
|
|
30
|
-
self.load_commands(
|
|
31
|
-
COMMAND_SETTINGS.Commands, cdaq9184Command, cdaq9184Interface
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
self.build_device_method_lookup_table(self.cdaq)
|
|
35
|
-
|
|
36
|
-
def get_bind_address(self):
|
|
37
|
-
return bind_address(
|
|
38
|
-
self.control_server.get_communication_protocol(),
|
|
39
|
-
self.control_server.get_commanding_port(),
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
def get_status(self):
|
|
43
|
-
return super().get_status()
|
|
44
|
-
|
|
45
|
-
def get_housekeeping(self) -> dict:
|
|
46
|
-
|
|
47
|
-
result = dict()
|
|
48
|
-
return result
|