2025-01-15 18:07:16 +03:00
|
|
|
|
from __future__ import annotations
|
2024-11-25 14:01:09 +03:00
|
|
|
|
import os
|
2025-01-23 17:33:17 +03:00
|
|
|
|
from typing import Optional, Union
|
|
|
|
|
|
from dataclasses import dataclass
|
2025-01-20 14:38:41 +03:00
|
|
|
|
|
2024-12-09 16:05:34 +03:00
|
|
|
|
from cachetools import LRUCache
|
2024-11-25 14:01:09 +03:00
|
|
|
|
import pandas as pd
|
2024-12-18 10:16:50 +03:00
|
|
|
|
from PyQt5.QtCore import QObject, QTimer
|
2024-12-23 18:51:17 +03:00
|
|
|
|
from PyQt5.QtWidgets import QWidget, QTabWidget, QMainWindow, QVBoxLayout
|
2025-01-20 14:38:41 +03:00
|
|
|
|
|
2024-12-05 13:18:53 +03:00
|
|
|
|
from OptAlgorithm import OptAlgorithm
|
2024-12-24 11:46:00 +03:00
|
|
|
|
from utils.qt_settings import dark_style
|
|
|
|
|
|
|
2024-12-03 17:21:22 +03:00
|
|
|
|
|
2025-01-23 17:33:17 +03:00
|
|
|
|
@dataclass
|
|
|
|
|
|
class PointPassport:
|
|
|
|
|
|
timeframe: list
|
|
|
|
|
|
events: dict
|
|
|
|
|
|
ideal_data: dict
|
|
|
|
|
|
useful_data: dict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
|
class GraphicPassport:
|
|
|
|
|
|
dataframe: pd.DataFrame
|
|
|
|
|
|
points_pocket: list[PointPassport]
|
|
|
|
|
|
useful_data: dict
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BaseMediator:
|
|
|
|
|
|
def __init__(self,
|
|
|
|
|
|
converter: BaseDataConverter,
|
2025-01-23 17:33:17 +03:00
|
|
|
|
passport_former: BasePointPassportFormer,
|
2024-11-25 14:01:09 +03:00
|
|
|
|
plot: BasePlotWidget,
|
2025-01-20 17:26:34 +03:00
|
|
|
|
controller: BaseController,
|
|
|
|
|
|
file_manager: BaseFileManager):
|
2024-11-25 14:01:09 +03:00
|
|
|
|
self._converter = converter
|
|
|
|
|
|
self._converter.mediator = self
|
2025-01-23 17:33:17 +03:00
|
|
|
|
self._passport_former = passport_former
|
|
|
|
|
|
self._passport_former.mediator = self
|
2024-11-25 14:01:09 +03:00
|
|
|
|
self._plot = plot
|
|
|
|
|
|
self._plot.mediator = self
|
|
|
|
|
|
self._controller = controller
|
2024-11-26 18:16:55 +03:00
|
|
|
|
self._controller.mediator = self
|
2025-01-20 17:26:34 +03:00
|
|
|
|
self._file_manager = file_manager
|
|
|
|
|
|
self._file_manager.mediator = self
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
|
|
|
|
|
def notify(self,
|
2024-12-04 20:01:30 +03:00
|
|
|
|
source: Union[BaseDirectoryMonitor, BaseDataConverter, BasePointPassportFormer, BasePlotWidget],
|
|
|
|
|
|
data: Union[list[str], list[pd.DataFrame], list[list], list[QWidget]]):
|
2024-11-25 17:20:00 +03:00
|
|
|
|
...
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
2025-01-23 17:33:17 +03:00
|
|
|
|
|
2024-11-25 14:01:09 +03:00
|
|
|
|
class BaseDirectoryMonitor:
|
|
|
|
|
|
|
|
|
|
|
|
update_timer = QTimer()
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self,
|
2025-01-20 17:26:34 +03:00
|
|
|
|
file_manager: Optional[BaseFileManager] = None):
|
2024-11-25 14:01:09 +03:00
|
|
|
|
super().__init__()
|
2024-11-25 17:20:00 +03:00
|
|
|
|
self._directory_path = None
|
|
|
|
|
|
self._update_time = None
|
2024-12-18 19:43:46 +03:00
|
|
|
|
self.isActive = False
|
2024-12-19 14:25:11 +03:00
|
|
|
|
self._files = []
|
2025-01-20 17:26:34 +03:00
|
|
|
|
self._file_manager = file_manager
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def directory_path(self) -> str:
|
|
|
|
|
|
return self._directory_path
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def update_time(self) -> int:
|
|
|
|
|
|
return self._update_time
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def files(self) -> list[str]:
|
|
|
|
|
|
return self._files
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
2025-01-20 17:26:34 +03:00
|
|
|
|
def file_manager(self) -> BaseFileManager:
|
|
|
|
|
|
return self._file_manager
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
2025-01-20 17:26:34 +03:00
|
|
|
|
@file_manager.setter
|
|
|
|
|
|
def file_manager(self, file_manager: BaseFileManager) -> None:
|
|
|
|
|
|
self._file_manager = file_manager
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
2025-01-20 17:26:34 +03:00
|
|
|
|
def init_state(self):
|
2024-11-25 14:01:09 +03:00
|
|
|
|
files = os.listdir(self._directory_path)
|
|
|
|
|
|
self._files = files
|
|
|
|
|
|
|
|
|
|
|
|
def start(self):
|
2024-12-18 19:43:46 +03:00
|
|
|
|
self.isActive = True
|
2024-12-06 11:11:47 +03:00
|
|
|
|
self.update_timer.start(int(self._update_time))
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
2024-11-25 17:20:00 +03:00
|
|
|
|
def stop(self):
|
2024-12-18 19:43:46 +03:00
|
|
|
|
self.isActive = False
|
2024-11-25 17:20:00 +03:00
|
|
|
|
self.update_timer.stop()
|
2025-01-20 17:26:34 +03:00
|
|
|
|
|
|
|
|
|
|
def pause(self):
|
|
|
|
|
|
self.update_timer.stop()
|
|
|
|
|
|
|
2024-11-25 17:20:00 +03:00
|
|
|
|
|
2024-11-25 14:01:09 +03:00
|
|
|
|
class BaseDataConverter:
|
|
|
|
|
|
def __init__(self, mediator: Optional[BaseMediator] = None):
|
|
|
|
|
|
self._mediator = mediator
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def mediator(self) -> BaseMediator:
|
|
|
|
|
|
return self._mediator
|
|
|
|
|
|
|
|
|
|
|
|
@mediator.setter
|
|
|
|
|
|
def mediator(self, mediator: BaseMediator) -> None:
|
|
|
|
|
|
self._mediator = mediator
|
|
|
|
|
|
|
|
|
|
|
|
def convert_data(self, files: list[str]) -> None:
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BasePlotWidget:
|
|
|
|
|
|
def __init__(self,
|
2024-11-25 17:20:00 +03:00
|
|
|
|
mediator: Optional[BaseMediator] = None):
|
2024-11-25 14:01:09 +03:00
|
|
|
|
super().__init__()
|
|
|
|
|
|
self._mediator = mediator
|
|
|
|
|
|
|
|
|
|
|
|
self._stage_colors = {
|
2024-12-09 19:54:08 +03:00
|
|
|
|
"Closing": [220, 20, 60, 100], # Crimson
|
|
|
|
|
|
"Squeeze": [30, 144, 255, 100], # Dodger Blue
|
|
|
|
|
|
"Welding": [128, 128, 128, 100], # Gray
|
|
|
|
|
|
"Relief": [34, 139, 34, 100], # Forest Green
|
|
|
|
|
|
"Oncomming": [255, 165, 0, 100] # Orange
|
|
|
|
|
|
}
|
2024-11-25 14:01:09 +03:00
|
|
|
|
self._plt_channels = {
|
|
|
|
|
|
"Electrode Force, N & Welding Current, kA": {
|
|
|
|
|
|
"Settings": {
|
|
|
|
|
|
"zoom": False,
|
2024-12-02 11:04:15 +03:00
|
|
|
|
"stages": True,
|
2024-12-04 20:01:30 +03:00
|
|
|
|
"performance": True,
|
2024-12-19 13:23:27 +03:00
|
|
|
|
"ideals": True,
|
2024-12-16 14:24:26 +03:00
|
|
|
|
"mirror ME": False,
|
2024-12-16 15:09:45 +03:00
|
|
|
|
"workpiece": False,
|
2024-12-18 13:52:05 +03:00
|
|
|
|
"force compensation FE": False,
|
|
|
|
|
|
"force accuracy":True
|
2024-11-25 14:01:09 +03:00
|
|
|
|
},
|
|
|
|
|
|
"Real_signals": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "Electrode Force, N ME",
|
|
|
|
|
|
"pen": 'r',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "Electrode Force, N FE",
|
|
|
|
|
|
"pen": 'w',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "Welding Current ME",
|
|
|
|
|
|
"pen": "y",
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"Ideal_signals": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "Force",
|
|
|
|
|
|
"pen": {'color': 'g', 'width':3},
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
2024-12-06 12:29:27 +03:00
|
|
|
|
"Electrode Position, mm": {
|
2024-11-25 14:01:09 +03:00
|
|
|
|
"Settings": {
|
2024-12-05 11:19:55 +03:00
|
|
|
|
"zoom": False,
|
|
|
|
|
|
"stages": True,
|
2024-12-04 20:01:30 +03:00
|
|
|
|
"performance": False,
|
2024-12-19 13:23:27 +03:00
|
|
|
|
"ideals": True,
|
2024-12-16 14:24:26 +03:00
|
|
|
|
"mirror ME": True,
|
2024-12-16 15:09:45 +03:00
|
|
|
|
"workpiece": True,
|
2024-12-18 13:52:05 +03:00
|
|
|
|
"force compensation FE": True,
|
|
|
|
|
|
"force accuracy":False
|
2024-11-25 14:01:09 +03:00
|
|
|
|
},
|
|
|
|
|
|
"Real_signals": [
|
|
|
|
|
|
{
|
2024-12-05 11:19:55 +03:00
|
|
|
|
"name": "Rotor Position, mm ME",
|
2024-12-06 12:29:27 +03:00
|
|
|
|
"pen": {'color': 'r', 'width':2},
|
2024-11-25 14:01:09 +03:00
|
|
|
|
},
|
|
|
|
|
|
{
|
2024-12-05 11:19:55 +03:00
|
|
|
|
"name": "Rotor Position, mm FE",
|
2024-12-06 12:29:27 +03:00
|
|
|
|
"pen": {'color': 'w', 'width':2},
|
2024-11-25 14:01:09 +03:00
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"Ideal_signals": [
|
|
|
|
|
|
{
|
2024-12-06 12:29:27 +03:00
|
|
|
|
"name": "Position ME",
|
|
|
|
|
|
"pen": {'color': 'g', 'width':4},
|
2024-12-05 11:19:55 +03:00
|
|
|
|
},
|
|
|
|
|
|
{
|
2024-12-06 12:29:27 +03:00
|
|
|
|
"name": "Position FE",
|
|
|
|
|
|
"pen": {'color': 'b', 'width':4},
|
2024-11-25 14:01:09 +03:00
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
"Electrode Speed, mm/s": {
|
|
|
|
|
|
"Settings": {
|
|
|
|
|
|
"zoom": False,
|
2024-12-02 11:04:15 +03:00
|
|
|
|
"stages": True,
|
2024-12-04 20:01:30 +03:00
|
|
|
|
"performance": False,
|
2024-12-16 13:59:42 +03:00
|
|
|
|
"ideals": True,
|
2024-12-16 14:24:26 +03:00
|
|
|
|
"mirror ME": False,
|
2024-12-16 15:09:45 +03:00
|
|
|
|
"workpiece": False,
|
2024-12-18 13:52:05 +03:00
|
|
|
|
"force compensation FE": False,
|
|
|
|
|
|
"force accuracy":False
|
2024-11-25 14:01:09 +03:00
|
|
|
|
},
|
|
|
|
|
|
"Real_signals": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "Rotor Speed, mm/s ME",
|
|
|
|
|
|
"pen": 'r',
|
|
|
|
|
|
"zoom": False
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "Rotor Speed, mm/s FE",
|
|
|
|
|
|
"pen": 'w',
|
|
|
|
|
|
"zoom": False
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"Ideal_signals": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "Rotor Speed ME",
|
2024-12-06 12:29:27 +03:00
|
|
|
|
"pen": {'color': 'g', 'width':3},
|
2024-11-25 14:01:09 +03:00
|
|
|
|
"zoom": False
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "Rotor Speed FE",
|
2024-12-06 12:29:27 +03:00
|
|
|
|
"pen": {'color': 'b', 'width':3},
|
2024-11-25 14:01:09 +03:00
|
|
|
|
"zoom": False
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
}
|
2025-01-23 17:33:17 +03:00
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def set_style(object_: Union[QTabWidget, QWidget]) -> None:
|
|
|
|
|
|
object_.setStyleSheet(
|
2024-12-09 19:54:08 +03:00
|
|
|
|
"""QLabel {
|
|
|
|
|
|
color: #ffffff;
|
|
|
|
|
|
font-size: 26px;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-family: "Segoe UI", sans-serif;
|
|
|
|
|
|
}""")
|
2024-12-03 17:21:22 +03:00
|
|
|
|
|
2024-11-25 14:01:09 +03:00
|
|
|
|
@property
|
|
|
|
|
|
def mediator(self) -> BaseMediator:
|
|
|
|
|
|
return self._mediator
|
|
|
|
|
|
|
|
|
|
|
|
@mediator.setter
|
|
|
|
|
|
def mediator(self, mediator: BaseMediator) -> None:
|
|
|
|
|
|
self._mediator = mediator
|
|
|
|
|
|
|
|
|
|
|
|
def build(self, data: list[pd.DataFrame]) -> list[QWidget]:
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BaseController(QObject):
|
|
|
|
|
|
|
2025-01-20 17:26:34 +03:00
|
|
|
|
def __init__(self,
|
2025-01-21 16:45:53 +03:00
|
|
|
|
mediator: Optional[BaseMediator] = None,
|
|
|
|
|
|
file_manager: Optional[BaseFileManager] = None):
|
2025-01-22 18:23:50 +03:00
|
|
|
|
super().__init__()
|
2025-01-21 16:45:53 +03:00
|
|
|
|
self._mediator = mediator
|
|
|
|
|
|
self._file_manager = file_manager
|
2025-01-20 17:26:34 +03:00
|
|
|
|
|
2024-11-25 14:01:09 +03:00
|
|
|
|
def send_widgets(self, widgets: list[QWidget]) -> None:
|
|
|
|
|
|
...
|
|
|
|
|
|
|
2024-12-18 19:43:46 +03:00
|
|
|
|
def update_settings(self, settings: list[dict]) -> None:
|
2024-11-26 18:16:55 +03:00
|
|
|
|
...
|
2024-12-16 15:49:01 +03:00
|
|
|
|
|
2025-01-21 16:45:53 +03:00
|
|
|
|
def set_working_mode(self, mode:int) -> None:
|
2024-12-18 19:43:46 +03:00
|
|
|
|
...
|
2024-11-25 17:20:00 +03:00
|
|
|
|
|
2024-12-24 10:37:34 +03:00
|
|
|
|
def open_file(self, filepath: str) -> None:
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
def update_plots(self) -> None:
|
|
|
|
|
|
...
|
2024-12-25 11:56:17 +03:00
|
|
|
|
|
2025-01-21 16:45:53 +03:00
|
|
|
|
def update_status(self, msg:str) -> None:
|
2024-12-25 11:56:17 +03:00
|
|
|
|
...
|
2025-01-20 17:26:34 +03:00
|
|
|
|
|
2025-01-21 16:45:53 +03:00
|
|
|
|
def update_progress(self, progress:int) -> None:
|
|
|
|
|
|
...
|
|
|
|
|
|
|
2025-01-20 17:26:34 +03:00
|
|
|
|
@property
|
|
|
|
|
|
def mediator(self) -> BaseMediator:
|
|
|
|
|
|
return self._mediator
|
|
|
|
|
|
|
|
|
|
|
|
@mediator.setter
|
|
|
|
|
|
def mediator(self, mediator: BaseMediator) -> None:
|
|
|
|
|
|
self._mediator = mediator
|
2025-01-21 16:45:53 +03:00
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def file_manager(self) -> BaseFileManager:
|
|
|
|
|
|
return self._file_manager
|
|
|
|
|
|
|
|
|
|
|
|
@file_manager.setter
|
|
|
|
|
|
def file_manager(self, file_manager: BaseFileManager) -> None:
|
|
|
|
|
|
self._file_manager = file_manager
|
2025-01-20 17:26:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BaseFileManager:
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(self,
|
|
|
|
|
|
mediator: Optional[BaseMediator] = None,
|
|
|
|
|
|
monitor: Optional[BaseDirectoryMonitor] = None):
|
|
|
|
|
|
self._mediator = mediator
|
|
|
|
|
|
self._monitor = monitor
|
|
|
|
|
|
self._paths_library = set()
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def paths_library(self) -> set:
|
|
|
|
|
|
return self._paths_library
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def mediator(self) -> BaseMediator:
|
|
|
|
|
|
return self._mediator
|
|
|
|
|
|
|
|
|
|
|
|
@mediator.setter
|
|
|
|
|
|
def mediator(self, mediator: BaseMediator) -> None:
|
|
|
|
|
|
self._mediator = mediator
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def monitor(self) -> BaseDirectoryMonitor:
|
|
|
|
|
|
return self._monitor
|
|
|
|
|
|
|
|
|
|
|
|
@monitor.setter
|
|
|
|
|
|
def monitor(self, monitor: BaseDirectoryMonitor) -> None:
|
|
|
|
|
|
self._monitor = monitor
|
|
|
|
|
|
|
2025-01-21 16:45:53 +03:00
|
|
|
|
def replot_all(self) -> None:
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
def open_custom_file(self, path:str) -> None:
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
def set_mode(self, num:int) -> None:
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
def update_monitor_settings(self, settings:list[dict]) -> None:
|
|
|
|
|
|
...
|
|
|
|
|
|
|
2025-01-20 17:26:34 +03:00
|
|
|
|
def add_new_paths(self, paths:list[str]):
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-25 14:01:09 +03:00
|
|
|
|
class BaseIdealDataBuilder(OptAlgorithm):
|
2024-12-04 20:01:30 +03:00
|
|
|
|
|
2024-12-03 17:21:22 +03:00
|
|
|
|
def __init__(self, params: list[dict]):
|
|
|
|
|
|
operator_params, system_params = params
|
2024-11-25 17:20:00 +03:00
|
|
|
|
self.mul = system_params['time_capture']
|
2024-12-02 11:04:15 +03:00
|
|
|
|
self.welding_time = operator_params['time_wielding']
|
2024-11-25 17:20:00 +03:00
|
|
|
|
super().__init__(operator_params, system_params)
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
|
|
|
|
|
def get_closingDF(self) -> pd.DataFrame:
|
2024-11-25 17:20:00 +03:00
|
|
|
|
...
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
|
|
|
|
|
def get_compressionDF(self) -> pd.DataFrame:
|
2024-11-25 17:20:00 +03:00
|
|
|
|
...
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
|
|
|
|
|
def get_openingDF(self) -> pd.DataFrame:
|
2024-11-25 17:20:00 +03:00
|
|
|
|
...
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
|
|
|
|
|
def get_tmovementDF(self) -> pd.DataFrame:
|
2024-11-25 17:20:00 +03:00
|
|
|
|
...
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
2024-12-02 11:04:15 +03:00
|
|
|
|
def get_weldingDF(self) -> pd.DataFrame:
|
2024-11-25 17:20:00 +03:00
|
|
|
|
...
|
2024-12-02 12:09:31 +03:00
|
|
|
|
|
|
|
|
|
|
def get_oncomingDF(self) -> pd.DataFrame:
|
|
|
|
|
|
...
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
|
|
|
|
|
def get_ideal_timings(self) -> list[float, float, float, float]:
|
2024-11-25 17:20:00 +03:00
|
|
|
|
...
|
|
|
|
|
|
|
2024-12-02 11:04:15 +03:00
|
|
|
|
def get_cycle_time(self) -> float:
|
|
|
|
|
|
result = sum(self.get_ideal_timings())
|
|
|
|
|
|
return result
|
2024-11-25 14:01:09 +03:00
|
|
|
|
|
2025-01-23 17:33:17 +03:00
|
|
|
|
|
2024-12-23 18:51:17 +03:00
|
|
|
|
class BaseMainWindow(QMainWindow):
|
2025-01-23 17:33:17 +03:00
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
2024-11-25 17:20:00 +03:00
|
|
|
|
super().__init__()
|
2024-12-18 19:43:46 +03:00
|
|
|
|
self.resize(200,200)
|
2024-12-23 18:51:17 +03:00
|
|
|
|
# Создаем центральный виджет и устанавливаем его
|
|
|
|
|
|
self._central_widget = QWidget()
|
|
|
|
|
|
self.setCentralWidget(self._central_widget)
|
|
|
|
|
|
|
|
|
|
|
|
# Устанавливаем основной вертикальный макет для центрального виджета
|
|
|
|
|
|
self._central_layout = QVBoxLayout()
|
|
|
|
|
|
self._central_widget.setLayout(self._central_layout)
|
2024-12-24 11:46:00 +03:00
|
|
|
|
self.set_style(self)
|
2024-11-26 18:28:05 +03:00
|
|
|
|
...
|
2024-11-25 17:20:00 +03:00
|
|
|
|
|
2024-12-24 11:46:00 +03:00
|
|
|
|
def set_style(self, object: Union[QTabWidget, QWidget, QMainWindow]) -> None:
|
|
|
|
|
|
object.setStyleSheet(dark_style)
|
2025-01-23 17:33:17 +03:00
|
|
|
|
|
2024-12-02 18:41:02 +03:00
|
|
|
|
|
2024-12-03 17:21:22 +03:00
|
|
|
|
class BasePointPassportFormer:
|
2024-12-04 20:01:30 +03:00
|
|
|
|
|
|
|
|
|
|
def __init__(self,
|
|
|
|
|
|
mediator: Optional[BaseMediator] = None):
|
|
|
|
|
|
self._mediator = mediator
|
2024-12-03 17:21:22 +03:00
|
|
|
|
self._clear_stage = "Welding"
|
|
|
|
|
|
self._stages = [
|
|
|
|
|
|
"Closing",
|
|
|
|
|
|
"Squeeze",
|
|
|
|
|
|
"Welding",
|
2024-12-05 07:31:48 +03:00
|
|
|
|
"Relief",
|
|
|
|
|
|
"Oncomming"
|
2024-12-03 17:21:22 +03:00
|
|
|
|
]
|
2024-12-05 11:19:55 +03:00
|
|
|
|
self._tesla_stages = [
|
|
|
|
|
|
"Tesla squeeze",
|
|
|
|
|
|
"Tesla closing",
|
|
|
|
|
|
"Tesla welding",
|
|
|
|
|
|
"Tesla oncomming_relief"
|
|
|
|
|
|
]
|
2024-12-09 16:05:34 +03:00
|
|
|
|
self._params = []
|
|
|
|
|
|
self._ideal_data_cashe = LRUCache(maxsize=1000)
|
|
|
|
|
|
self._OptAlgorithm_operator_params = [
|
|
|
|
|
|
"dist_open_start_1",
|
|
|
|
|
|
"dist_open_start_2",
|
|
|
|
|
|
"dist_open_after_1",
|
|
|
|
|
|
"dist_open_after_2",
|
|
|
|
|
|
"dist_open_end_1",
|
|
|
|
|
|
"dist_open_end_2",
|
|
|
|
|
|
"dist_close_end_1",
|
|
|
|
|
|
"dist_close_end_2",
|
|
|
|
|
|
"time_command",
|
|
|
|
|
|
"time_robot_movement",
|
|
|
|
|
|
"object_thickness",
|
|
|
|
|
|
"force_target",
|
|
|
|
|
|
"force_capture",
|
|
|
|
|
|
"time_wielding"]
|
|
|
|
|
|
self._OptAlgorithm_system_params = [
|
|
|
|
|
|
"a_max_1",
|
|
|
|
|
|
"v_max_1",
|
|
|
|
|
|
"a_max_2",
|
|
|
|
|
|
"v_max_2",
|
|
|
|
|
|
"mass_1",
|
|
|
|
|
|
"mass_2",
|
|
|
|
|
|
"k_hardness_1",
|
|
|
|
|
|
"k_hardness_2",
|
|
|
|
|
|
"torque_max_1",
|
|
|
|
|
|
"torque_max_2",
|
|
|
|
|
|
"transmission_ratio_1",
|
|
|
|
|
|
"transmission_ratio_2",
|
|
|
|
|
|
"position_start_1",
|
|
|
|
|
|
"position_start_2",
|
|
|
|
|
|
"k_prop",
|
|
|
|
|
|
"time_capture"]
|
2024-12-03 17:21:22 +03:00
|
|
|
|
|
2025-01-23 17:33:17 +03:00
|
|
|
|
def form_passports(self) -> list[GraphicPassport]:
|
2024-12-04 20:01:30 +03:00
|
|
|
|
...
|
2024-12-03 17:21:22 +03:00
|
|
|
|
|
2024-12-04 20:01:30 +03:00
|
|
|
|
def update_settings(self, params: list) -> None:
|
2024-12-03 17:21:22 +03:00
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
2025-01-23 17:33:17 +03:00
|
|
|
|
def opt_algorithm(self) -> BaseIdealDataBuilder:
|
|
|
|
|
|
return self._opt_algorithm
|
2024-12-03 17:21:22 +03:00
|
|
|
|
|
2025-01-23 17:33:17 +03:00
|
|
|
|
@opt_algorithm.setter
|
|
|
|
|
|
def opt_algorithm(self, opt_algorithm: BaseIdealDataBuilder):
|
|
|
|
|
|
self._opt_algorithm = opt_algorithm
|
2024-12-04 20:01:30 +03:00
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
|
def mediator(self) -> BaseMediator:
|
|
|
|
|
|
return self._mediator
|
|
|
|
|
|
|
|
|
|
|
|
@mediator.setter
|
|
|
|
|
|
def mediator(self, mediator: BaseMediator) -> None:
|
|
|
|
|
|
self._mediator = mediator
|