diff --git a/ui/graph_window.py b/ui/graph_window.py index 307466fdcc261f58fb104d71a2924f637312a18d..9f0eaf5e13a1a313b483143dc242d3c04f65f4e8 100644 --- a/ui/graph_window.py +++ b/ui/graph_window.py @@ -52,7 +52,7 @@ class CollectionGraphWindow (sg.Window): else: self._canvas_elem = None self._status = sg.Text("",key="-colstatus-", text_color="#000", font="Helvetica 15") - self._exit = sg.Button("Exit", key='-colexit-',font="Helvetica 11", size=(15,1),button_color='#F0F0F0') + self._exit = sg.Button("Abort", key='-colexit-',font="Helvetica 11", size=(15,1),button_color='#F0F0F0') layout = [ [ sg.Push(), self._title, sg.Push() ], diff --git a/ui/measure_robot.py b/ui/measure_robot.py index 0463cbf73e213f23d693ee59f010ce1aec29c4b6..f17b119820b8aece14bd72a4b40670e8e8fcc84c 100644 --- a/ui/measure_robot.py +++ b/ui/measure_robot.py @@ -3,6 +3,7 @@ import numpy as np import traceback from threading import Semaphore from typing import Callable +from os import _exit from ui import CollectionGraphWindow from kuka import KUKA_DataReader, KUKA_Handler @@ -46,7 +47,7 @@ class Measure_robot (CollectionGraphWindow): self.file_prefix = file_prefix self.temp_dir = temp_dir - def generate_file_name (self, A_iter, speed, sampling, load): + def generate_file_name (self, A_iter, speed, sampling, load, trace_config = "4_ms"): """Creates a suffix for the output file name containing the acquisition parameters @@ -55,18 +56,32 @@ class Measure_robot (CollectionGraphWindow): speed (str|int|slice): The speed (range) of the acquisition sampling (int|str): The sampling rate of the system variables load (int): The class of the acquisition + trace_config (str): The trace configuration name Returns: str: The standardized suffix """ - self.settings = "[" + (speed if type(speed) != slice else f'{speed.start}%-{speed.stop}') + "%] " - self.settings += f"[{sampling}ms] " - self.settings += f"[class {load}] " - iter = " ".join(A_iter) - self.settings += f"[{iter}] " + iter = " ".join(A_iter) + + self.settings = " ".join([ + "[" + (speed if type(speed) != slice else f'{speed.start}%-{speed.stop}') + "%]", + f"[{sampling}ms]", + f"[class {load}]", + f"[{iter}]" + ]) + + trace_sampling = "".join(trace_config.split("_")[:2]) + self.trace_settings = " ".join([ + "[" + (speed if type(speed) != slice else f'{speed.start}%-{speed.stop}') + "%]", + f"[{trace_sampling}]", + f"[class {load}]", + f"[{iter}]" + ]) + + self.file_name = self.file_prefix + " " + self.settings + " - " + self.name + self.trace_file_name = self.file_prefix + " " + self.trace_settings + " - " + self.name - self.file_name = self.file_prefix + " " + self.settings + "- " + self.name return self.file_name def measure_sequence (self, A_iter, speed, sampling, trace_sampling, load: int = 0, lock: Semaphore = None, done: Callable = None): @@ -81,14 +96,14 @@ class Measure_robot (CollectionGraphWindow): lock (Semaphore, optional): The semaphore used to sync multiple robots. Defaults to None. done (Callable, optional): The function used to declare the end of a run. Defaults to None. """ - + self.generate_file_name(A_iter, speed, sampling, load) print("Starting data collection for " + self.name + " with settings " + self.settings) def next (latency: float, queue_read: int, queue_write: int): # Changer 500 par la taille finale du buffer - buffer = queue_write - queue_read if queue_read <= queue_write else 500 - queue_read + queue_write + buffer = queue_write - queue_read if queue_read <= queue_write else 20000 - queue_read + queue_write self.add(buffer, latency) self.latencies = np.append(self.latencies, latency) @@ -109,7 +124,7 @@ class Measure_robot (CollectionGraphWindow): """ file_name = self.file_name + ".xlsx" - trace_file_name = self.file_name + "_TRACE" + ".xlsx" + trace_file_name = self.trace_file_name + ".xlsx" try: if self._dosysvar and self.data is not None: @@ -135,17 +150,19 @@ class Measure_robot (CollectionGraphWindow): event, value = self.read(timeout=10) if event == sg.WIN_CLOSED or event == '-colexit-': + if not (self.storing_data_done or self.collecting_data_done): + if self.dotrace: + self.reader.trace.Trace_Stop() + _exit(0) self.close() return False - if self.collecting_data_done : - self.collecting_data_done = False - self._status.update("Collection Done",text_color="#00f") - self._exit.update(disabled=True) - elif self.storing_data_done : - self.storing_data_done = False + if self.storing_data_done : self._status.update("Successfully stored data", text_color='#0c2') self._exit.update(disabled=False) + elif self.collecting_data_done : + self._status.update("Collection Done",text_color="#00f") + self._exit.update(disabled=True, text="Exit") elif self._dosysvar: self.redraw() if not self._dosysvar: diff --git a/ui/ui_trace.py b/ui/ui_trace.py index 327b980c294499e4384fcd4b5b7b6b33b2deff2a..32d761881541f006ed70cc8f85313724b53f17d7 100644 --- a/ui/ui_trace.py +++ b/ui/ui_trace.py @@ -13,7 +13,10 @@ class UI_KUKATrace( sg.Frame): def __make_layout (self): - self._sampling_rate = sg.Combo(['12_ms_v2','4_ms_v2'], key='-Trace_config-', default_value='12_ms_v2', size=(20, 1)) + self._sampling_rate = sg.Combo([ + '12_ms_v2', + '4_ms_v2' + ], key='-Trace_config-', default_value='12_ms_v2', size=(20, 1)) self._layout = [ [ sg.Text('Trace Sampling rate:'), self._sampling_rate ]