2024-11-08 10:50:18 +03:00
|
|
|
import pandas as pd
|
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
|
class DiagramParser:
|
2024-11-12 13:26:16 +03:00
|
|
|
def __init__(self, system_config: dict):
|
2024-11-08 10:50:18 +03:00
|
|
|
self.data = pd.DataFrame({})
|
2024-11-12 13:26:16 +03:00
|
|
|
self.signals = [system_config["Closure_signal"],
|
|
|
|
|
system_config["Squeeze_signal"],
|
|
|
|
|
system_config["Welding_signal"],
|
|
|
|
|
system_config["Release_signal"]]
|
|
|
|
|
|
|
|
|
|
self.boolDict = {}
|
|
|
|
|
self.floatDict = {}
|
|
|
|
|
self.timingsDict = {}
|
2024-11-12 13:46:36 +03:00
|
|
|
self.theor_mode = False
|
2024-11-08 10:50:18 +03:00
|
|
|
|
|
|
|
|
def setData(self, path):
|
2024-11-12 13:46:36 +03:00
|
|
|
if not path:
|
|
|
|
|
self.theor_mode = True
|
2024-11-12 14:34:07 +03:00
|
|
|
else:
|
|
|
|
|
self.data = pd.read_csv(path)
|
2024-11-12 13:46:36 +03:00
|
|
|
|
2024-11-12 14:34:07 +03:00
|
|
|
for signalName in self.data.columns:
|
|
|
|
|
if type (self.data[signalName].iloc[0]) == np.bool:
|
|
|
|
|
self.boolDict[signalName] = self._getBoolChanges(signalName)
|
2024-11-12 13:26:16 +03:00
|
|
|
|
2024-11-12 14:34:07 +03:00
|
|
|
for signalName in self.data.columns:
|
|
|
|
|
if type (self.data[signalName].iloc[0]) == np.float64:
|
|
|
|
|
self.floatDict[signalName] = self._getFloatChanges(signalName)
|
|
|
|
|
|
|
|
|
|
self.timingsDict["closure"] = [self.boolDict[self.signals[0]][1][0], self.boolDict[self.signals[0]][2][0]]
|
|
|
|
|
self.timingsDict["compression"] = [self.boolDict[self.signals[1]][1][0], self.boolDict[self.signals[1]][2][0]]
|
|
|
|
|
self.timingsDict["welding"] = [self.boolDict[self.signals[2]][1][0], self.boolDict[self.signals[2]][2][0]]
|
|
|
|
|
self.timingsDict["opening"] = [self.boolDict[self.signals[3]][1][0], self.boolDict[self.signals[3]][2][0]]
|
2024-11-12 13:26:16 +03:00
|
|
|
|
|
|
|
|
def getBoolDict (self) -> dict:
|
|
|
|
|
return self.boolDict
|
|
|
|
|
|
|
|
|
|
def getFloatDict (self) -> dict:
|
|
|
|
|
return self.floatDict
|
|
|
|
|
|
|
|
|
|
def getRealTimings(self) -> dict:
|
|
|
|
|
return self.timingsDict
|
2024-11-08 10:50:18 +03:00
|
|
|
|
2024-11-12 13:46:36 +03:00
|
|
|
def getMode(self) -> bool:
|
|
|
|
|
return self.theor_mode
|
|
|
|
|
|
2024-11-12 13:26:16 +03:00
|
|
|
def _getBoolChanges(self, signalName) -> list:
|
2024-11-08 10:50:18 +03:00
|
|
|
timeCode = self.data['time']
|
|
|
|
|
signal_values = self.data[signalName]
|
|
|
|
|
changes = []
|
|
|
|
|
|
|
|
|
|
if len(signal_values) > 0:
|
|
|
|
|
changes.append([float(timeCode.iloc[0]), 'high' if bool(signal_values.iloc[0]) else 'low'])
|
|
|
|
|
|
|
|
|
|
for i in range(1, len(signal_values)):
|
|
|
|
|
if signal_values.iloc[i] != signal_values.iloc[i - 1]:
|
2024-11-11 16:08:02 +03:00
|
|
|
changes.append([float(timeCode.iloc[i]), 'high' if bool(signal_values.iloc[i]) else 'low'])
|
2024-11-08 10:50:18 +03:00
|
|
|
|
|
|
|
|
return changes
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 13:26:16 +03:00
|
|
|
def _getFloatChanges(self, signalName) -> list:
|
2024-11-08 10:50:18 +03:00
|
|
|
timeCode = self.data['time']
|
|
|
|
|
signal_values = self.data[signalName]
|
|
|
|
|
changes = []
|
|
|
|
|
|
|
|
|
|
if len(signal_values) > 0:
|
|
|
|
|
for i in range (len(signal_values)):
|
|
|
|
|
changes.append([float(timeCode.iloc[i]), float(signal_values.iloc[i])])
|
|
|
|
|
|
|
|
|
|
return changes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-30 18:42:23 +03:00
|
|
|
|