dev: добавлена возможность учета компенсации прогибов в отображении позиции FE

This commit is contained in:
Andrew 2024-12-16 15:09:45 +03:00
parent 511325071b
commit 2294869130
8 changed files with 41 additions and 10 deletions

View File

@ -80,7 +80,7 @@
0.02 0.02
], ],
"distance_l_2": [ "distance_l_2": [
0.04, 0.0275,
0.03, 0.03,
0.033, 0.033,
0.033, 0.033,

View File

@ -57,6 +57,6 @@
1000.0 1000.0
], ],
"Range ME, mm": [ "Range ME, mm": [
250 115.0
] ]
} }

View File

@ -41,9 +41,12 @@ class PassportFormer(BasePointPassportFormer):
return [] return []
system_settings = {key: value[0] for key, value in self._params[1].items()} system_settings = {key: value[0] for key, value in self._params[1].items()}
Range = system_settings["Range ME, mm"]
tesla_time = sum(self._params[0].get("Tesla summary time", [])) tesla_time = sum(self._params[0].get("Tesla summary time", []))
useful_data = {"tesla_time": tesla_time, "range_ME": Range} useful_data = {"tesla_time": tesla_time,
"range_ME": system_settings["Range ME, mm"],
"k_prop": system_settings["k_prop"]
}
points_pocket = [] points_pocket = []
@ -70,7 +73,9 @@ class PassportFormer(BasePointPassportFormer):
idx = i+1 if idx_shift else i idx = i+1 if idx_shift else i
point_timeframe = [events[self._stages[0]][0][i], events[self._stages[-1]][1][idx]] point_timeframe = [events[self._stages[0]][0][i], events[self._stages[-1]][1][idx]]
point_events = {key: [value[0][i], value[1][i]] for key, value in events.items()} point_events = {key: [value[0][i], value[1][i]] for key, value in events.items()}
useful_p_data = {"thickness": operator_settings["object_thickness"], "L2": operator_settings["distance_l_2"]} useful_p_data = {"thickness": operator_settings["object_thickness"],
"L2": operator_settings["distance_l_2"],
"force": operator_settings["force_target"]}
points_pocket.append([point_timeframe, ideal_data, point_events, useful_p_data]) points_pocket.append([point_timeframe, ideal_data, point_events, useful_p_data])
return dataframe, points_pocket, useful_data return dataframe, points_pocket, useful_data

View File

@ -204,6 +204,17 @@ class PlotWidget(BasePlotWidget):
dataframe[signal["name"]] = dataframe[signal["name"]].apply(lambda x: shift-x) dataframe[signal["name"]] = dataframe[signal["name"]].apply(lambda x: shift-x)
return dataframe return dataframe
def _shift_data(self,
valid_str: str,
signals: list[dict],
dataframe: pd.DataFrame,
shift: float) -> pd.DataFrame:
keys = dataframe.keys()
for signal in signals:
if valid_str in signal["name"] and signal["name"] in keys:
dataframe[signal["name"]] = dataframe[signal["name"]].apply(lambda x: x + shift)
return dataframe
def _build_widget(self, data: list[Any]) -> QWidget: def _build_widget(self, data: list[Any]) -> QWidget:
""" """
@ -216,6 +227,7 @@ class PlotWidget(BasePlotWidget):
dataframe, points_pocket, useful_data = data dataframe, points_pocket, useful_data = data
tesla_time = useful_data["tesla_time"] tesla_time = useful_data["tesla_time"]
range_ME = useful_data["range_ME"] range_ME = useful_data["range_ME"]
k_prop = useful_data["k_prop"]
dataframe_headers = dataframe.columns.tolist() dataframe_headers = dataframe.columns.tolist()
for widget_num, (channel, description) in enumerate(self._plt_channels.items()): for widget_num, (channel, description) in enumerate(self._plt_channels.items()):
@ -226,6 +238,7 @@ class PlotWidget(BasePlotWidget):
ideal_time = 0.0 ideal_time = 0.0
worst_perf = 2 worst_perf = 2
# TODO: рассчитать корректный параметр range
if settings["mirror ME"]: if settings["mirror ME"]:
dataframe = self._mirror_shift_data("ME", description["Real_signals"], dataframe, range_ME) dataframe = self._mirror_shift_data("ME", description["Real_signals"], dataframe, range_ME)
@ -235,6 +248,14 @@ class PlotWidget(BasePlotWidget):
point_timeframe, ideal_dat, point_events, useful_p_data = point_data point_timeframe, ideal_dat, point_events, useful_p_data = point_data
ideal_data = copy.deepcopy(ideal_dat) ideal_data = copy.deepcopy(ideal_dat)
# TODO: проверить корректность расчетов
if settings["force compensation FE"]:
force = useful_p_data["force"]
F_comp = - force*k_prop/1000
point_idxs = dataframe[(dataframe["time"] >= point_timeframe[0]) & (dataframe["time"] <= point_timeframe[1])].index
dataframe.loc[point_idxs] = self._shift_data("FE", description["Real_signals"], dataframe.loc[point_idxs], F_comp)
# Модифицируем данные для отображения гарфика # Модифицируем данные для отображения гарфика
if settings["ideals"] and settings["mirror ME"]: if settings["ideals"] and settings["mirror ME"]:
for stage in point_events.keys(): for stage in point_events.keys():
@ -244,11 +265,13 @@ class PlotWidget(BasePlotWidget):
if settings["stages"]: if settings["stages"]:
self._add_stage_regions(plot_widget, point_events, dataframe_headers, 75) self._add_stage_regions(plot_widget, point_events, dataframe_headers, 75)
# TODO: подобрать не вырвеглазные цвета, возможно ограничить зону
if settings["workpiece"]: if settings["workpiece"]:
x1 = point_timeframe[0] x1 = point_timeframe[0]
dx = point_timeframe[1] - x1 dx = point_timeframe[1] - x1
y1 = useful_p_data["L2"]*1000 y1 = useful_p_data["L2"]*1000
dy = useful_p_data["thickness"]*1000 dy = useful_p_data["thickness"]*1000
rect_item = QGraphicsRectItem(x1, y1, dx, dy) rect_item = QGraphicsRectItem(x1, y1, dx, dy)
rect_item.setBrush(pg.mkBrush('blue')) rect_item.setBrush(pg.mkBrush('blue'))
rect_item.setPen(pg.mkPen('red', width=2)) rect_item.setPen(pg.mkPen('red', width=2))

View File

@ -127,7 +127,8 @@ class BasePlotWidget:
"performance": True, "performance": True,
"ideals": True, "ideals": True,
"mirror ME": False, "mirror ME": False,
"workpiece": False "workpiece": False,
"force compensation FE": False
}, },
"Real_signals": [ "Real_signals": [
{ {
@ -157,7 +158,8 @@ class BasePlotWidget:
"performance": False, "performance": False,
"ideals": True, "ideals": True,
"mirror ME": True, "mirror ME": True,
"workpiece": True "workpiece": True,
"force compensation FE": True
}, },
"Real_signals": [ "Real_signals": [
{ {
@ -187,7 +189,8 @@ class BasePlotWidget:
"performance": False, "performance": False,
"ideals": True, "ideals": True,
"mirror ME": False, "mirror ME": False,
"workpiece": False "workpiece": False,
"force compensation FE": False
}, },
"Real_signals": [ "Real_signals": [
{ {