project reorganization: 1. executable files in bin directory now. 2. add recursive_unpack_targz.py for recursive unpacking specified in this script archives tar.gz with MVN data. 3. add asotr_unzip_plot.sh bash file for unpacking MVN data, collect asotr data into csv files and plot asotr MVN data. 4. add brd_wheel_1Hz_parser.py for demonstrate how to work with brd telemetry data

This commit is contained in:
Danila Gamkov
2025-06-06 10:54:25 +03:00
parent 2f37a7329b
commit b04009ad27
34 changed files with 2151 additions and 138 deletions

164
bin/flight_temp_forecast.py Normal file
View File

@@ -0,0 +1,164 @@
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
import pandas as pd
import numpy as np
import sys
from importlib import reload
sys.path.append('./')
import asotr
reload(asotr)
from datetime import datetime, timedelta
from matplotlib import dates
def get_raw_data(year, path_with_data, asotr_kit, data_borders):
if data_borders['flag'] == True:
start_date = data_borders['begin'] + " 00:00:00"
end_date = data_borders['end'] + " 23:59:59"
accuracy = 'minutes'
else:
start_date = '01.01.' + year + " 00:00:00"
end_date = '01.01.' + year + " 23:59:59"
accuracy = 'hours'
try:
data, data_dict_borders = asotr.get_data(path_with_data, asotr_kit,
start_date, end_date, accuracy)
ch_signs = ["temp", "temp_set", "pow"]
ch = [[], [], [], [], [], []]
data_dict = {
"temp": ch,
"temp_set": ch,
"pow": ch,
"time_temp": [],
"time_temp_set": [],
"time_pow": [],
}
data_dict["time_temp"] = data[0]["timestamp"]
data_dict["time_temp_set"] = data[1]["timestamp"]
data_dict["time_pow"] = data[2]["timestamp"]
col = ["ch1", "ch2", "ch3", "ch4", "ch5", "ch6"]
for j in range(len(ch_signs)):
data_dict[ch_signs[j]] = data[j][col]
except Exception as e:
print(f'exception: {e}')
raise
try:
fname_beta = path_with_data + 'beta_' + year + '.xlsx'
dateparse_beta = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
data_beta = pd.read_excel(fname_beta, sheet_name=0, usecols=[0,1,2], header=4,
names=['turn_num', 'beta_angle', 'timestamp'], parse_dates=['timestamp'],
date_parser=dateparse_beta)
except Exception as e:
print(f'exception: {e}')
raise
return (data_dict, data_dict_borders, data_beta)
def plot_asotr_borders(year, path_with_data, ch, asotr_kit, data_borders,
font=14, save_flag=True):
# get from files and prepare data
print_width = 20
print_height = 12
width = 1
plot_windows = 1
channels = list(map(int, ch))
plot_task = {"temp": 1, "temp_set": 1, "pow": 1}
ox_dtime_format = "%d.%m.%Y"
legend = [
"канал 1 (БРД1)",
"канал 2 (БРД2)",
"канал 3 (БРД3)",
"канал 4 (БРД4)",
"канал 5 (плита МУП МВН)",
"канал 6 (плита МУП МВН)",
]
legend_set = list(map(lambda x: x + " уставка", legend))
width = [1, 1, 1, 1, 1, 1]
width_set = [3, 3, 3, 3, 3, 3]
marker = ["-", "--", "-.", "-", "-", "--"]
width_arr = [1, 0.5, 0.2, 0.1, 1, 1]
try:
data_dict, data_dict_borders, data_beta = get_raw_data(year, path_with_data,
asotr_kit, data_borders)
except Exception as e:
print(f'{e}')
return
if plot_windows == 1:
fig, ax = plt.subplots(figsize=(print_width, print_height), dpi=200)
if plot_task["temp"] == 1:
for i in range(len(channels)):
if channels[i] == 1:
line, = ax.plot(data_dict_borders["time_temp"],
data_dict_borders['temp'].iloc[:,i],
'--',
linewidth=1,
label=legend[i],)
ax.plot(data_dict["time_temp"],
data_dict['temp'].iloc[:,i],
marker[i],
linewidth=width[i],
label=legend[i],)
ch = i
ax.tick_params(axis="both", width=1, labelsize=font)
ax.grid(visible=True, linestyle="dotted")
ax.set_ylabel("Температура, $^\circ$C", fontsize=font)
ax.set_xlabel("Время", fontsize=font)
ax.legend(fontsize=font)
date_formatter = dates.DateFormatter(ox_dtime_format)
ax.xaxis.set_major_formatter(date_formatter)
ax2 = ax.twinx()
ax2.plot(data_beta['timestamp'], data_beta['beta_angle'], marker[4],
color='r', linewidth=width[5], label='угол Бета')
ax2.set_ylabel('Угол Бета', fontsize=font)
ax2.tick_params(axis='y', width=1, labelsize=font)
ax2.legend(fontsize=font, loc='lower right')
plt.tight_layout()
def update(val):
shift_amount = val * pd.Timedelta(days=1)
shifted_timestamps = data_dict_borders['time_temp'] + shift_amount
scaled_values = data_dict_borders['temp'].iloc[:,ch] + 5
line.set_data(shifted_timestamps, scaled_values)
fig.canvas.draw_idle()
slider_ax = plt.axes([0.25, 0.05, 0.65, 0.03])
slider = Slider(slider_ax, 'Shift days', -100, 100, valinit=0)
slider.on_changed(update)
plt.show()
if save_flag == True:
pict_name = (f'../plots/reports/ASOTR{asotr_kit}_flight_T_P_{asotr.convert_to_str(channels)}_{data_borders["begin"][0:5].replace(".", "")}_{data_borders["end"][0:5].replace(".", "")}_{data_borders["end"][6:]}.png')
fig.savefig(pict_name)
ch = '100000'
year = '2025'
path_with_data = '../data/asotr/'
asotr_kit = '01'
data_borders = {'flag': True, 'begin': '15.03.2025', 'end': '01.05.2025'}
plot_asotr_borders(year, path_with_data, ch, asotr_kit, data_borders, font=6, save_flag=True)