From 709703e3972210c5606c99bcbbb678a56444800c Mon Sep 17 00:00:00 2001 From: lertlmaier Date: Thu, 3 Jul 2025 09:04:07 +0200 Subject: [PATCH] WSCAD mit Bezug auch zum laufen gebract. Noch viele Fragezeichen beim output... --- lib/portalexport.py | 86 ++++++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/lib/portalexport.py b/lib/portalexport.py index 1d863ac..71129b5 100644 --- a/lib/portalexport.py +++ b/lib/portalexport.py @@ -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) \ No newline at end of file