2024-11-11 12:11:37 +03:00
|
|
|
from src.uml.request_generator import Request
|
2024-11-08 10:50:18 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class UMLCreator:
|
|
|
|
|
def __init__(self,
|
2024-11-11 16:08:02 +03:00
|
|
|
system_config: dict,
|
|
|
|
|
operator_config: dict,
|
2024-11-08 10:50:18 +03:00
|
|
|
request_generator: Request,
|
|
|
|
|
ideal_time: list[float],
|
|
|
|
|
bool_dict: dict,
|
|
|
|
|
float_dict: dict):
|
|
|
|
|
self._request_generator = request_generator
|
|
|
|
|
self._ideal_time = ideal_time
|
|
|
|
|
self.bool_dict = bool_dict
|
|
|
|
|
self.float_dict = float_dict
|
|
|
|
|
self.scaler = int(system_config['UML_time_scaler'])
|
2024-11-11 16:08:02 +03:00
|
|
|
self.WeldTime = operator_config['time_wielding']
|
2024-11-08 10:50:18 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def _build_data(self):
|
|
|
|
|
sig = [
|
2024-11-11 16:08:02 +03:00
|
|
|
"Closing",
|
|
|
|
|
"Relief",
|
|
|
|
|
"Squeeze",
|
|
|
|
|
"Welding"
|
2024-11-08 10:50:18 +03:00
|
|
|
]
|
2024-11-11 16:08:02 +03:00
|
|
|
closure = [self.bool_dict[sig[0]][1][0], self.bool_dict[sig[0]][2][0]]
|
|
|
|
|
compression = [self.bool_dict[sig[2]][1][0], self.bool_dict[sig[2]][2][0]]
|
|
|
|
|
opening = [self.bool_dict[sig[1]][1][0], self.bool_dict[sig[1]][-1][0]]
|
2024-11-08 10:50:18 +03:00
|
|
|
|
|
|
|
|
real_data = [
|
2024-11-11 16:08:02 +03:00
|
|
|
[closure[0]*self.scaler, 'closure #green'],
|
|
|
|
|
[closure[1]*self.scaler, '{-}'],
|
|
|
|
|
[compression[0]*self.scaler+0.0001, 'compression #green'],
|
|
|
|
|
[compression[1]*self.scaler, 'welding #green'],
|
|
|
|
|
[opening[0]*self.scaler+0.0001, 'opening #green'],
|
|
|
|
|
[opening[1]*self.scaler, '{-}'],
|
2024-11-08 10:50:18 +03:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
client_data = [
|
|
|
|
|
[0.0 * self.scaler, 'closure'],
|
|
|
|
|
[0.165 * self.scaler, '{-}'],
|
|
|
|
|
[0.166 * self.scaler, 'compression'],
|
|
|
|
|
[0.176 * self.scaler, '{-}'],
|
2024-11-11 16:08:02 +03:00
|
|
|
[0.180*self.scaler, 'welding'],
|
|
|
|
|
[0.200*self.scaler, '{-}'],
|
2024-11-08 10:50:18 +03:00
|
|
|
[0.210 * self.scaler, 'opening'],
|
|
|
|
|
[0.300 * self.scaler, '{-}'],
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
ideal_data = [
|
|
|
|
|
[0.0 * self.scaler, 'closure #yellow'],
|
|
|
|
|
[self._ideal_time[0] * self.scaler, '{-}'],
|
|
|
|
|
[(self._ideal_time[0] + 0.0001) * self.scaler, 'compression #yellow'],
|
|
|
|
|
[(self._ideal_time[0] + self._ideal_time[1]) * self.scaler, '{-}'],
|
2024-11-11 16:08:02 +03:00
|
|
|
[(self._ideal_time[0] + self._ideal_time[1]+ 0.0001) * self.scaler, 'welding #yellow'],
|
|
|
|
|
[(self._ideal_time[0] + self._ideal_time[1] + self.WeldTime)*self.scaler, '{-}'],
|
|
|
|
|
[(self._ideal_time[0] + self._ideal_time[1] + 0.0001 + self.WeldTime) * self.scaler, 'opening #yellow'],
|
|
|
|
|
[(self._ideal_time[0] + self._ideal_time[1] + self._ideal_time[2] + self.WeldTime) * self.scaler, '{-}'],
|
2024-11-08 10:50:18 +03:00
|
|
|
]
|
|
|
|
|
return real_data, client_data, ideal_data, self.bool_dict
|
|
|
|
|
|
|
|
|
|
def _get_time(self, signals = '', states = ''):
|
|
|
|
|
res = []
|
|
|
|
|
for i, sig in enumerate(signals):
|
|
|
|
|
if states: state = states[i]
|
|
|
|
|
else: state = 'high'
|
|
|
|
|
index1 = next ((i for i, _ in enumerate(self.bool_dict[sig]) if _[1]==state), -1)
|
|
|
|
|
time = self.bool_dict[sig][index1][0]
|
|
|
|
|
res.append(time)
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
def _generate_svg(self, real_data, client_data, ideal_data, bool_data) -> None:
|
|
|
|
|
try:
|
|
|
|
|
self._request_generator.clear()
|
|
|
|
|
self._request_generator.addLineStyle('biba', 'red', 2)
|
|
|
|
|
|
|
|
|
|
for i, [signal, changes] in enumerate(bool_data.items()):
|
|
|
|
|
name = 'bool_' + str(i)
|
2024-11-11 16:08:02 +03:00
|
|
|
times = []
|
|
|
|
|
for f in changes:
|
|
|
|
|
times.append([str(float(f[0])*self.scaler), f[1]])
|
2024-11-08 10:50:18 +03:00
|
|
|
self._request_generator.addBinary(name, str(signal), 'biba')
|
2024-11-11 16:08:02 +03:00
|
|
|
self._request_generator.setTimestamps(name, times)
|
2024-11-08 10:50:18 +03:00
|
|
|
|
|
|
|
|
self._request_generator.addConcise('RD', 'Real data')
|
|
|
|
|
self._request_generator.setTimestamps('RD', real_data)
|
|
|
|
|
self._request_generator.addConcise('CD', 'Client data')
|
|
|
|
|
self._request_generator.setTimestamps('CD', client_data)
|
|
|
|
|
self._request_generator.addConcise('ID', 'Ideal data')
|
|
|
|
|
self._request_generator.setTimestamps('ID', ideal_data)
|
|
|
|
|
|
|
|
|
|
self._request_generator.generateSVG()
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"SVG generate error: {e}")
|
|
|
|
|
|
2024-11-11 13:05:18 +03:00
|
|
|
def update_uml(self,
|
2024-11-11 16:08:02 +03:00
|
|
|
operator_config: dict,
|
2024-11-11 13:05:18 +03:00
|
|
|
system_config : dict,
|
|
|
|
|
request_generator: Request,
|
|
|
|
|
ideal_time: list[float],
|
|
|
|
|
bool_dict: dict,
|
|
|
|
|
float_dict: dict):
|
|
|
|
|
|
|
|
|
|
self._request_generator = request_generator
|
|
|
|
|
self._ideal_time = ideal_time
|
|
|
|
|
self.bool_dict = bool_dict
|
|
|
|
|
self.float_dict = float_dict
|
|
|
|
|
self.scaler = int(system_config['UML_time_scaler'])
|
2024-11-11 16:08:02 +03:00
|
|
|
self.WeldTime = operator_config['time_wielding']
|
2024-11-11 13:05:18 +03:00
|
|
|
|
2024-11-08 10:50:18 +03:00
|
|
|
real, client, ideal, bool_ = self._build_data()
|
|
|
|
|
self._generate_svg(real, client, ideal, bool_)
|