From c5d638cf51d8b6050d54d96ac1c162c1b47b847c Mon Sep 17 00:00:00 2001 From: lertlmaier Date: Wed, 2 Jul 2025 15:41:09 +0200 Subject: [PATCH] =?UTF-8?q?unittests=20f=C3=BCr=20Simpel,=20TIA,=20WSCAD?= =?UTF-8?q?=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/portalexport.py | 442 ++++++++++++++++++++++++++++---------------- 1 file changed, 285 insertions(+), 157 deletions(-) diff --git a/lib/portalexport.py b/lib/portalexport.py index 191e386..1d863ac 100644 --- a/lib/portalexport.py +++ b/lib/portalexport.py @@ -1,8 +1,7 @@ -import tkinter as tk -from tkinter import ttk, filedialog import os -import psutil # For listing drives, similar to Get-PSDrive in PowerShell import pandas as pd # Required by ExcelConverter +import unittest +import pandas.testing as pdt # Assuming the ExcelConverter class from the previous turn is available and pasted here class ExcelConverter: @@ -34,8 +33,6 @@ class ExcelConverter: gleiche.append(zu_ueberpruefen_sorted[i]) gleiche.append(zu_ueberpruefen_sorted[i+1]) - if not gleiche: - gleiche.append({'Name': 'Keine', 'Zeile': 'Alle'}) return gleiche def _anschluesse_ergaenzen(self, anschluesse): @@ -66,26 +63,23 @@ class ExcelConverter: new_entry = { 'Name': new_name, 'Kommentar': "", - 'Bezug': "" if 'Bezug' in anschluss else "" # Füge 'Bezug' hinzu, falls es in der ursprünglichen Struktur vorhanden war + 'Bezug': "" if 'Bezug' in anschluss else "", # Füge 'Bezug' hinzu, falls es in der ursprünglichen Struktur vorhanden war + 'Zeile': -1 # Von Loernz hinzugefügt da sonst code crasht, wenn später in _gleiche_finden über 'Zeile' iteriert wird } added_entries.append(new_entry) anschluesse.extend(added_entries) return sorted(anschluesse, key=lambda x: x['Name']) - - def excel_datei_beschreiben_simpel(self, pfad_ursprungsdatei, prefix_eingang, prefix_ausgang, ziel_datei): + def excel_datei_beschreiben_simpel(self, ursprungdatei, prefix_eingang, prefix_ausgang): """ Konvertiert Daten aus der Ursprungsdatei und schreibt sie in eine einfache Excel-Datei. - Entspricht der PowerShell-Funktion ExcelDateiBeschreibenSimpel. + Eingänge und Ausgänge in seperaten dataframes; Fehler nicht enthalten """ eingaenge = [] 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() @@ -108,41 +102,38 @@ class ExcelConverter: name = bmk_formatted fehler.append({'Name': name, 'Kommentar': kommentar, 'Zeile': i}) - df_fehler = pd.DataFrame(fehler).sort_values(by="Name") + df_fehler = pd.DataFrame(fehler) + if not df_fehler.empty: + df_fehler.sort_values(by="Name") + + + gleiche_eingaenge = self._gleiche_finden(eingaenge) + gleiche_ausgaenge = self._gleiche_finden(ausgaenge) + + df_gleiche_eingaenge = pd.DataFrame(gleiche_eingaenge) + if not df_gleiche_eingaenge.empty: + df_gleiche_eingaenge.sort_values(by="Name") + + 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") - with pd.ExcelWriter(ziel_datei, engine='xlsxwriter') as writer: - start_row = 0 - if not df_fehler.empty: - df_fehler.to_excel(writer, index=False, header=False, startrow=start_row, startcol=0) - start_row += len(df_fehler) - if not df_eingaenge.empty: - df_eingaenge.to_excel(writer, index=False, header=False, startrow=start_row, startcol=0) - start_row += len(df_eingaenge) - if not df_ausgaenge.empty: - df_ausgaenge.to_excel(writer, index=False, header=False, startrow=start_row, startcol=0) - gleiche_eingaenge = self._gleiche_finden(eingaenge) - gleiche_ausgaenge = self._gleiche_finden(ausgaenge) + return df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge - if not fehler: - fehler.append({'Name': 'Keine', 'Zeile': 'Alle'}) - - return gleiche_eingaenge, gleiche_ausgaenge, fehler - - def excel_datei_beschreiben_tia(self, pfad_ursprungsdatei, prefix_eingang, prefix_ausgang, ziel_datei): + def excel_datei_beschreiben_tia(self, ursprungdatei, prefix_eingang, prefix_ausgang): """ Konvertiert Daten für TIA Portal und schreibt sie in eine Excel-Datei mit zwei Blättern ("Constants" und "PLC Tags"). - Entspricht der PowerShell-Funktion ExcelDateiBeschreibenTIA. + Eingänge und Ausgänge gemeinsam jeweils in consts und tags; Fehler ebenfalls mit Prefix 'Err' enthalten. """ eingaenge = [] 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() @@ -177,108 +168,122 @@ class ExcelConverter: 'Zahl': int(bmk_numeric) if bmk_numeric else 0, # Convert to int 'Zeile': i }) - else: + else: # Hier wird Fehlerhafte BMK behandelt name = bmk_formatted name_constant = "cErr" + bmk_zahl_raw fehler.append({ 'Name': name, 'NameOriginal': bmk_zahl_raw, 'NameConstant': name_constant, + 'Kommentar': "Fehlerhafte BMK", # Zeile von Lorenz eingefügt, da sonst pandas mit Fehler, da kein Kommentar 'Zahl': i, # Original PowerShell uses 'i' for Zahl in Fehler, not bmk_numeric 'Zeile': i }) - - df_fehler = pd.DataFrame(fehler).sort_values(by="Zahl") - df_eingaenge = pd.DataFrame(eingaenge).sort_values(by="Zahl") - df_ausgaenge = pd.DataFrame(ausgaenge).sort_values(by="Zahl") - - with pd.ExcelWriter(ziel_datei, engine='xlsxwriter') as writer: - # Blatt "Constants" - df_constants_data = [] - j = 0 - for row in df_fehler.itertuples(): - df_constants_data.append({ - "Name": row.NameConstant, - "Path": "Import", - "Data Type": "Int", - "Value": j, - "Comment": "" - }) - j += 1 - for row in df_eingaenge.itertuples(): - df_constants_data.append({ - "Name": row.NameConstant, - "Path": "Import", - "Data Type": "Int", - "Value": j, - "Comment": "" - }) - j += 1 - for row in df_ausgaenge.itertuples(): - df_constants_data.append({ - "Name": row.NameConstant, - "Path": "Import", - "Data Type": "Int", - "Value": j, - "Comment": "" - }) - j += 1 - df_constants = pd.DataFrame(df_constants_data) - df_constants.to_excel(writer, sheet_name="Constants", index=False) - - # Blatt "PLC Tags" - df_plc_tags_data = [] - for row in df_fehler.itertuples(): - df_plc_tags_data.append({ - "Name": row.NameOriginal, - "Path": "Import", - "Data Type": "Bool", - "Logical Address": row.Name, - "Comment": row.Kommentar, - "Hmi Visible": "'True", - "Hmi Accessible": "'True", - "Hmi Writeable": "'True", - "Typeobject ID": "", - "Version ID": "" - }) - for row in df_eingaenge.itertuples() : - df_plc_tags_data.append({ - "Name": row.NameOriginal, - "Path": "Import", - "Data Type": "Bool", - "Logical Address": row.Name, - "Comment": row.Kommentar, - "Hmi Visible": "'True", - "Hmi Accessible": "'True", - "Hmi Writeable": "'True", - "Typeobject ID": "", - "Version ID": "" - }) - for row in df_ausgaenge.itertuples(): - df_plc_tags_data.append({ - "Name": row.NameOriginal, - "Path": "Import", - "Data Type": "Bool", - "Logical Address": row.Name, - "Comment": row.Kommentar, - "Hmi Visible": "'True", - "Hmi Accessible": "'True", - "Hmi Writeable": "'True", - "Typeobject ID": "", - "Version ID": "" - }) - df_plc_tags = pd.DataFrame(df_plc_tags_data) - df_plc_tags.to_excel(writer, sheet_name="PLC Tags", index=False) - + + df_fehler = pd.DataFrame(fehler) + if not df_fehler.empty: + df_fehler.sort_values(by="Zahl") + 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="Zahl") - 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="Zahl") - def excel_datei_beschreiben_wscad(self, pfad_ursprungsdatei, prefix_eingang, prefix_ausgang, ziel_datei): + df_eingaenge = pd.DataFrame(eingaenge).sort_values(by="Zahl") + df_ausgaenge = pd.DataFrame(ausgaenge).sort_values(by="Zahl") + + df_consts, df_tags = self.create_tia_dataframes(df_fehler, df_eingaenge, df_ausgaenge) + + return df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_consts, df_tags + + def create_tia_dataframes(self, df_fehler, df_eingaenge, df_ausgaenge): + """ + Hilfsfunktion für 'excel_datei_beschreiben_tia', die dataframes für spätere excel Ausgabe erzeugt ("Constants" und "PLC Tags"). + Eingänge und Ausgänge gemeinsam jeweils in consts und tags; Fehler ebenfalls mit Prefix 'Err' enthalten. + """ + df_constants_data = [] + j = 0 + for row in df_fehler.itertuples(): + df_constants_data.append({ + "Name": row.NameConstant, + "Path": "Import", + "Data Type": "Int", + "Value": j, + "Comment": "" + }) + j += 1 + for row in df_eingaenge.itertuples(): + df_constants_data.append({ + "Name": row.NameConstant, + "Path": "Import", + "Data Type": "Int", + "Value": j, + "Comment": "" + }) + j += 1 + for row in df_ausgaenge.itertuples(): + df_constants_data.append({ + "Name": row.NameConstant, + "Path": "Import", + "Data Type": "Int", + "Value": j, + "Comment": "" + }) + j += 1 + df_constants = pd.DataFrame(df_constants_data) + + # Blatt "PLC Tags" + df_plc_tags_data = [] + for row in df_fehler.itertuples(): + df_plc_tags_data.append({ + "Name": row.NameOriginal, + "Path": "Import", + "Data Type": "Bool", + "Logical Address": row.Name, + "Comment": row.Kommentar, + "Hmi Visible": "'True", + "Hmi Accessible": "'True", + "Hmi Writeable": "'True", + "Typeobject ID": "", + "Version ID": "" + }) + for row in df_eingaenge.itertuples() : + df_plc_tags_data.append({ + "Name": row.NameOriginal, + "Path": "Import", + "Data Type": "Bool", + "Logical Address": row.Name, + "Comment": row.Kommentar, + "Hmi Visible": "'True", + "Hmi Accessible": "'True", + "Hmi Writeable": "'True", + "Typeobject ID": "", + "Version ID": "" + }) + for row in df_ausgaenge.itertuples(): + df_plc_tags_data.append({ + "Name": row.NameOriginal, + "Path": "Import", + "Data Type": "Bool", + "Logical Address": row.Name, + "Comment": row.Kommentar, + "Hmi Visible": "'True", + "Hmi Accessible": "'True", + "Hmi Writeable": "'True", + "Typeobject ID": "", + "Version ID": "" + }) + df_plc_tags = pd.DataFrame(df_plc_tags_data) + + return (df_constants, df_plc_tags) + + def excel_datei_beschreiben_wscad(self, ursprungdatei, prefix_eingang, prefix_ausgang): """ Konvertiert Daten für WSCAD und schreibt sie in eine Excel-Datei. Entspricht der PowerShell-Funktion ExcelDateiBeschreibenWSCAD. @@ -287,9 +292,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() @@ -325,39 +327,27 @@ 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") - - with pd.ExcelWriter(ziel_datei, engine='xlsxwriter') as writer: - workbook = writer.book - worksheet = writer.sheets[f'Sheet1'] # Standardblattname in xlsxwriter ist 'Sheet1' - - 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']) - # Die restlichen Felder sind leer oder nicht in den ursprünglichen Daten - worksheet.write(row_num, 2, "") # Symboltext - worksheet.write(row_num, 3, "") # Bezug - for col_offset in range(5, 13): # Sondertext 1 bis 8 - worksheet.write(row_num, col_offset-1, "") - row_num += 1 - + df_fehler = pd.DataFrame(fehler) + if not df_fehler.empty: + df_fehler.sort_values(by="Name") + 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") - def excel_datei_beschreiben_wscad_bezug(self, pfad_ursprungsdatei, prefix_eingang, prefix_ausgang, ziel_datei): + 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 + + def excel_datei_beschreiben_wscad_bezug(self, pfad_ursprungsdatei, prefix_eingang, prefix_ausgang): """ Konvertiert Daten für WSCAD mit Bezugsinformationen und schreibt sie in eine Excel-Datei. Entspricht der PowerShell-Funktion ExcelDateiBeschreibenWSCAD_Bezug. @@ -943,8 +933,146 @@ class IOConverterApp: print("Target file settings saved.") print(self.target_file_configurations) +def call_portal_to_excel(self, textlines, konvertierungsart): + + ec = ExcelConverter() + + all_duplicate_inputs = [] + all_duplicate_outputs = [] + all_errors = [] + + prefix_eingang = "E" + prefix_ausgang = "A" + + target_path = os.environ.get("PROJECT_WORK") + #self.current_task_label.config(text=f"Erstelle Excel-Datei: {os.path.basename(ziel_datei)}") + + gleiche_eingaenge = [] + gleiche_ausgaenge = [] + fehler = [] + + if konvertierungsart == "Simpel": + # df_eingaenge, df_ausgaenge wird in excel Datei geschrieben. Hier zu Ausgabe hinzugefügt, damit unittest befüllt werden kann + df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge = ec.excel_datei_beschreiben_simpel( + textlines, prefix_eingang, prefix_ausgang + ) + return df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge + + elif konvertierungsart == "TIA": + # df_consts und df_tags wird in excel Datei geschrieben. Hier zu Ausgabe hinzugefügt, damit unittest befüllt werden kann + df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_consts, df_tags = ec.excel_datei_beschreiben_tia( + textlines, prefix_eingang, prefix_ausgang + ) + return(df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_consts, df_tags) + + elif konvertierungsart == "WSCAD": + df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge = ec.excel_datei_beschreiben_wscad( + 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( + textlines, prefix_eingang, prefix_ausgang + ) + + all_duplicate_inputs.extend(gleiche_eingaenge) + all_duplicate_outputs.extend(gleiche_ausgaenge) + all_errors.extend(fehler) + + + + #self.completed_tasks_listbox.insert(tk.END, f"ERFOLG: {os.path.basename(ziel_datei)}") + + #self.switch_to_duplicates_tab(all_duplicate_inputs, all_duplicate_outputs, all_errors) + +class TestPlant(unittest.TestCase): + + def test_Simpel(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, "Simpel") + + #print(df_gleiche_eingaenge) + #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_TIA(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_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 + + self.assertEqual(len(df_consts), len(textarray)) # wird für jede Zeile ein consts bzw tags erstellt? + self.assertEqual(len(df_tags), len(textarray)) # VORSICHT: Fehler kommt auch in Ausgabe mit Prefix 'Err' + + + def test_WSCAD(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") + + #print(df_eingaenge) + #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 if __name__ == "__main__": - root = tk.Tk() - app = IOConverterApp(root) - root.mainloop() + + suite = unittest.TestSuite() + suite.addTest(TestPlant('test_TIA')) + suite.addTest(TestPlant('test_Simpel')) + suite.addTest(TestPlant('test_WSCAD')) + + runner = unittest.TextTestRunner() + runner.run(suite) \ No newline at end of file