In TIA-Export und WSCAD-Export den Kommentar zu fehlerhaften BMK's angepasst, sodass BMK genannt wird.
Ausgelagerte Funktion für Duplikate und Error-Sheet erstellt und bei allen Export-Funktionen eingebaut
This commit is contained in:
+50
-44
@@ -254,7 +254,7 @@ class ExcelConverter:
|
||||
'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
|
||||
'Kommentar': f"Fehlerhafte BMK '{bmk_zahl_raw}'", # 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
|
||||
})
|
||||
@@ -398,7 +398,7 @@ class ExcelConverter:
|
||||
ausgaenge.append({'Name': name, 'Kommentar': kommentar, 'Zeile': i, 'Bezug': bezug})
|
||||
else:
|
||||
name = bmk_formatted
|
||||
fehler.append({'Name': name, 'Kommentar': kommentar, 'Zeile': i, 'Bezug': bezug})
|
||||
fehler.append({'Name': name, 'Kommentar': f"Fehlerhafte BMK '{bmk_zahl_raw}'", 'Zeile': i, 'Bezug': bezug})
|
||||
|
||||
eingaenge = self._anschluesse_ergaenzen(eingaenge)
|
||||
ausgaenge = self._anschluesse_ergaenzen(ausgaenge)
|
||||
@@ -459,19 +459,8 @@ class ExcelConverter:
|
||||
# Ausgaenge direkt drunter schreiben (ohne Header)
|
||||
df_ausgaenge.to_excel(writer, sheet_name='Ein-, Ausgaenge', index=False, startrow=start_row, header=False)
|
||||
|
||||
# Sheet mit Duplikaten
|
||||
start_row = 0
|
||||
# Gleiche Eingänge
|
||||
if not df_gleiche_eingaenge.empty:
|
||||
df_gleiche_eingaenge.to_excel(writer, sheet_name='Duplikate', index=False, startrow=start_row)
|
||||
start_row += len(df_gleiche_eingaenge) + 2 # Leerzeile
|
||||
# Gleiche Ausgänge
|
||||
if not df_gleiche_ausgaenge.empty:
|
||||
df_gleiche_ausgaenge.to_excel(writer, sheet_name='Duplikate', index=False, startrow=start_row, header=False)
|
||||
|
||||
# Fehler in eigenem Sheet
|
||||
if not df_fehler.empty:
|
||||
df_fehler.to_excel(writer, sheet_name='Fehler', index=False)
|
||||
# Duplikate und Errors
|
||||
self._write_duplicates_errors(writer, df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler)
|
||||
|
||||
elif export_type == "TIA":
|
||||
df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_consts, df_tags = dataframes
|
||||
@@ -483,20 +472,9 @@ class ExcelConverter:
|
||||
# 2. PLC Tags Sheet mit Header. Spalten: Name, Path, Data Type, Logical Address, Comment, Hmi Visible, Hmi Accessible, Hmi Writeable, Typeobject ID, Version ID
|
||||
df_tags.to_excel(writer, sheet_name='PLC Tags', index=False)
|
||||
|
||||
# Duplikate in "Duplikate" Sheet
|
||||
start_row = 0
|
||||
if not df_gleiche_eingaenge.empty or not df_gleiche_ausgaenge.empty:
|
||||
# Gleiche Eingänge
|
||||
if not df_gleiche_eingaenge.empty:
|
||||
df_gleiche_eingaenge.to_excel(writer, sheet_name='Duplikate', index=False, startrow=start_row)
|
||||
start_row += len(df_gleiche_eingaenge) + 2
|
||||
# Gleiche Ausgänge
|
||||
if not df_gleiche_ausgaenge.empty:
|
||||
df_gleiche_ausgaenge.to_excel(writer, sheet_name='Duplikate', index=False, startrow=start_row, header=False)
|
||||
# Duplikate und Errors
|
||||
self._write_duplicates_errors(writer, df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler)
|
||||
|
||||
# Fehler in eigenem Sheet
|
||||
if not df_fehler.empty:
|
||||
df_fehler.to_excel(writer, sheet_name='Fehler', index=False)
|
||||
|
||||
elif export_type == "WSCAD":
|
||||
df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge = dataframes
|
||||
@@ -525,8 +503,12 @@ class ExcelConverter:
|
||||
|
||||
with pd.ExcelWriter(export_path, engine="openpyxl") as writer:
|
||||
df_result.to_excel(writer, index=False, sheet_name="WSCAD")
|
||||
# Duplikate und Errors
|
||||
self._write_duplicates_errors(writer, df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler)
|
||||
|
||||
|
||||
elif export_type == "WSCAD mit Bezug":
|
||||
|
||||
df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge = dataframes
|
||||
|
||||
# Basis-Template
|
||||
@@ -547,13 +529,15 @@ class ExcelConverter:
|
||||
]
|
||||
)
|
||||
|
||||
df_result = self._append_df(df_result, df_fehler)
|
||||
df_result = self._append_df(df_result, df_eingaenge)
|
||||
df_result = self._append_df(df_result, df_ausgaenge)
|
||||
df_result = self._append_df(df_result, df_fehler, include_bezug=True)
|
||||
df_result = self._append_df(df_result, df_eingaenge, include_bezug=True)
|
||||
df_result = self._append_df(df_result, df_ausgaenge, include_bezug=True)
|
||||
|
||||
with pd.ExcelWriter(export_path, engine="openpyxl") as writer:
|
||||
df_result.to_excel(writer, index=False, sheet_name="WSCAD")
|
||||
|
||||
# Duplikate und Errors
|
||||
self._write_duplicates_errors(writer, df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler)
|
||||
|
||||
def _append_df(self, target_df, source_df, include_bezug=False):
|
||||
"""
|
||||
Hilfsfunktion, die Dataframes für WSCAD Export aneinander reiht und entweder Bezug inkludiert oder nicht
|
||||
@@ -563,7 +547,7 @@ class ExcelConverter:
|
||||
"Anschluss": source_df["Name"],
|
||||
"Kommentar": source_df["Kommentar"],
|
||||
"Symboltext": "",
|
||||
"Bezug": source_df["Bezug"] if include_bezug else "",
|
||||
"Bezug": source_df["Bezug"].apply(lambda x: f"'{x}" if pd.notna(x) else "") if include_bezug else "",
|
||||
"Sondertext 1": "",
|
||||
"Sondertext 2": "",
|
||||
"Sondertext 3": "",
|
||||
@@ -576,6 +560,30 @@ class ExcelConverter:
|
||||
tmp = pd.DataFrame(data)
|
||||
return pd.concat([target_df, tmp], ignore_index=True)
|
||||
|
||||
def _write_duplicates_errors(self, writer, df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler):
|
||||
"""
|
||||
Schreibt optional die Sheets 'Duplikate' und 'Fehler', falls Inhalte vorhanden sind.
|
||||
"""
|
||||
# Bezug-Spalte für Excel Darstellung vorbereiten
|
||||
for df in [df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler]:
|
||||
if "Bezug" in df.columns:
|
||||
df["Bezug"] = df["Bezug"].apply(lambda x: f"'{x}" if pd.notnull(x) else x)
|
||||
|
||||
|
||||
# Duplikate-Sheet
|
||||
if not df_gleiche_eingaenge.empty or not df_gleiche_ausgaenge.empty:
|
||||
start_row = 0
|
||||
if not df_gleiche_eingaenge.empty:
|
||||
df_gleiche_eingaenge.to_excel(writer, sheet_name='Duplikate', index=False, startrow=start_row)
|
||||
start_row += len(df_gleiche_eingaenge) + 2 # Abstand
|
||||
if not df_gleiche_ausgaenge.empty:
|
||||
df_gleiche_ausgaenge.to_excel(writer, sheet_name='Duplikate', index=False, startrow=start_row, header=False)
|
||||
|
||||
# Fehler-Sheet
|
||||
if not df_fehler.empty:
|
||||
df_fehler.to_excel(writer, sheet_name='Fehler', index=False)
|
||||
|
||||
|
||||
class IOConverterApp:
|
||||
def __init__(self, master):
|
||||
self.master = master
|
||||
@@ -1147,10 +1155,10 @@ class TestPlant(unittest.TestCase):
|
||||
|
||||
df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge = call_portal_to_excel(self, textarray, "Simpel")
|
||||
|
||||
print("\n Eingänge:\n")
|
||||
print(df_eingaenge)
|
||||
print("\n Ausgänge:\n")
|
||||
print(df_ausgaenge)
|
||||
# print("\n Eingänge:\n")
|
||||
# print(df_eingaenge)
|
||||
# print("\n Ausgänge:\n")
|
||||
# print(df_ausgaenge)
|
||||
|
||||
# print("\n gleiche Eingänge:\n")
|
||||
# print(df_gleiche_eingaenge)
|
||||
@@ -1162,8 +1170,6 @@ class TestPlant(unittest.TestCase):
|
||||
self.assertEqual(len(df_eingaenge), 4 - len(df_gleiche_eingaenge)) # 4 Eingänge in Liste, einer davon als Duplikat
|
||||
self.assertEqual(len(df_ausgaenge), 5 - len(df_gleiche_ausgaenge)) # 5 Ausgänge in Liste, einer davon Duplikat
|
||||
|
||||
|
||||
|
||||
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',''
|
||||
@@ -1219,10 +1225,10 @@ class TestPlant(unittest.TestCase):
|
||||
|
||||
df_gleiche_eingaenge, df_gleiche_ausgaenge, df_fehler, df_eingaenge, df_ausgaenge = call_portal_to_excel(self, textarray, "WSCAD mit Bezug")
|
||||
|
||||
# print("\n Eingänge:\n")
|
||||
# print(df_eingaenge)
|
||||
# print("\n Ausgänge:\n")
|
||||
# print(df_ausgaenge)
|
||||
print("\n Eingänge:\n")
|
||||
print(df_eingaenge)
|
||||
print("\n Ausgänge:\n")
|
||||
print(df_ausgaenge)
|
||||
|
||||
# print("\n Fehler")
|
||||
# print(df_fehler)
|
||||
@@ -1243,7 +1249,7 @@ if __name__ == "__main__":
|
||||
runner = unittest.TextTestRunner()
|
||||
runner.run(suite)
|
||||
|
||||
export_type_arr = ("Simpel", "TIA", "WSCAD", "WSCAD mit Bezug") # oder "WSCAD", etc.
|
||||
export_type_arr = ("Simpel", "TIA", "WSCAD", "WSCAD mit Bezug")
|
||||
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',''
|
||||
|
||||
Reference in New Issue
Block a user