cgse 2023.38.0__py3-none-any.whl → 2024.1.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +77 -0
- cgse-2024.1.3.dist-info/METADATA +41 -0
- cgse-2024.1.3.dist-info/RECORD +5 -0
- {cgse-2023.38.0.dist-info → cgse-2024.1.3.dist-info}/WHEEL +1 -2
- cgse-2023.38.0.dist-info/COPYING +0 -674
- cgse-2023.38.0.dist-info/COPYING.LESSER +0 -165
- cgse-2023.38.0.dist-info/METADATA +0 -144
- cgse-2023.38.0.dist-info/RECORD +0 -649
- cgse-2023.38.0.dist-info/entry_points.txt +0 -75
- cgse-2023.38.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5235
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -626
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -912
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -234
- egse/alert/alertman_ui.py +0 -603
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -130
- egse/alert/gsm/beaglebone_protocol.py +0 -48
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -129
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1015
- egse/confman/confman.yaml +0 -67
- egse/confman/confman_cs.py +0 -239
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -442
- egse/coordinates/__init__.py +0 -531
- egse/coordinates/avoidance.py +0 -103
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -120
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -195
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1247
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -415
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2681
- egse/dpu/ccd_ui.py +0 -508
- egse/dpu/dpu.py +0 -786
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -668
- egse/dpu/fitsgen.py +0 -2077
- egse/dpu/fitsgen_test.py +0 -752
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/constants.py +0 -220
- egse/dsi/esl.py +0 -870
- egse/dsi/rmap.py +0 -1042
- egse/dsi/rmapci.py +0 -37
- egse/dsi/spw.py +0 -154
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -258
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -28
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -51
- egse/fdir/fdir_manager_controller.py +0 -228
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -25
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -37
- egse/fdir/fdir_remote_controller.py +0 -50
- egse/fdir/fdir_remote_cs.py +0 -97
- egse/fdir/fdir_remote_interface.py +0 -14
- egse/fdir/fdir_remote_popup.py +0 -31
- egse/fee/__init__.py +0 -114
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/fee.py +0 -631
- egse/fee/feesim.py +0 -750
- egse/fee/n_fee_hk.py +0 -761
- egse/fee/nfee.py +0 -187
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -24
- egse/filterwheel/eksma/fw8smc4.py +0 -661
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -81
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -111
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1068
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -712
- egse/fov/fov_ui.py +0 -861
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -135
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1281
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -588
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -138
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -196
- egse/hexapod/symetrie/puna_protocol.py +0 -131
- egse/hexapod/symetrie/puna_ui.py +0 -434
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -415
- egse/hexapod/symetrie/zonda_protocol.py +0 -119
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -765
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -69
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/macOS/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/macOS/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -73
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -98
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -163
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -811
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -603
- egse/proxy.py +0 -522
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -675
- egse/resource.py +0 -333
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -212
- egse/services.yaml +0 -51
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1180
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -69
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1479
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -247
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -193
- egse/stages/arun/smd3.py +0 -111
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -472
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -904
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -111
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1004
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -72
- egse/storage/storage_cs.py +0 -214
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -412
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1408
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -874
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -177
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -116
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -99
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -117
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -101
- egse/tempcontrol/beaglebone/beaglebone.py +0 -342
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -135
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -681
- egse/tempcontrol/digalox/digalox.py +0 -107
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -112
- egse/tempcontrol/digalox/digalox_protocol.py +0 -55
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -78
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -73
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -389
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -727
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -875
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -118
- egse/tempcontrol/srs/ptc10_protocol.py +0 -42
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -164
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -193
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -92
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -128
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -102
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -83
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -316
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -704
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -39
- egse/vacuum/pfeiffer/tc400.py +0 -113
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -140
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -24
- egse/vacuum/pfeiffer/tpg261.py +0 -81
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -60
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -24
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -44
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/create_hdf5_report.py +0 -295
- scripts/csl_model.py +0 -436
- scripts/csl_restore_setup.py +0 -230
- scripts/export-grafana-dashboards.py +0 -50
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -59
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -11
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -64
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -38
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
egse/stages/huber/smc9300.yaml
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.stages.huber.HuberSMC9300Interfcae
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.stages.huber.HuberSMC9300Proxy
|
|
6
|
-
|
|
7
|
-
ControlServerClass:
|
|
8
|
-
egse.stages.huber.HuberSMC9300ControlServer
|
|
9
|
-
|
|
10
|
-
ControlServer:
|
|
11
|
-
egse.stages.huber.smc9300_cs
|
|
12
|
-
|
|
13
|
-
UserInterface:
|
|
14
|
-
egse.stages.huber.smc9300_ui
|
|
15
|
-
|
|
16
|
-
Commands:
|
|
17
|
-
|
|
18
|
-
# Each of these groups is parsed and used on both the server and the client side.
|
|
19
|
-
#
|
|
20
|
-
# The group name (e.g. is_simulator) will be monkey patched in the Proxy class for the device
|
|
21
|
-
# or service.
|
|
22
|
-
#
|
|
23
|
-
# The other field are:
|
|
24
|
-
# description: Used by the doc_string method to generate a help string
|
|
25
|
-
# cmd: Command string that will eventually be send to the hardware controller for
|
|
26
|
-
# the device. This cmd string is also used at the client side to parse and
|
|
27
|
-
# validate the arguments.
|
|
28
|
-
# device_method: The name of the method to be called on the device class.
|
|
29
|
-
# These should all be defined by the interface class for the device, i.e.
|
|
30
|
-
# HuberSMC9300Interface in this case.
|
|
31
|
-
# If device_method is not given, the command name (group name) will be used
|
|
32
|
-
# for the device_method.
|
|
33
|
-
# response: The name of the method to be called from the device protocol.
|
|
34
|
-
# This method should exist in the subclass of the CommandProtocol base class,
|
|
35
|
-
# i.e. in this case it will be the HuberSMC9300Protocol class.
|
|
36
|
-
# If response is not given the method `handle_device_method()` will be called.
|
|
37
|
-
|
|
38
|
-
# Definition of the DeviceInterface
|
|
39
|
-
|
|
40
|
-
is_simulator:
|
|
41
|
-
description: Ask if the connected class is a simulator instead of the real device Controller class.
|
|
42
|
-
returns: bool | True if the far end is a simulator instead of the real hardware
|
|
43
|
-
|
|
44
|
-
is_connected:
|
|
45
|
-
description: Check if the HUBER Stage Controller is connected.
|
|
46
|
-
|
|
47
|
-
connect:
|
|
48
|
-
description: Connect the HUBER hardware controller.
|
|
49
|
-
|
|
50
|
-
reconnect:
|
|
51
|
-
description: Reconnect the HUBER hardware controller.
|
|
52
|
-
|
|
53
|
-
This command will force a disconnect and then try to re-connect to the controller.
|
|
54
|
-
|
|
55
|
-
disconnect:
|
|
56
|
-
description: Disconnect from the Huber hardware controller.
|
|
57
|
-
|
|
58
|
-
This command will be send to the Huber Control Server which will then
|
|
59
|
-
disconnect from the hardware controller.
|
|
60
|
-
|
|
61
|
-
This command does not affect the ZeroMQ connection of the Proxy to the
|
|
62
|
-
control server. Use the service command `disconnect_cs()` to disconnect
|
|
63
|
-
from the control server.
|
egse/stages/huber/smc9300_cs.py
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
The HUBER SMC9300 control server connects to the HUBER Hardware Controller.
|
|
3
|
-
|
|
4
|
-
Start the control server from the terminal as follows:
|
|
5
|
-
|
|
6
|
-
$ smc9300_cs start-bg
|
|
7
|
-
|
|
8
|
-
or when you don't have the device available, start the control server in simulator mode. That
|
|
9
|
-
will make the control server connect to a device software simulator:
|
|
10
|
-
|
|
11
|
-
$ smc9300_cs start --sim
|
|
12
|
-
|
|
13
|
-
Please note that software simulators are intended for simple test purposes and will not simulate
|
|
14
|
-
all device behavior correctly, e.g. timing, error conditions, etc.
|
|
15
|
-
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
import logging
|
|
19
|
-
import multiprocessing
|
|
20
|
-
|
|
21
|
-
import rich
|
|
22
|
-
|
|
23
|
-
from egse.control import is_control_server_active
|
|
24
|
-
from egse.zmq_ser import connect_address
|
|
25
|
-
|
|
26
|
-
multiprocessing.current_process().name = "smc9300_cs"
|
|
27
|
-
|
|
28
|
-
import sys
|
|
29
|
-
|
|
30
|
-
import click
|
|
31
|
-
import invoke
|
|
32
|
-
import zmq
|
|
33
|
-
from prometheus_client import start_http_server
|
|
34
|
-
|
|
35
|
-
from egse.control import ControlServer
|
|
36
|
-
from egse.settings import Settings
|
|
37
|
-
from egse.stages.huber.smc9300 import HuberSMC9300Proxy
|
|
38
|
-
from egse.stages.huber.smc9300_protocol import HuberSMC9300Protocol
|
|
39
|
-
|
|
40
|
-
logger = logging.getLogger(__name__)
|
|
41
|
-
|
|
42
|
-
CTRL_SETTINGS = Settings.load("Huber Control Server")
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class HuberSMC9300ControlServer(ControlServer):
|
|
46
|
-
"""
|
|
47
|
-
HuberSMC9300ControlServer - Command and monitor the HUBER hardware stages.
|
|
48
|
-
|
|
49
|
-
This class works as a command and monitoring server to control the HUBER stages remotely.
|
|
50
|
-
|
|
51
|
-
The sever binds to the following ZeroMQ sockets:
|
|
52
|
-
|
|
53
|
-
* a REQ-REP socket that can be used as a command server. Any client can connect and
|
|
54
|
-
send a command to the Huber hardware controller.
|
|
55
|
-
|
|
56
|
-
* a PUB-SUP socket that serves as a monitoring server. It will send out HUBER status
|
|
57
|
-
information to all the connected clients every DELAY seconds.
|
|
58
|
-
|
|
59
|
-
"""
|
|
60
|
-
|
|
61
|
-
def __init__(self):
|
|
62
|
-
super().__init__()
|
|
63
|
-
|
|
64
|
-
self.device_protocol = HuberSMC9300Protocol(self)
|
|
65
|
-
|
|
66
|
-
self.logger.info(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
67
|
-
|
|
68
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
69
|
-
|
|
70
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
71
|
-
|
|
72
|
-
self.set_delay(CTRL_SETTINGS.ST_DELAY)
|
|
73
|
-
self.set_hk_delay(CTRL_SETTINGS.HK_DELAY)
|
|
74
|
-
|
|
75
|
-
def get_communication_protocol(self):
|
|
76
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
77
|
-
|
|
78
|
-
def get_commanding_port(self):
|
|
79
|
-
return CTRL_SETTINGS.COMMANDING_PORT
|
|
80
|
-
|
|
81
|
-
def get_service_port(self):
|
|
82
|
-
return CTRL_SETTINGS.SERVICE_PORT
|
|
83
|
-
|
|
84
|
-
def get_monitoring_port(self):
|
|
85
|
-
return CTRL_SETTINGS.MONITORING_PORT
|
|
86
|
-
|
|
87
|
-
def get_storage_mnemonic(self):
|
|
88
|
-
try:
|
|
89
|
-
return CTRL_SETTINGS.STORAGE_MNEMONIC
|
|
90
|
-
except AttributeError:
|
|
91
|
-
return "SMC9300"
|
|
92
|
-
|
|
93
|
-
def before_serve(self):
|
|
94
|
-
start_http_server(CTRL_SETTINGS.METRICS_PORT)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
@click.group()
|
|
98
|
-
def cli():
|
|
99
|
-
pass
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
@cli.command()
|
|
103
|
-
@click.option(
|
|
104
|
-
"--simulator", "--sim", is_flag=True, help="Start the Huber Stages Simulator as the backend."
|
|
105
|
-
)
|
|
106
|
-
def start(simulator):
|
|
107
|
-
"""Start the Huber SMC9300 Stages Control Server."""
|
|
108
|
-
|
|
109
|
-
if simulator:
|
|
110
|
-
|
|
111
|
-
Settings.set_simulation_mode(True)
|
|
112
|
-
|
|
113
|
-
try:
|
|
114
|
-
|
|
115
|
-
controller = HuberSMC9300ControlServer()
|
|
116
|
-
controller.serve()
|
|
117
|
-
|
|
118
|
-
except KeyboardInterrupt:
|
|
119
|
-
|
|
120
|
-
print("Shutdown requested...exiting")
|
|
121
|
-
|
|
122
|
-
except SystemExit as exit_code:
|
|
123
|
-
|
|
124
|
-
print("System Exit with code {}.".format(exit_code))
|
|
125
|
-
sys.exit(exit_code)
|
|
126
|
-
|
|
127
|
-
except Exception:
|
|
128
|
-
|
|
129
|
-
logger.exception("Cannot start the Huber SMC9300 Stages Control Server")
|
|
130
|
-
|
|
131
|
-
return 0
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
@cli.command()
|
|
135
|
-
@click.option("--simulator", "--sim", is_flag=True,
|
|
136
|
-
help="Start the Huber SMC9300 Simulator as the backend.")
|
|
137
|
-
def start_bg(simulator):
|
|
138
|
-
"""Start the Huber SMC9300 Stages Control Server in the background."""
|
|
139
|
-
sim = "--simulator" if simulator else ""
|
|
140
|
-
invoke.run(f"smc9300_cs start {sim}", disown=True)
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
@cli.command()
|
|
144
|
-
def stop():
|
|
145
|
-
"""Send a 'quit_server' command to the Huber SMC9300 Stages Control Server."""
|
|
146
|
-
|
|
147
|
-
with HuberSMC9300Proxy() as proxy:
|
|
148
|
-
|
|
149
|
-
sp = proxy.get_service_proxy()
|
|
150
|
-
sp.quit_server()
|
|
151
|
-
|
|
152
|
-
@cli.command()
|
|
153
|
-
def status():
|
|
154
|
-
"""Request status information from the Control Server."""
|
|
155
|
-
|
|
156
|
-
protocol = CTRL_SETTINGS.PROTOCOL
|
|
157
|
-
hostname = CTRL_SETTINGS.HOSTNAME
|
|
158
|
-
port = CTRL_SETTINGS.COMMANDING_PORT
|
|
159
|
-
|
|
160
|
-
endpoint = connect_address(protocol, hostname, port)
|
|
161
|
-
|
|
162
|
-
if is_control_server_active(endpoint):
|
|
163
|
-
rich.print(f"HUBER Stages: [green]active")
|
|
164
|
-
with HuberSMC9300Proxy() as stages:
|
|
165
|
-
sim = stages.is_simulator()
|
|
166
|
-
connected = stages.is_connected()
|
|
167
|
-
ip = stages.get_ip_address()
|
|
168
|
-
rich.print(f"mode: {'simulator' if sim else 'device'}{' not' if not connected else ''} connected")
|
|
169
|
-
rich.print(f"hostname: {ip}")
|
|
170
|
-
else:
|
|
171
|
-
rich.print(f"HUBER Stages: [red]not active")
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
if __name__ == "__main__":
|
|
175
|
-
|
|
176
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
177
|
-
|
|
178
|
-
sys.exit(cli())
|
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
HUBER Device Interface to the SMC 9300 motor controller.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
import socket
|
|
7
|
-
import threading
|
|
8
|
-
import time
|
|
9
|
-
|
|
10
|
-
from egse.command import ClientServerCommand
|
|
11
|
-
from egse.device import DeviceConnectionError
|
|
12
|
-
from egse.device import DeviceConnectionInterface
|
|
13
|
-
from egse.device import DeviceTimeoutError
|
|
14
|
-
from egse.device import DeviceTransport
|
|
15
|
-
from egse.settings import Settings
|
|
16
|
-
from egse.system import Timer
|
|
17
|
-
from egse.system import format_datetime
|
|
18
|
-
|
|
19
|
-
# Explicitly set the module name instead of __name__. When module is executed instead of imported
|
|
20
|
-
# __name__ will result in __main__ and no logging to zmq will be done.
|
|
21
|
-
|
|
22
|
-
MODULE_LOGGER = logging.getLogger("egse.stages.huber.smc9300_devif")
|
|
23
|
-
|
|
24
|
-
READ_TIMEOUT = 10.0 # seconds
|
|
25
|
-
WRITE_TIMEOUT = 1.0 # seconds
|
|
26
|
-
CONNECT_TIMEOUT = 3.0 # seconds
|
|
27
|
-
|
|
28
|
-
HUBER_SETTINGS = Settings.load("Huber Controller")
|
|
29
|
-
DEVICE_NAME = "SMC9300"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class HuberError(Exception):
|
|
33
|
-
pass
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class HuberSMC9300Command(ClientServerCommand):
|
|
37
|
-
def get_cmd_string(self, *args, **kwargs) -> str:
|
|
38
|
-
out = super().get_cmd_string(*args, **kwargs)
|
|
39
|
-
return out + "\r\n"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class HuberSMC9300EthernetInterface(DeviceConnectionInterface, DeviceTransport):
|
|
43
|
-
"""
|
|
44
|
-
Defines the low-level interface to the HUBER stages controller.
|
|
45
|
-
|
|
46
|
-
Args:
|
|
47
|
-
hostname (str): the IP address or fully qualified hostname of the OGSE hardware
|
|
48
|
-
controller. The default is defined in the ``settings.yaml`` configuration file.
|
|
49
|
-
|
|
50
|
-
port (int): the IP port number to connect to. The default is defined in the
|
|
51
|
-
`settings.yaml` configuration file.
|
|
52
|
-
"""
|
|
53
|
-
def __init__(self, hostname: str = None, port: int = None):
|
|
54
|
-
|
|
55
|
-
super().__init__()
|
|
56
|
-
|
|
57
|
-
# Basic connection settings, loaded from the configuration YAML file
|
|
58
|
-
|
|
59
|
-
self.hostname = hostname or HUBER_SETTINGS.HOSTNAME
|
|
60
|
-
self.port = port or HUBER_SETTINGS.PORT
|
|
61
|
-
self.sock = None
|
|
62
|
-
|
|
63
|
-
# Access-to-the-connection semaphore. Use this to lock/unlock I/O access to the
|
|
64
|
-
# connection (whatever type it is) in child classes.
|
|
65
|
-
|
|
66
|
-
self.semaphore = threading.Semaphore()
|
|
67
|
-
|
|
68
|
-
self.is_connection_open = False
|
|
69
|
-
|
|
70
|
-
self._num_axes = HUBER_SETTINGS.NUMBER_OF_AXES
|
|
71
|
-
|
|
72
|
-
def connect(self):
|
|
73
|
-
"""
|
|
74
|
-
Connects the TCP socket to the device controller.
|
|
75
|
-
|
|
76
|
-
Returns:
|
|
77
|
-
None.
|
|
78
|
-
|
|
79
|
-
Raises:
|
|
80
|
-
ValueError when hostname or port number are not initialized properly.
|
|
81
|
-
|
|
82
|
-
DeviceConnectionError on any socket error except timeouts.
|
|
83
|
-
|
|
84
|
-
DeviceTimeoutError on a socket timeout.
|
|
85
|
-
"""
|
|
86
|
-
# Sanity checks
|
|
87
|
-
|
|
88
|
-
if self.is_connection_open:
|
|
89
|
-
MODULE_LOGGER.warning(
|
|
90
|
-
f"{DEVICE_NAME}: trying to connect to an already connected socket.")
|
|
91
|
-
return
|
|
92
|
-
|
|
93
|
-
if self.hostname in (None, ""):
|
|
94
|
-
raise ValueError(f"{DEVICE_NAME}: hostname is not initialized.")
|
|
95
|
-
|
|
96
|
-
if self.port in (None, 0):
|
|
97
|
-
raise ValueError(f"{DEVICE_NAME}: port number is not initialized.")
|
|
98
|
-
|
|
99
|
-
# Create a new socket instance
|
|
100
|
-
|
|
101
|
-
try:
|
|
102
|
-
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
103
|
-
|
|
104
|
-
# self.sock.setblocking(1)
|
|
105
|
-
|
|
106
|
-
# DON'T set a timeout on the socket, this will not result in the expected behavior.
|
|
107
|
-
#
|
|
108
|
-
# If the timeout is set, this will result in the following problem:
|
|
109
|
-
# DEBUG 234 huber.py send_direct_command: Sent out to HUBER: 'goto1:0.0\r\n'
|
|
110
|
-
# DEBUG 284 huber.py wait_until_axis_ready: Wait until axis 1 is ready...
|
|
111
|
-
# DEBUG 191 huber.py get_response: Sent out to HUBER: '?s1\r\n'
|
|
112
|
-
# DEBUG 198 huber.py get_response: Receiving data after cmd=''?s1\r\n''...
|
|
113
|
-
# WARNING 263 huber.py wait_for_response: Socket timeout error from timed out
|
|
114
|
-
# DEBUG 200 huber.py get_response: Received from HUBER: b'\r\n'
|
|
115
|
-
#
|
|
116
|
-
|
|
117
|
-
# self.sock.settimeout(3)
|
|
118
|
-
|
|
119
|
-
except socket.error as e_socket:
|
|
120
|
-
raise DeviceConnectionError(DEVICE_NAME, "Failed to create socket.") from e_socket
|
|
121
|
-
|
|
122
|
-
# Attempt to establish a connection to the remote host
|
|
123
|
-
|
|
124
|
-
# FIXME: Socket shall be closed on exception?
|
|
125
|
-
|
|
126
|
-
# We set a timeout of 3 sec before connecting and reset to None
|
|
127
|
-
# (=blocking) after the connect() method. The reason for this that when no
|
|
128
|
-
# HUBER SMC is available, e.g. during testing, the timeout will take about
|
|
129
|
-
# two minutes which is way too long. It needs to be evaluated if this
|
|
130
|
-
# approach is acceptable and not causing problems during production.
|
|
131
|
-
|
|
132
|
-
try:
|
|
133
|
-
MODULE_LOGGER.debug(
|
|
134
|
-
f'Connecting a socket to host "{self.hostname}" using port {self.port}')
|
|
135
|
-
self.sock.settimeout(CONNECT_TIMEOUT)
|
|
136
|
-
self.sock.connect((self.hostname, self.port))
|
|
137
|
-
self.sock.settimeout(None)
|
|
138
|
-
except ConnectionRefusedError as exc:
|
|
139
|
-
raise DeviceConnectionError(
|
|
140
|
-
DEVICE_NAME, f"Connection refused to {self.hostname}:{self.port}."
|
|
141
|
-
) from exc
|
|
142
|
-
except TimeoutError as exc:
|
|
143
|
-
raise DeviceTimeoutError(
|
|
144
|
-
DEVICE_NAME, f"Connection to {self.hostname}:{self.port} timed out."
|
|
145
|
-
) from exc
|
|
146
|
-
except socket.gaierror as exc:
|
|
147
|
-
raise DeviceConnectionError(
|
|
148
|
-
DEVICE_NAME, f"socket address info error for {self.hostname}"
|
|
149
|
-
) from exc
|
|
150
|
-
except socket.herror as exc:
|
|
151
|
-
raise DeviceConnectionError(
|
|
152
|
-
DEVICE_NAME, f"socket host address error for {self.hostname}"
|
|
153
|
-
) from exc
|
|
154
|
-
except socket.timeout as exc:
|
|
155
|
-
raise DeviceTimeoutError(
|
|
156
|
-
DEVICE_NAME, f"socket timeout error for {self.hostname}:{self.port}"
|
|
157
|
-
) from exc
|
|
158
|
-
except OSError as exc:
|
|
159
|
-
raise DeviceConnectionError(DEVICE_NAME, f"OSError caught ({exc}).") from exc
|
|
160
|
-
|
|
161
|
-
self.is_connection_open = True
|
|
162
|
-
|
|
163
|
-
# The first thing to receive should be the 'smc 1.2.1093' string.
|
|
164
|
-
|
|
165
|
-
response = self.read()
|
|
166
|
-
MODULE_LOGGER.debug(f"After connection, we got '{response}' as a response.")
|
|
167
|
-
|
|
168
|
-
def disconnect(self):
|
|
169
|
-
"""
|
|
170
|
-
Disconnect the Ethernet connection from the device controller.
|
|
171
|
-
|
|
172
|
-
Raises:
|
|
173
|
-
a DeviceConnectionError on failure.
|
|
174
|
-
"""
|
|
175
|
-
try:
|
|
176
|
-
if self.is_connection_open:
|
|
177
|
-
MODULE_LOGGER.debug(f'Disconnecting from {self.hostname}')
|
|
178
|
-
self.semaphore.acquire()
|
|
179
|
-
self.sock.close()
|
|
180
|
-
self.semaphore.release()
|
|
181
|
-
self.is_connection_open = False
|
|
182
|
-
except Exception as e_exc:
|
|
183
|
-
raise DeviceConnectionError(
|
|
184
|
-
DEVICE_NAME, f"Could not close socket to {self.hostname}") from e_exc
|
|
185
|
-
|
|
186
|
-
def reconnect(self):
|
|
187
|
-
|
|
188
|
-
if self.is_connection_open:
|
|
189
|
-
self.disconnect()
|
|
190
|
-
self.connect()
|
|
191
|
-
|
|
192
|
-
def is_connected(self) -> bool:
|
|
193
|
-
"""
|
|
194
|
-
Check if the device is connected.
|
|
195
|
-
|
|
196
|
-
Returns:
|
|
197
|
-
True is the device is connected, False otherwise.
|
|
198
|
-
"""
|
|
199
|
-
|
|
200
|
-
return bool(self.is_connection_open)
|
|
201
|
-
|
|
202
|
-
def read(self) -> bytes:
|
|
203
|
-
"""
|
|
204
|
-
Read a response from the device.
|
|
205
|
-
|
|
206
|
-
Returns:
|
|
207
|
-
A bytes object containing the response from the device. No processing is done
|
|
208
|
-
on the response.
|
|
209
|
-
Raises:
|
|
210
|
-
A DeviceTimeoutError when the read operation timed out.
|
|
211
|
-
"""
|
|
212
|
-
idx, n_total = 0, 0
|
|
213
|
-
buf_size = 1024 * 10
|
|
214
|
-
response = bytes()
|
|
215
|
-
|
|
216
|
-
# Set a timeout of READ_TIMEOUT to the socket.recv
|
|
217
|
-
|
|
218
|
-
saved_timeout = self.sock.gettimeout()
|
|
219
|
-
self.sock.settimeout(READ_TIMEOUT)
|
|
220
|
-
|
|
221
|
-
try:
|
|
222
|
-
for _ in range(100):
|
|
223
|
-
# time.sleep(0.1) # Give the device time to fill the buffer
|
|
224
|
-
data = self.sock.recv(buf_size)
|
|
225
|
-
n = len(data)
|
|
226
|
-
n_total += n
|
|
227
|
-
response += data
|
|
228
|
-
if n < buf_size:
|
|
229
|
-
break
|
|
230
|
-
except socket.timeout as e_timeout:
|
|
231
|
-
MODULE_LOGGER.warning(f"Socket timeout error: {e_timeout}")
|
|
232
|
-
raise DeviceTimeoutError(DEVICE_NAME, "Socket timeout error") from e_timeout
|
|
233
|
-
finally:
|
|
234
|
-
self.sock.settimeout(saved_timeout)
|
|
235
|
-
|
|
236
|
-
# logger.debug(f"Total number of bytes received is {n_total}, idx={idx}")
|
|
237
|
-
# logger.debug(f"> {response[:80]=}")
|
|
238
|
-
|
|
239
|
-
return response
|
|
240
|
-
|
|
241
|
-
def write(self, command: str) -> None:
|
|
242
|
-
"""
|
|
243
|
-
Send a command to the device.
|
|
244
|
-
|
|
245
|
-
No processing is done on the command string, except for the encoding into a bytes object.
|
|
246
|
-
|
|
247
|
-
Args:
|
|
248
|
-
command: the command string including terminators.
|
|
249
|
-
|
|
250
|
-
Raises:
|
|
251
|
-
A DeviceTimeoutError when the sendall() timed out, and a DeviceConnectionError if
|
|
252
|
-
there was a socket related error.
|
|
253
|
-
"""
|
|
254
|
-
|
|
255
|
-
# MODULE_LOGGER.debug(f"{command.encode() = }")
|
|
256
|
-
|
|
257
|
-
try:
|
|
258
|
-
self.sock.sendall(command.encode())
|
|
259
|
-
|
|
260
|
-
# Give the SMC time to start a new command: see issue #1209
|
|
261
|
-
time.sleep(0.5)
|
|
262
|
-
|
|
263
|
-
except socket.timeout as e_timeout:
|
|
264
|
-
raise DeviceTimeoutError(DEVICE_NAME, "Socket timeout error") from e_timeout
|
|
265
|
-
except socket.error as e_socket:
|
|
266
|
-
# Interpret any socket-related error as an I/O error
|
|
267
|
-
raise DeviceConnectionError(DEVICE_NAME, "Socket communication error.") from e_socket
|
|
268
|
-
|
|
269
|
-
def trans(self, command: str) -> bytes:
|
|
270
|
-
"""
|
|
271
|
-
Send a command to the device and wait for the response.
|
|
272
|
-
|
|
273
|
-
No processing is done on the command string, except for the encoding into a bytes object.
|
|
274
|
-
|
|
275
|
-
Args:
|
|
276
|
-
command: the command string including terminators.
|
|
277
|
-
|
|
278
|
-
Returns:
|
|
279
|
-
A bytes object containing the response from the device. No processing is done
|
|
280
|
-
on the response.
|
|
281
|
-
|
|
282
|
-
Raises:
|
|
283
|
-
A DeviceTimeoutError when the sendall() timed out, and a DeviceConnectionError if
|
|
284
|
-
there was a socket related error.
|
|
285
|
-
"""
|
|
286
|
-
# MODULE_LOGGER.debug(f"{command.encode() = }")
|
|
287
|
-
|
|
288
|
-
try:
|
|
289
|
-
# Attempt to send the complete command
|
|
290
|
-
|
|
291
|
-
self.sock.sendall(command.encode())
|
|
292
|
-
|
|
293
|
-
# wait for, read and return the response (will be at most TBD chars)
|
|
294
|
-
|
|
295
|
-
return self.read()
|
|
296
|
-
|
|
297
|
-
except socket.timeout as e_timeout:
|
|
298
|
-
raise DeviceTimeoutError(DEVICE_NAME, "Socket timeout error") from e_timeout
|
|
299
|
-
except socket.error as e_socket:
|
|
300
|
-
# Interpret any socket-related error as an I/O error
|
|
301
|
-
raise DeviceConnectionError(DEVICE_NAME, "Socket communication error.") from e_socket
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
if __name__ == "__main__":
|
|
305
|
-
|
|
306
|
-
from rich import print
|
|
307
|
-
|
|
308
|
-
def send_command(cmd):
|
|
309
|
-
cmd = cmd.rstrip()
|
|
310
|
-
with Timer(f"{DEVICE_NAME} Query"):
|
|
311
|
-
response = huber.query(cmd + "\r\n")
|
|
312
|
-
print(f"{format_datetime()} Response for {cmd:>20s}: {response}")
|
|
313
|
-
response = response.rstrip()
|
|
314
|
-
return response
|
|
315
|
-
|
|
316
|
-
huber = HuberSMC9300EthernetInterface()
|
|
317
|
-
|
|
318
|
-
print(f"{' ' :->10} Connecting to {DEVICE_NAME}..")
|
|
319
|
-
|
|
320
|
-
huber.connect()
|
|
321
|
-
|
|
322
|
-
print(f"{' ' :->10} Requesting info..")
|
|
323
|
-
|
|
324
|
-
send_command("?")
|
|
325
|
-
send_command("?v")
|
|
326
|
-
send_command("?s1")
|
|
327
|
-
send_command("?status1")
|
|
328
|
-
send_command("?status2")
|
|
329
|
-
send_command("?status3")
|
|
330
|
-
send_command("?err1")
|
|
331
|
-
send_command("?conf1")
|
|
332
|
-
send_command("?conf2")
|
|
333
|
-
send_command("?conf3")
|
|
334
|
-
send_command("?p1")
|
|
335
|
-
send_command("?e1")
|
|
336
|
-
send_command("?ec1")
|
|
337
|
-
send_command("?ip")
|
|
338
|
-
send_command("?pgm") # command not yet available
|
|
339
|
-
send_command("?ffast1")
|
|
340
|
-
send_command("?ffast2")
|
|
341
|
-
send_command("?ffast3")
|
|
342
|
-
|
|
343
|
-
print(f"{' ' :->10} Closing connection..")
|
|
344
|
-
|
|
345
|
-
huber.disconnect()
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import sys
|
|
3
|
-
import time
|
|
4
|
-
|
|
5
|
-
from egse.control import ControlServer
|
|
6
|
-
from egse.device import DeviceConnectionState
|
|
7
|
-
from egse.hk import convert_hk_names
|
|
8
|
-
from egse.hk import read_conversion_dict
|
|
9
|
-
from egse.metrics import define_metrics
|
|
10
|
-
from egse.process import SubProcess
|
|
11
|
-
from egse.protocol import DynamicCommandProtocol
|
|
12
|
-
from egse.settings import Settings
|
|
13
|
-
from egse.stages.huber.smc9300 import HuberSMC9300Controller
|
|
14
|
-
from egse.stages.huber.smc9300 import HuberSMC9300Interface
|
|
15
|
-
from egse.system import format_datetime
|
|
16
|
-
from egse.zmq_ser import bind_address
|
|
17
|
-
|
|
18
|
-
HUBER_SETTINGS = Settings.load(filename="smc9300.yaml")
|
|
19
|
-
STAGES_SETTINGS = Settings.load("Huber Controller")
|
|
20
|
-
|
|
21
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class HuberSMC9300Protocol(DynamicCommandProtocol):
|
|
25
|
-
def __init__(self, control_server: ControlServer):
|
|
26
|
-
super().__init__(control_server)
|
|
27
|
-
|
|
28
|
-
self.huber_sim: SubProcess
|
|
29
|
-
self.huber = HuberSMC9300Interface
|
|
30
|
-
|
|
31
|
-
storage_mnemonic = self.get_control_server().get_storage_mnemonic()
|
|
32
|
-
|
|
33
|
-
self.hk_conversion_table = read_conversion_dict(storage_mnemonic, use_site=True)
|
|
34
|
-
|
|
35
|
-
if Settings.simulation_mode():
|
|
36
|
-
# In simulation mode, we start the simulator process and have the control server
|
|
37
|
-
# connect to that process instead of the hardware.
|
|
38
|
-
self.huber_sim = SubProcess("SMC9300 Simulator",
|
|
39
|
-
[sys.executable, "-m", "egse.stages.huber.smc9300_sim", "start"])
|
|
40
|
-
self.huber_sim.execute(detach_from_parent=True)
|
|
41
|
-
time.sleep(2.0) # Allow the simulator time to start up
|
|
42
|
-
self.huber = HuberSMC9300Controller(hostname="localhost")
|
|
43
|
-
else:
|
|
44
|
-
self.huber_sim = None
|
|
45
|
-
self.huber = HuberSMC9300Controller()
|
|
46
|
-
|
|
47
|
-
self.huber.add_observer(self)
|
|
48
|
-
|
|
49
|
-
try:
|
|
50
|
-
self.huber.connect()
|
|
51
|
-
except ConnectionError as exc:
|
|
52
|
-
MODULE_LOGGER.warning(
|
|
53
|
-
"Couldn't establish a connection to the HUBER Stages, check the log messages.")
|
|
54
|
-
MODULE_LOGGER.debug(f"{exc = }")
|
|
55
|
-
|
|
56
|
-
self.metrics = define_metrics(storage_mnemonic, use_site=True)
|
|
57
|
-
|
|
58
|
-
def quit(self):
|
|
59
|
-
if self.huber_sim is not None:
|
|
60
|
-
self.huber_sim.quit()
|
|
61
|
-
|
|
62
|
-
def get_bind_address(self):
|
|
63
|
-
return bind_address(
|
|
64
|
-
self.get_control_server().get_communication_protocol(),
|
|
65
|
-
self.get_control_server().get_commanding_port(),
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
def get_device(self):
|
|
69
|
-
return self.huber
|
|
70
|
-
|
|
71
|
-
# @timer() # 20220621: takes about 50ms
|
|
72
|
-
def get_status(self):
|
|
73
|
-
|
|
74
|
-
status = super().get_status()
|
|
75
|
-
|
|
76
|
-
# Position of the stages:
|
|
77
|
-
# - Commanded angle of the big rotation stage [degrees]
|
|
78
|
-
# - Commanded angle of the small rotation stage [degrees]
|
|
79
|
-
# - Commanded distance for the translation stage [mm]
|
|
80
|
-
|
|
81
|
-
status["big_rotation_stage_position"] = self.huber.get_current_position(STAGES_SETTINGS.BIG_ROTATION_STAGE)
|
|
82
|
-
status["small_rotation_stage_position"] = self.huber.get_current_position(STAGES_SETTINGS.SMALL_ROTATION_STAGE)
|
|
83
|
-
status["translation_stage_position"] = self.huber.get_current_position(STAGES_SETTINGS.TRANSLATION_STAGE)
|
|
84
|
-
|
|
85
|
-
return status
|
|
86
|
-
|
|
87
|
-
# @timer() # 20220621: takes less than 200ms
|
|
88
|
-
def get_housekeeping(self) -> dict:
|
|
89
|
-
|
|
90
|
-
response = {"timestamp": format_datetime()}
|
|
91
|
-
|
|
92
|
-
if self.state == DeviceConnectionState.DEVICE_CONNECTED or Settings.simulation_mode():
|
|
93
|
-
response.update({
|
|
94
|
-
"axis 1 - cur_pos": self.huber.get_current_position(axis=1),
|
|
95
|
-
"axis 2 - cur_pos": self.huber.get_current_position(axis=2),
|
|
96
|
-
"axis 3 - cur_pos": self.huber.get_current_position(axis=3),
|
|
97
|
-
"axis 1 - enc_pos": self.huber.get_current_encoder_position(axis=1),
|
|
98
|
-
"axis 2 - enc_pos": self.huber.get_current_encoder_position(axis=2),
|
|
99
|
-
"axis 3 - enc_pos": self.huber.get_current_encoder_position(axis=3),
|
|
100
|
-
"axis 1 - enc_cnt": self.huber.get_current_encoder_counter_value(axis=1),
|
|
101
|
-
"axis 2 - enc_cnt": self.huber.get_current_encoder_counter_value(axis=2),
|
|
102
|
-
"axis 3 - enc_cnt": self.huber.get_current_encoder_counter_value(axis=3),
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
hk = convert_hk_names(response, self.hk_conversion_table)
|
|
106
|
-
|
|
107
|
-
for key, value in hk.items():
|
|
108
|
-
if key != "timestamp":
|
|
109
|
-
self.metrics[key].set(value)
|
|
110
|
-
|
|
111
|
-
return hk
|