WSCAD mit Bezug auch zum laufen gebract. Noch viele Fragezeichen beim output...

This commit is contained in:
2025-07-03 09:04:07 +02:00
parent c5d638cf51
commit 709703e397
+49 -37
View File
@@ -347,7 +347,7 @@ class ExcelConverter:
return df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge
def excel_datei_beschreiben_wscad_bezug(self, pfad_ursprungsdatei, prefix_eingang, prefix_ausgang):
def excel_datei_beschreiben_wscad_bezug(self, ursprungdatei, prefix_eingang, prefix_ausgang):
"""
Konvertiert Daten für WSCAD mit Bezugsinformationen und schreibt sie in eine Excel-Datei.
Entspricht der PowerShell-Funktion ExcelDateiBeschreibenWSCAD_Bezug.
@@ -356,9 +356,6 @@ class ExcelConverter:
ausgaenge = []
fehler = []
with open(pfad_ursprungsdatei, 'r', encoding='utf-8') as f:
ursprungdatei = f.readlines()
for i, eintrag in enumerate(ursprungdatei):
eintragszeile = eintrag.strip().split("'")
bmk_zahl_raw = eintragszeile[1].strip()
@@ -395,40 +392,25 @@ class ExcelConverter:
eingaenge = self._anschluesse_ergaenzen(eingaenge)
ausgaenge = self._anschluesse_ergaenzen(ausgaenge)
df_fehler = pd.DataFrame(fehler).sort_values(by="Name")
df_eingaenge = pd.DataFrame(eingaenge).sort_values(by="Name")
df_ausgaenge = pd.DataFrame(ausgaenge).sort_values(by="Name")
df_fehler = pd.DataFrame(fehler)
if not df_fehler.empty:
df_fehler.sort_values(by="Name")
with pd.ExcelWriter(ziel_datei, engine='xlsxwriter') as writer:
workbook = writer.book
worksheet = writer.sheets[f'Sheet1'] # Standardblattname in xlsxwriter ist 'Sheet1'
# Set column D format to text
text_format = workbook.add_format({'num_format': '@'})
worksheet.set_column('D:D', None, text_format)
headers = ["Anschluss", "Kommentar", "Symboltext", "Bezug", "Sondertext 1", "Sondertext 2", "Sondertext 3", "Sondertext 4", "Sondertext 5", "Sondertext 6", "Sondertext 7", "Sondertext 8"]
for col_num, header in enumerate(headers):
worksheet.write(0, col_num, header)
row_num = 1
for df in [df_fehler, df_eingaenge, df_ausgaenge]:
for _, data in df.iterrows():
worksheet.write(row_num, 0, data['Name'])
worksheet.write(row_num, 1, data['Kommentar'])
worksheet.write(row_num, 2, "") # Symboltext
worksheet.write(row_num, 3, data['Bezug']) # Bezug
for col_offset in range(5, 13): # Sondertext 1 bis 8
worksheet.write(row_num, col_offset-1, "")
row_num += 1
gleiche_eingaenge = self._gleiche_finden(eingaenge)
gleiche_ausgaenge = self._gleiche_finden(ausgaenge)
if not fehler:
fehler.append({'Name': 'Keine', 'Zeile': 'Alle'})
df_gleiche_eingaenge = pd.DataFrame(gleiche_eingaenge)
if not df_gleiche_eingaenge.empty:
df_gleiche_eingaenge.sort_values(by="Name")
return gleiche_eingaenge, gleiche_ausgaenge, fehler
df_gleiche_ausgaenge = pd.DataFrame(gleiche_ausgaenge)
if not df_gleiche_ausgaenge.empty:
df_gleiche_ausgaenge.sort_values(by="Name")
df_eingaenge = pd.DataFrame(eingaenge).sort_values(by="Name")
df_ausgaenge = pd.DataFrame(ausgaenge).sort_values(by="Name")
return df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge
class IOConverterApp:
def __init__(self, master):
@@ -970,10 +952,12 @@ def call_portal_to_excel(self, textlines, konvertierungsart):
textlines, prefix_eingang, prefix_ausgang
)
return(df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge)
elif konvertierungsart == "WSCAD mit Bezug":
gleiche_eingaenge, gleiche_ausgaenge, fehler = ec.excel_datei_beschreiben_wscad_bezug(
df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge = ec.excel_datei_beschreiben_wscad_bezug(
textlines, prefix_eingang, prefix_ausgang
)
return(df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge)
all_duplicate_inputs.extend(gleiche_eingaenge)
all_duplicate_outputs.extend(gleiche_ausgaenge)
@@ -1030,9 +1014,6 @@ class TestPlant(unittest.TestCase):
df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_consts, df_tags = call_portal_to_excel(self, textarray, "TIA")
#print(df_consts)
#print(df_tags)
self.assertIn("DI0020", df_gleiche_eingaenge["NameOriginal"].values) # Püfen, ob doppelter Name in doppelteEingänge auftaucht
self.assertIn("MA1020", df_gleiche_ausgaenge["NameOriginal"].values) # Püfen, ob doppelter Name in doppelteAusgänge auftaucht
self.assertEqual(len(df_fehler), 1) # Fehler anzeigen: Zeile 4 Prefix XY
@@ -1057,6 +1038,34 @@ class TestPlant(unittest.TestCase):
df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge = call_portal_to_excel(self, textarray, "WSCAD")
print("\n Eingänge:\n")
print(df_eingaenge)
print("\n Ausgänge:\n")
print(df_ausgaenge)
#self.assertIn("DI0020", df_gleiche_eingaenge["Name"].values) # Püfen, ob doppelter Name in doppelteEingänge auftaucht
#self.assertIn("MA1020", df_gleiche_ausgaenge["Name"].values) # Püfen, ob doppelter Name in doppelteAusgänge auftaucht
self.assertEqual(len(df_fehler), 1) # Fehler anzeigen: Zeile 4 Prefix XY
self.assertEqual(len(df_eingaenge), 4) # Eigentlich 10 Zeilen lang, aber da Fehler nur 4 Eingänge
self.assertEqual(len(df_ausgaenge), 5) # 5 Ausgänge in Liste
def test_WSCAD_bezug(self):
textlines = """'DI0023','STEUERSPANNUNG 24V UC200 OK','24V OK','=A01+UH000-KF02i','STEUERSPANNUNG 24V UC200 OK','CONTROL VOLTAGE 24V UC200 OK','TENSION DE MANIOBRA 24V UC200 OK',''
'DI0020','STEUERSPANNUNG 24V UH000 OK','24V OK UH000','=A01+UH000-KF02i','STEUERSPANNUNG 24V UH000 OK','CONTROL VOLTAGE 24V UH000 OK','TENSION DE MANIOBRA 24V UH000 OK',''
'DI0020','STEUERSPANNUNG 24V UH000 OK','24V OK UH000','=A01+UH000-KF02i','STEUERSPANNUNG 24V UH000 OK','CONTROL VOLTAGE 24V UH000 OK','TENSION DE MANIOBRA 24V UH000 OK',''
'XY0022','STEUERSPANNUNG 24V UC103 ','24V OK','=A01+UH000-KF02i','STEUERSPANNUNG 24V UC103 OK','CONTROL VOLTAGE 24V UC103 OK','TENSION DE MANIOBRA 24V UC103 OK',''
'DI0021','STEUERSPANNUNG 24V UC102-UC101 OK','24V OK','=A01+UH000-KF02i','STEUERSPANNUNG 24V UC102-UC101 OK','CONTROL VOLTAGE 24V UC102-UC101 OK','TENSION DE MANIOBRA 24V UC102-UC101 OK',''
'KF0013','DRUCKL.-WARTUNGSEINH. SCHLIESSEN','COMPR. AIR OFF','=A01+UH000-KF01Q','DRUCKL.-WARTUNGSEINH. SCHLIESSEN','CLOSE PRESS.-MAINTENANCE UNIT','AIRE COMPRIMIDO/VÁLVULA DE AISLAMIENTO C',''
'KF0012','RESET NOT HALT','RESET E-STOP','=A01+UH000-KF01Q','RESET NOT HALT','RESET EMERGENCY STOP','RESET PARO DE EMERGENCIA',''
'PF0011','ÜBERSTROM/SICHERUNGSFALL','IL-YE-LED','=A01+UH000-KF01Q','ÜBERSTROM/SICHERUNGSFALL','OVERCURRENT/MIN. CIRCUIT BREAKERS','SOBREINTENSIDAD/FUSIBLE AUTOMÁTICO',''
'MA1020','ANTRIEB PUFFER F0101 FLYER 1','M-BI-LE','=A01+UC101-KF02Q','','','',''
'MA1020','ANTRIEB PUFFER F0101 FLYER 1','M-BI-LE','=A01+UC101-KF02Q','','','',''
"""
textarray = textlines.splitlines()
df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge = call_portal_to_excel(self, textarray, "WSCAD mit Bezug")
#print(df_eingaenge)
#print(df_ausgaenge)
@@ -1067,12 +1076,15 @@ class TestPlant(unittest.TestCase):
self.assertEqual(len(df_eingaenge), 4) # Eigentlich 10 Zeilen lang, aber da Fehler nur 4 Eingänge
self.assertEqual(len(df_ausgaenge), 5) # 5 Ausgänge in Liste
if __name__ == "__main__":
suite = unittest.TestSuite()
suite.addTest(TestPlant('test_TIA'))
suite.addTest(TestPlant('test_Simpel'))
suite.addTest(TestPlant('test_WSCAD'))
suite.addTest(TestPlant('test_WSCAD_bezug'))
runner = unittest.TextTestRunner()
runner.run(suite)