From 962d8e46d90f0a5bde8e8e4f2e0f4ac955d6794b Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 20 Oct 2022 14:22:19 +0200 Subject: [PATCH] clean up IMTQ TM handling a bit --- pus_tm/devs/imtq_mgt.py | 227 ---------------------------------------- pus_tm/hk_handling.py | 9 +- tmtc/acs/imtq.py | 225 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 227 insertions(+), 234 deletions(-) delete mode 100644 pus_tm/devs/imtq_mgt.py diff --git a/pus_tm/devs/imtq_mgt.py b/pus_tm/devs/imtq_mgt.py deleted file mode 100644 index dcb8f67..0000000 --- a/pus_tm/devs/imtq_mgt.py +++ /dev/null @@ -1,227 +0,0 @@ -import struct - -from pus_tm.defs import PrintWrapper -from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter - - -def handle_eng_set(printer: FsfwTmTcPrinter, hk_data: bytes): - pw = PrintWrapper(printer) - header_list = [ - "Digital Voltage [mV]", - "Analog Voltage [mV]", - "Digital Current [mA]", - "Analog Current [mA]", - "Coil Current X [mA]", - "Coil Current Y [mA]", - "Coil Current Z [mA]", - "Coil X Temperature [°C]", - "Coil Y Temperature [°C]", - "Coil Z Temperature [°C]", - "MCU Temperature [°C]", - ] - digital_voltage = struct.unpack("!H", hk_data[0:2])[0] - analog_voltage = struct.unpack("!H", hk_data[2:4])[0] - digital_current = struct.unpack("!f", hk_data[4:8])[0] - analog_current = struct.unpack("!f", hk_data[8:12])[0] - coil_x_current = struct.unpack("!f", hk_data[12:16])[0] - coil_y_current = struct.unpack("!f", hk_data[16:20])[0] - coil_z_current = struct.unpack("!f", hk_data[20:24])[0] - coil_x_temperature = struct.unpack("!h", hk_data[24:26])[0] - coil_y_temperature = struct.unpack("!h", hk_data[26:28])[0] - coil_z_temperature = struct.unpack("!h", hk_data[28:30])[0] - mcu_temperature = struct.unpack("!h", hk_data[30:32])[0] - - validity_buffer = hk_data[32:] - content_list = [ - digital_voltage, - analog_voltage, - digital_current, - analog_current, - coil_x_current, - coil_y_current, - coil_z_current, - coil_x_temperature, - coil_y_temperature, - coil_z_temperature, - mcu_temperature, - ] - num_of_vars = len(header_list) - pw.dlog(str(header_list)) - pw.dlog(str(content_list)) - printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars) - - -def handle_calibrated_mtm_measurement(printer: FsfwTmTcPrinter, hk_data: bytes): - pw = PrintWrapper(printer) - header_list = [ - "Calibrated MTM X [nT]", - "Calibrated MTM Y [nT]", - "Calibrated MTM Z [nT]", - "Coil actuation status", - ] - mtm_x = struct.unpack("!I", hk_data[0:4])[0] - mtm_y = struct.unpack("!I", hk_data[4:8])[0] - mtm_z = struct.unpack("!I", hk_data[8:12])[0] - coil_actuation_status = hk_data[12] - validity_buffer = hk_data[12:] - content_list = [mtm_x, mtm_y, mtm_z, coil_actuation_status] - num_of_vars = len(header_list) - pw.dlog(str(header_list)) - pw.dlog(str(content_list)) - printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars) - - -def handle_raw_mtm_measurement(printer: FsfwTmTcPrinter, hk_data: bytes): - pw = PrintWrapper(printer) - header_list = [ - "Raw MTM X [nT]", - "Raw MTM Y [nT]", - "Raw MTM Z [nT]", - "Coil actuation status", - ] - mtm_x = struct.unpack("!f", hk_data[0:4])[0] - mtm_y = struct.unpack("!f", hk_data[4:8])[0] - mtm_z = struct.unpack("!f", hk_data[8:12])[0] - coil_actuation_status = hk_data[12] - validity_buffer = hk_data[13:] - content_list = [mtm_x, mtm_y, mtm_z, coil_actuation_status] - num_of_vars = 2 - pw.dlog(str(header_list)) - pw.dlog(str(content_list)) - printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars) - - -def handle_self_test_data(printer: FsfwTmTcPrinter, hk_data: bytes): - pw = PrintWrapper(printer) - header_list = [ - "Init Err", - "Init Raw Mag X [nT]", - "Init Raw Mag Y [nT]", - "Init Raw Mag Z [nT]", - "Init Cal Mag X [nT]", - "Init Cal Mag Y [nT]", - "Init Cal Mag Z [nT]", - "Init Coil X Current [mA]", - "Init Coil Y Current [mA]", - "Init Coil Z Current [mA]", - "Init Coil X Temperature [°C]", - "Init Coil Y Temperature [°C]", - "Init Coil Z Temperature [°C]", - "Err", - "Raw Mag X [nT]", - "Raw Mag Y [nT]", - "Raw Mag Z [nT]", - "Cal Mag X [nT]", - "Cal Mag Y [nT]", - "Cal Mag Z [nT]", - "Coil X Current [mA]", - "Coil Y Current [mA]", - "Coil Z Current [mA]", - "Coil X Temperature [°C]", - "Coil Y Temperature [°C]", - "Coil Z Temperature [°C]", - "Fina Err", - "Fina Raw Mag X [nT]", - "Fina Raw Mag Y [nT]", - "Fina Raw Mag Z [nT]", - "Fina Cal Mag X [nT]", - "Fina Cal Mag Y [nT]", - "Fina Cal Mag Z [nT]", - "Fina Coil X Current [mA]", - "Fina Coil Y Current [mA]", - "Fina Coil Z Current [mA]", - "Fina Coil X Temperature [°C]", - "Fina Coil Y Temperature [°C]", - "Fina Coil Z Temperature [°C]", - ] - # INIT step (no coil actuation) - init_err = hk_data[0] - init_raw_mag_x = struct.unpack("!f", hk_data[1:5])[0] - init_raw_mag_y = struct.unpack("!f", hk_data[5:9])[0] - init_raw_mag_z = struct.unpack("!f", hk_data[9:13])[0] - init_cal_mag_x = struct.unpack("!f", hk_data[13:17])[0] - init_cal_mag_y = struct.unpack("!f", hk_data[17:21])[0] - init_cal_mag_z = struct.unpack("!f", hk_data[21:25])[0] - init_coil_x_current = struct.unpack("!f", hk_data[25:29])[0] - init_coil_y_current = struct.unpack("!f", hk_data[29:33])[0] - init_coil_z_current = struct.unpack("!f", hk_data[33:37])[0] - init_coil_x_temperature = struct.unpack("!H", hk_data[37:39])[0] - init_coil_y_temperature = struct.unpack("!H", hk_data[39:41])[0] - init_coil_z_temperature = struct.unpack("!H", hk_data[41:43])[0] - - # Actuation step - err = hk_data[43] - raw_mag_x = struct.unpack("!f", hk_data[44:48])[0] - raw_mag_y = struct.unpack("!f", hk_data[48:52])[0] - raw_mag_z = struct.unpack("!f", hk_data[52:56])[0] - cal_mag_x = struct.unpack("!f", hk_data[56:60])[0] - cal_mag_y = struct.unpack("!f", hk_data[60:64])[0] - cal_mag_z = struct.unpack("!f", hk_data[64:68])[0] - coil_x_current = struct.unpack("!f", hk_data[68:72])[0] - coil_y_current = struct.unpack("!f", hk_data[72:76])[0] - coil_z_current = struct.unpack("!f", hk_data[76:80])[0] - coil_x_temperature = struct.unpack("!H", hk_data[80:82])[0] - coil_y_temperature = struct.unpack("!H", hk_data[82:84])[0] - coil_z_temperature = struct.unpack("!H", hk_data[84:86])[0] - - # FINA step (no coil actuation) - fina_err = hk_data[86] - fina_raw_mag_x = struct.unpack("!f", hk_data[87:91])[0] - fina_raw_mag_y = struct.unpack("!f", hk_data[91:95])[0] - fina_raw_mag_z = struct.unpack("!f", hk_data[95:99])[0] - fina_cal_mag_x = struct.unpack("!f", hk_data[99:103])[0] - fina_cal_mag_y = struct.unpack("!f", hk_data[103:107])[0] - fina_cal_mag_z = struct.unpack("!f", hk_data[107:111])[0] - fina_coil_x_current = struct.unpack("!f", hk_data[111:115])[0] - fina_coil_y_current = struct.unpack("!f", hk_data[115:119])[0] - fina_coil_z_current = struct.unpack("!f", hk_data[119:123])[0] - fina_coil_x_temperature = struct.unpack("!H", hk_data[123:125])[0] - fina_coil_y_temperature = struct.unpack("!H", hk_data[125:127])[0] - fina_coil_z_temperature = struct.unpack("!H", hk_data[127:129])[0] - - validity_buffer = hk_data[129:] - content_list = [ - init_err, - init_raw_mag_x, - init_raw_mag_y, - init_raw_mag_z, - init_cal_mag_x, - init_cal_mag_y, - init_cal_mag_z, - init_coil_x_current, - init_coil_y_current, - init_coil_z_current, - init_coil_x_temperature, - init_coil_y_temperature, - init_coil_z_temperature, - err, - raw_mag_x, - init_raw_mag_y, - raw_mag_z, - cal_mag_x, - cal_mag_y, - cal_mag_z, - coil_x_current, - coil_y_current, - coil_z_current, - coil_x_temperature, - coil_y_temperature, - coil_z_temperature, - fina_err, - fina_raw_mag_x, - fina_raw_mag_y, - fina_raw_mag_z, - fina_cal_mag_x, - fina_cal_mag_y, - fina_cal_mag_z, - fina_coil_x_current, - fina_coil_y_current, - fina_coil_z_current, - fina_coil_x_temperature, - fina_coil_y_temperature, - fina_coil_z_temperature, - ] - num_of_vars = len(header_list) - pw.dlog(str(header_list)) - pw.dlog(str(content_list)) - printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars) diff --git a/pus_tm/hk_handling.py b/pus_tm/hk_handling.py index 24b0475..613f45e 100644 --- a/pus_tm/hk_handling.py +++ b/pus_tm/hk_handling.py @@ -18,15 +18,10 @@ from tmtccmd.logging import get_console_logger from pus_tm.devs.bpx_bat import handle_bpx_hk_data from pus_tm.devs.gps import handle_gps_data from pus_tm.devs.gyros import handle_gyros_hk_data -from pus_tm.devs.imtq_mgt import ( - handle_self_test_data, - handle_eng_set, - handle_calibrated_mtm_measurement, - handle_raw_mtm_measurement, -) from tmtc.power.tm import handle_pdu_data, handle_p60_hk_data, handle_acu_hk_data from pus_tm.devs.syrlinks import handle_syrlinks_hk_data -from tmtc.acs.imtq import ImtqSetIds +from tmtc.acs.imtq import ImtqSetIds, handle_self_test_data, handle_eng_set, \ + handle_calibrated_mtm_measurement, handle_raw_mtm_measurement from pus_tm.defs import FsfwTmTcPrinter from pus_tm.system.core import handle_core_hk_data from pus_tm.devs.mgms import handle_mgm_hk_data diff --git a/tmtc/acs/imtq.py b/tmtc/acs/imtq.py index 2287ce9..e3da477 100644 --- a/tmtc/acs/imtq.py +++ b/tmtc/acs/imtq.py @@ -8,6 +8,7 @@ import struct from config.definitions import CustomServiceList +from pus_tm.defs import PrintWrapper from spacepackets.ecss.tc import PusTelecommand from tmtccmd.config.tmtc import ( tmtc_definitions_provider, @@ -22,6 +23,7 @@ from tmtccmd.tc.pus_3_fsfw_hk import ( ) from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.util import ObjectIdU32 +from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter class OpCodes: @@ -261,3 +263,226 @@ def raise_dipole_error(dipole_str: str, value: int): raise ValueError( f"{dipole_str} {value} negative or larger than maximum allowed 2000 * 10^-4*Am^2" ) + + +def handle_eng_set(printer: FsfwTmTcPrinter, hk_data: bytes): + pw = PrintWrapper(printer) + header_list = [ + "Digital Voltage [mV]", + "Analog Voltage [mV]", + "Digital Current [mA]", + "Analog Current [mA]", + "Coil Current X [mA]", + "Coil Current Y [mA]", + "Coil Current Z [mA]", + "Coil X Temperature [°C]", + "Coil Y Temperature [°C]", + "Coil Z Temperature [°C]", + "MCU Temperature [°C]", + ] + digital_voltage = struct.unpack("!H", hk_data[0:2])[0] + analog_voltage = struct.unpack("!H", hk_data[2:4])[0] + digital_current = struct.unpack("!f", hk_data[4:8])[0] + analog_current = struct.unpack("!f", hk_data[8:12])[0] + coil_x_current = struct.unpack("!f", hk_data[12:16])[0] + coil_y_current = struct.unpack("!f", hk_data[16:20])[0] + coil_z_current = struct.unpack("!f", hk_data[20:24])[0] + coil_x_temperature = struct.unpack("!h", hk_data[24:26])[0] + coil_y_temperature = struct.unpack("!h", hk_data[26:28])[0] + coil_z_temperature = struct.unpack("!h", hk_data[28:30])[0] + mcu_temperature = struct.unpack("!h", hk_data[30:32])[0] + + validity_buffer = hk_data[32:] + content_list = [ + digital_voltage, + analog_voltage, + digital_current, + analog_current, + coil_x_current, + coil_y_current, + coil_z_current, + coil_x_temperature, + coil_y_temperature, + coil_z_temperature, + mcu_temperature, + ] + num_of_vars = len(header_list) + pw.dlog(str(header_list)) + pw.dlog(str(content_list)) + printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars) + + +def handle_calibrated_mtm_measurement(printer: FsfwTmTcPrinter, hk_data: bytes): + pw = PrintWrapper(printer) + header_list = [ + "Calibrated MTM X [nT]", + "Calibrated MTM Y [nT]", + "Calibrated MTM Z [nT]", + "Coil actuation status", + ] + mtm_x = struct.unpack("!I", hk_data[0:4])[0] + mtm_y = struct.unpack("!I", hk_data[4:8])[0] + mtm_z = struct.unpack("!I", hk_data[8:12])[0] + coil_actuation_status = hk_data[12] + validity_buffer = hk_data[12:] + content_list = [mtm_x, mtm_y, mtm_z, coil_actuation_status] + num_of_vars = len(header_list) + pw.dlog(str(header_list)) + pw.dlog(str(content_list)) + printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars) + + +def handle_raw_mtm_measurement(printer: FsfwTmTcPrinter, hk_data: bytes): + pw = PrintWrapper(printer) + header_list = [ + "Raw MTM X [nT]", + "Raw MTM Y [nT]", + "Raw MTM Z [nT]", + "Coil actuation status", + ] + mtm_x = struct.unpack("!f", hk_data[0:4])[0] + mtm_y = struct.unpack("!f", hk_data[4:8])[0] + mtm_z = struct.unpack("!f", hk_data[8:12])[0] + coil_actuation_status = hk_data[12] + validity_buffer = hk_data[13:] + content_list = [mtm_x, mtm_y, mtm_z, coil_actuation_status] + num_of_vars = 2 + pw.dlog(str(header_list)) + pw.dlog(str(content_list)) + printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars) + + +def handle_self_test_data(printer: FsfwTmTcPrinter, hk_data: bytes): + pw = PrintWrapper(printer) + header_list = [ + "Init Err", + "Init Raw Mag X [nT]", + "Init Raw Mag Y [nT]", + "Init Raw Mag Z [nT]", + "Init Cal Mag X [nT]", + "Init Cal Mag Y [nT]", + "Init Cal Mag Z [nT]", + "Init Coil X Current [mA]", + "Init Coil Y Current [mA]", + "Init Coil Z Current [mA]", + "Init Coil X Temperature [°C]", + "Init Coil Y Temperature [°C]", + "Init Coil Z Temperature [°C]", + "Err", + "Raw Mag X [nT]", + "Raw Mag Y [nT]", + "Raw Mag Z [nT]", + "Cal Mag X [nT]", + "Cal Mag Y [nT]", + "Cal Mag Z [nT]", + "Coil X Current [mA]", + "Coil Y Current [mA]", + "Coil Z Current [mA]", + "Coil X Temperature [°C]", + "Coil Y Temperature [°C]", + "Coil Z Temperature [°C]", + "Fina Err", + "Fina Raw Mag X [nT]", + "Fina Raw Mag Y [nT]", + "Fina Raw Mag Z [nT]", + "Fina Cal Mag X [nT]", + "Fina Cal Mag Y [nT]", + "Fina Cal Mag Z [nT]", + "Fina Coil X Current [mA]", + "Fina Coil Y Current [mA]", + "Fina Coil Z Current [mA]", + "Fina Coil X Temperature [°C]", + "Fina Coil Y Temperature [°C]", + "Fina Coil Z Temperature [°C]", + ] + # INIT step (no coil actuation) + init_err = hk_data[0] + init_raw_mag_x = struct.unpack("!f", hk_data[1:5])[0] + init_raw_mag_y = struct.unpack("!f", hk_data[5:9])[0] + init_raw_mag_z = struct.unpack("!f", hk_data[9:13])[0] + init_cal_mag_x = struct.unpack("!f", hk_data[13:17])[0] + init_cal_mag_y = struct.unpack("!f", hk_data[17:21])[0] + init_cal_mag_z = struct.unpack("!f", hk_data[21:25])[0] + init_coil_x_current = struct.unpack("!f", hk_data[25:29])[0] + init_coil_y_current = struct.unpack("!f", hk_data[29:33])[0] + init_coil_z_current = struct.unpack("!f", hk_data[33:37])[0] + init_coil_x_temperature = struct.unpack("!H", hk_data[37:39])[0] + init_coil_y_temperature = struct.unpack("!H", hk_data[39:41])[0] + init_coil_z_temperature = struct.unpack("!H", hk_data[41:43])[0] + + # Actuation step + err = hk_data[43] + raw_mag_x = struct.unpack("!f", hk_data[44:48])[0] + raw_mag_y = struct.unpack("!f", hk_data[48:52])[0] + raw_mag_z = struct.unpack("!f", hk_data[52:56])[0] + cal_mag_x = struct.unpack("!f", hk_data[56:60])[0] + cal_mag_y = struct.unpack("!f", hk_data[60:64])[0] + cal_mag_z = struct.unpack("!f", hk_data[64:68])[0] + coil_x_current = struct.unpack("!f", hk_data[68:72])[0] + coil_y_current = struct.unpack("!f", hk_data[72:76])[0] + coil_z_current = struct.unpack("!f", hk_data[76:80])[0] + coil_x_temperature = struct.unpack("!H", hk_data[80:82])[0] + coil_y_temperature = struct.unpack("!H", hk_data[82:84])[0] + coil_z_temperature = struct.unpack("!H", hk_data[84:86])[0] + + # FINA step (no coil actuation) + fina_err = hk_data[86] + fina_raw_mag_x = struct.unpack("!f", hk_data[87:91])[0] + fina_raw_mag_y = struct.unpack("!f", hk_data[91:95])[0] + fina_raw_mag_z = struct.unpack("!f", hk_data[95:99])[0] + fina_cal_mag_x = struct.unpack("!f", hk_data[99:103])[0] + fina_cal_mag_y = struct.unpack("!f", hk_data[103:107])[0] + fina_cal_mag_z = struct.unpack("!f", hk_data[107:111])[0] + fina_coil_x_current = struct.unpack("!f", hk_data[111:115])[0] + fina_coil_y_current = struct.unpack("!f", hk_data[115:119])[0] + fina_coil_z_current = struct.unpack("!f", hk_data[119:123])[0] + fina_coil_x_temperature = struct.unpack("!H", hk_data[123:125])[0] + fina_coil_y_temperature = struct.unpack("!H", hk_data[125:127])[0] + fina_coil_z_temperature = struct.unpack("!H", hk_data[127:129])[0] + + validity_buffer = hk_data[129:] + content_list = [ + init_err, + init_raw_mag_x, + init_raw_mag_y, + init_raw_mag_z, + init_cal_mag_x, + init_cal_mag_y, + init_cal_mag_z, + init_coil_x_current, + init_coil_y_current, + init_coil_z_current, + init_coil_x_temperature, + init_coil_y_temperature, + init_coil_z_temperature, + err, + raw_mag_x, + init_raw_mag_y, + raw_mag_z, + cal_mag_x, + cal_mag_y, + cal_mag_z, + coil_x_current, + coil_y_current, + coil_z_current, + coil_x_temperature, + coil_y_temperature, + coil_z_temperature, + fina_err, + fina_raw_mag_x, + fina_raw_mag_y, + fina_raw_mag_z, + fina_cal_mag_x, + fina_cal_mag_y, + fina_cal_mag_z, + fina_coil_x_current, + fina_coil_y_current, + fina_coil_z_current, + fina_coil_x_temperature, + fina_coil_y_temperature, + fina_coil_z_temperature, + ] + num_of_vars = len(header_list) + pw.dlog(str(header_list)) + pw.dlog(str(content_list)) + printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=num_of_vars)