Warnungen werden jetzt immer als ganze Sektion auch in die .json von getpositions mit rausgeschrieben
This commit is contained in:
@@ -198,14 +198,15 @@ Die folgende Tabelle zeigt alle möglichen Fehler- und Warnungstypen, die von `g
|
|||||||
|
|
||||||
| Fehlertyp | Kategorie | Beschreibung | Ursache | Behebung |
|
| Fehlertyp | Kategorie | Beschreibung | Ursache | Behebung |
|
||||||
|-----------|-----------|--------------|---------|----------|
|
|-----------|-----------|--------------|---------|----------|
|
||||||
| `double_ids` | Fehler | Mehrere Blöcke haben dieselbe ID (z.B. MA0062@1) | Doppelte Bauteile mit identischer Kennzeichnung und SPS-Präfix im Layout | IDs eindeutig vergeben oder doppelte Blöcke entfernen |
|
| `double_ids` | Fehler | Mehrere Blöcke haben dieselbe ID (z.B. MA0062@1) | Doppelte Bauteile mit identischer Kennzeichnung und SPS-Präfix im Layout | IDs eindeutig vergeben oder doppelte Blöcke entfernen |
|
||||||
| `missing_attributes` | Warnung | Block hat fehlende oder unvollständige Attribute | Block enthält z.B. nur A, B, C, ARTINR aber keine SPS-, IO- oder KENNZEICHNUNG-Attribute | Fehlende Attribute im DXF-Block ergänzen (z.B. SPS, KENNZEICHNUNG) |
|
| `missing_attributes` | Warnung | Block hat fehlende oder unvollständige Attribute | Block enthält z.B. nur A, B, C, ARTINR aber keine SPS-, IO- oder KENNZEICHNUNG-Attribute | Fehlende Attribute im DXF-Block ergänzen (z.B. SPS, KENNZEICHNUNG) |
|
||||||
| `missing_distributors` | Fehler | Unterverteiler in KENNZEICHNUNG erwähnt aber nicht im Layout | Sensor verweist auf UV (z.B. UH01) in KENNZEICHNUNG, aber UV-Symbol fehlt im Layout | Unterverteiler-Block im Layout positionieren oder KENNZEICHNUNG korrigieren |
|
| `missing_distributors` | Fehler | Unterverteiler in KENNZEICHNUNG erwähnt aber nicht im Layout | Sensor verweist auf UV (z.B. UH01) in KENNZEICHNUNG, aber UV-Symbol fehlt im Layout | Unterverteiler-Block im Layout positionieren oder KENNZEICHNUNG korrigieren |
|
||||||
| `missing_sensors` | Fehler | Sensor/Aktor nicht gefunden | Sensor wird in Mappings referenziert, aber Block fehlt oder hat ungültige Attribute | Sensor-Block im Layout ergänzen oder fehlerhafte Attribute korrigieren |
|
| `missing_sensors` | Fehler | Sensor/Aktor nicht gefunden | Sensor wird in Mappings referenziert, aber Block fehlt oder hat ungültige Attribute | Sensor-Block im Layout ergänzen oder fehlerhafte Attribute korrigieren |
|
||||||
| `missing_tunnel` | Fehler | Tunnel hat weniger als 2 Positionen | Tunnel-Eingang oder -Ausgang fehlt (TUNNEL-Block oder MTEXT mit Muster `TUNNEL<nr>-<länge>`) | Zweiten Tunnel-Eingang/Ausgang im Layout ergänzen |
|
| `missing_tunnel` | Fehler | Tunnel hat weniger als 2 Positionen | Tunnel-Eingang oder -Ausgang fehlt (TUNNEL-Block oder MTEXT mit Muster `TUNNEL<nr>-<länge>`) | Zweiten Tunnel-Eingang/Ausgang im Layout ergänzen |
|
||||||
| `overdefined_tunnel` | Fehler | Tunnel hat mehr als 2 Positionen | Mehr als zwei TUNNEL-Blöcke mit demselben Namen (z.B. TUNNEL2 dreimal) | Überzählige Tunnel-Positionen entfernen |
|
| `overdefined_tunnel` | Fehler | Tunnel hat mehr als 2 Positionen | Mehr als zwei TUNNEL-Blöcke mit demselben Namen (z.B. TUNNEL2 dreimal) | Überzählige Tunnel-Positionen entfernen |
|
||||||
| `mapping_warnings` → `keine KENNZEICHNUNG vorhanden` | Warnung | KENNZEICHNUNG-Attribut fehlt komplett | Block hat kein KENNZEICHNUNG-Attribut | KENNZEICHNUNG-Attribut im Format `=<Anlage>+<UV>-<Karte>` ergänzen |
|
| `tunnel_missing_length` | Warnung | Tunnel-Block hat kein LAENGE-Attribut | LAENGE-Attribut fehlt in Tunnel-Block, Default-Länge (5m) wird verwendet | LAENGE-Attribut im Tunnel-Block ergänzen |
|
||||||
| `mapping_warnings` → `Ungültiger Pfad in Kennzeichnung` | Warnung | KENNZEICHNUNG hat falsches Format | Trennzeichen `+`, `-` oder `=` fehlen oder falsch positioniert | KENNZEICHNUNG-Format korrigieren (z.B. `=A01+UH01-KF1DQ04`) |
|
| `mapping_warnings` → `keine KENNZEICHNUNG vorhanden` | Warnung | KENNZEICHNUNG-Attribut fehlt komplett | Block hat kein KENNZEICHNUNG-Attribut | KENNZEICHNUNG-Attribut im Format `=<Anlage>+<UV>-<Karte>` ergänzen |
|
||||||
|
| `mapping_warnings` → `Ungültiger Pfad in Kennzeichnung` | Warnung | KENNZEICHNUNG hat falsches Format | Trennzeichen `+`, `-` oder `=` fehlen oder falsch positioniert | KENNZEICHNUNG-Format korrigieren (z.B. `=A01+UH01-KF1DQ04`) |
|
||||||
| `missing_sps_prefix` | Fehler | SPS-Präfix fehlt für Block-ID | Beim Zusammenführen von Blöcken fehlt der SPS-Präfix | SPS-Attribut in Block ergänzen |
|
| `missing_sps_prefix` | Fehler | SPS-Präfix fehlt für Block-ID | Beim Zusammenführen von Blöcken fehlt der SPS-Präfix | SPS-Attribut in Block ergänzen |
|
||||||
|
|
||||||
## Struktur der Error-JSON-Datei
|
## Struktur der Error-JSON-Datei
|
||||||
@@ -225,6 +226,9 @@ Die `*_errors.json`-Datei ist wie folgt strukturiert:
|
|||||||
},
|
},
|
||||||
"mapping_warnings": {
|
"mapping_warnings": {
|
||||||
"MA0099": "keine KENNZEICHNUNG vorhanden"
|
"MA0099": "keine KENNZEICHNUNG vorhanden"
|
||||||
|
},
|
||||||
|
"tunnel_missing_length": {
|
||||||
|
"TUNNEL1": "Tunnel 'TUNNEL1' hat keine LAENGE-Angabe. Verwende Default-Länge: 5m"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+23
-14
@@ -583,49 +583,57 @@ def get_subdistributor_positions_from_symbols(all_inserts:list, all_positions:li
|
|||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
def get_tunnel_positions_from_symbols(all_inserts: list, all_positions: list) -> dict:
|
def get_tunnel_positions_from_symbols(all_inserts: list, all_positions: list, error_collector: ErrorCollector = None) -> dict:
|
||||||
"""Ermittelt Tunnel-Positionen aus allen Symbolen
|
"""Ermittelt Tunnel-Positionen aus allen Symbolen
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
all_inserts: Liste von Dictionaries mit Attribut-Tags und deren Textwerten
|
all_inserts: Liste von Dictionaries mit Attribut-Tags und deren Textwerten
|
||||||
all_positions: Liste von Dictionaries mit Attribut-Tags und deren (x, y, z)-Positionen
|
all_positions: Liste von Dictionaries mit Attribut-Tags und deren (x, y, z)-Positionen
|
||||||
|
error_collector: ErrorCollector instance to collect errors and warnings
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Dictionary mit Tunnelnamen als Keys und Listen von Positionen als Values
|
Dictionary mit Tunnelnamen als Keys und Listen von Positionen als Values
|
||||||
Format: {'Tunnel1': [(x1, y1), (x2, y2)], ..., 'length': {'Tunnel1': 'laenge_wert', ...}}
|
Format: {'Tunnel1': [(x1, y1), (x2, y2)], ..., 'length': {'Tunnel1': 'laenge_wert', ...}}
|
||||||
"""
|
"""
|
||||||
ret = {}
|
ret = {}
|
||||||
tunnel_length = {}
|
tunnel_length = {}
|
||||||
|
tunnel_missing_length = {}
|
||||||
default_length = "5" # Default-Länge in Metern
|
default_length = "5" # Default-Länge in Metern
|
||||||
|
|
||||||
for insert, pos in zip(all_inserts, all_positions):
|
for insert, pos in zip(all_inserts, all_positions):
|
||||||
if "NAME" not in insert: # Tunnel haben immer einen eindeutigen Namen
|
if "NAME" not in insert: # Tunnel haben immer einen eindeutigen Namen
|
||||||
continue
|
continue
|
||||||
|
|
||||||
ld, id_ = get_tunnel_position_of_symbol(insert, pos)
|
ld, id_ = get_tunnel_position_of_symbol(insert, pos)
|
||||||
if not ld or not id_:
|
if not ld or not id_:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Check if id_ matches Tunnel-Pattern from BMK.cfg
|
# Check if id_ matches Tunnel-Pattern from BMK.cfg
|
||||||
if not matches_tunnel_pattern(id_):
|
if not matches_tunnel_pattern(id_):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Sammle alle Positionen für den gleichen Tunnelnamen
|
# Sammle alle Positionen für den gleichen Tunnelnamen
|
||||||
if id_ not in ret:
|
if id_ not in ret:
|
||||||
ret[id_] = []
|
ret[id_] = []
|
||||||
ret[id_].append(ld["pos"])
|
ret[id_].append(ld["pos"])
|
||||||
|
|
||||||
# Sammle Längeninformation falls vorhanden, sonst Default verwenden
|
# Sammle Längeninformation falls vorhanden, sonst Default verwenden
|
||||||
if "laenge" in ld and ld["laenge"]:
|
if "laenge" in ld and ld["laenge"]:
|
||||||
tunnel_length[id_] = ld["laenge"]
|
tunnel_length[id_] = ld["laenge"]
|
||||||
else:
|
else:
|
||||||
print(f"WARNUNG: Tunnel '{id_}' hat keine LAENGE-Angabe. Verwende Default-Länge: {default_length}m")
|
warning_msg = f"Tunnel '{id_}' hat keine LAENGE-Angabe. Verwende Default-Länge: {default_length}m"
|
||||||
|
print(f"WARNUNG: {warning_msg}")
|
||||||
|
tunnel_missing_length[id_] = warning_msg
|
||||||
tunnel_length[id_] = default_length
|
tunnel_length[id_] = default_length
|
||||||
|
|
||||||
|
# Warnings zum ErrorCollector hinzufügen
|
||||||
|
if error_collector and tunnel_missing_length:
|
||||||
|
error_collector.add_warnings({"tunnel_missing_length": tunnel_missing_length})
|
||||||
|
|
||||||
# Füge Längeninformation hinzu, falls Tunnel gefunden wurden
|
# Füge Längeninformation hinzu, falls Tunnel gefunden wurden
|
||||||
if len(tunnel_length) > 0:
|
if len(tunnel_length) > 0:
|
||||||
ret['length'] = tunnel_length
|
ret['length'] = tunnel_length
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
@@ -995,7 +1003,7 @@ if __name__ == '__main__':
|
|||||||
# die Infos aus den Texten (alter Stil)
|
# die Infos aus den Texten (alter Stil)
|
||||||
res_tunnel = get_tunnel_positions_from_entities(t_entities)
|
res_tunnel = get_tunnel_positions_from_entities(t_entities)
|
||||||
# die Infos aus den Blöcken (neuer Stil)
|
# die Infos aus den Blöcken (neuer Stil)
|
||||||
symbol_tunnels = get_tunnel_positions_from_symbols(all_inserts, all_positions)
|
symbol_tunnels = get_tunnel_positions_from_symbols(all_inserts, all_positions, error_collector)
|
||||||
res_tunnel = merge_two_dicts(res_tunnel, symbol_tunnels)
|
res_tunnel = merge_two_dicts(res_tunnel, symbol_tunnels)
|
||||||
output_results['tunnels'] = res_tunnel
|
output_results['tunnels'] = res_tunnel
|
||||||
if args.console:
|
if args.console:
|
||||||
@@ -1021,6 +1029,9 @@ if __name__ == '__main__':
|
|||||||
# Alle weiteren Fehler zum ErrorCollector hinzufügen
|
# Alle weiteren Fehler zum ErrorCollector hinzufügen
|
||||||
error_collector.add_errors(res_not_found)
|
error_collector.add_errors(res_not_found)
|
||||||
|
|
||||||
|
# Warnings immer in output_results schreiben (auch wenn leer)
|
||||||
|
output_results["warnings"] = error_collector.warnings if error_collector.warnings else {}
|
||||||
|
|
||||||
# ErrorCollector schreibt Datei nur wenn Fehler/Warnungen vorhanden
|
# ErrorCollector schreibt Datei nur wenn Fehler/Warnungen vorhanden
|
||||||
if args.errors:
|
if args.errors:
|
||||||
error_collector.write_errorfile(work_dir, args.errors)
|
error_collector.write_errorfile(work_dir, args.errors)
|
||||||
@@ -1031,8 +1042,6 @@ if __name__ == '__main__':
|
|||||||
output_results["not_found"] = all_issues["errors"].get("not_found", {})
|
output_results["not_found"] = all_issues["errors"].get("not_found", {})
|
||||||
if "double_ids" in all_issues["errors"]:
|
if "double_ids" in all_issues["errors"]:
|
||||||
output_results["double_ids"] = all_issues["errors"]["double_ids"]
|
output_results["double_ids"] = all_issues["errors"]["double_ids"]
|
||||||
if "missing_attributes" in all_issues.get("warnings", {}):
|
|
||||||
output_results["not_found"]["missing_attributes"] = all_issues["warnings"]["missing_attributes"]
|
|
||||||
|
|
||||||
|
|
||||||
write_results(to_json(output_results), work_dir, f"{basename}.json")
|
write_results(to_json(output_results), work_dir, f"{basename}.json")
|
||||||
|
|||||||
Reference in New Issue
Block a user