Suche nach doppelten Ids implementiert. Falls Doppelte Angaben vorhanden wird eine Fehlerdatei geschrieben

This commit is contained in:
2025-06-30 14:45:48 +02:00
parent 812c39b00d
commit 3f359486f9
2 changed files with 51 additions and 10 deletions
+51 -10
View File
@@ -80,9 +80,20 @@ def get_type_of_name_cfg(name):
return "unknown"
def get_attributes_of_insert(insert):
'''
Hier in Zukunft weniger Abfragen: IO und B und Reale_Position wird überflüssig wenn jeder Sensor nur noch eiun Block mit allen Attributen!
'''
"""
Diese Funktion schaut nach den aktuell definierten Attributen in den Blöcken
Bei den Sensoren in den alten Layouts gibt zwei immer übereinanderliegende Blöcke mit den Attributen:
- A, B (z.B. MA0062), C, ARTINR (z.B. 790902001), BESCHR (E-Teile für SEW Motor ASE1..), MENGE, POSITION, ...
- IO (z.B. MA0062), ID , VERW (z.B. CV-M0062_0,75), BEZEICHNUNG (Motor MA0062), KENNZEICHNUNG (z.B.=A01+UH01-KF1DQ04), ...
Die Adresse für das Routing kommt aus "KENNZEICHNUNG", während die Sivas Nummer aus "ARTINR" geholt werden muss
Einmal wird B zur ID, beim anderen IO
Erdungssymbole erhalten die ID aus dem Eintrag unter "NAME"
Hier in Zukunft weniger Abfragen: IO und B und Reale_Position wird überflüssig wenn jeder Sensor nur noch ein Block mit allen Attributen!
"""
id = ""
ld = dict()
typ = 'unknown'
@@ -127,10 +138,23 @@ def get_attributes_of_insert(insert):
return (ld, id, typ)
def check_double_ids(ld, id, allSensors):
if id in allSensors and "NAME" in ld:
return True
if id in allSensors and "B" in ld and "B" in allSensors[id]:
return True
if id in allSensors and "IO" in ld and "IO" in allSensors[id]:
return True
return False
def extract_input_positions(insert_iterable) -> tuple:
allSensors = dict()
allCables = dict()
allunknowns = dict()
doubleIds = list()
allSchaltschrank = dict()
for insert in insert_iterable:
@@ -142,7 +166,14 @@ def extract_input_positions(insert_iterable) -> tuple:
if typ == "Sensor":
if id and "pos" in ld and isinstance(ld["pos"], tuple) and len(ld["pos"]) == 2:
if id in allSensors:
allSensors[id] = merge_two_dicts(allSensors[id], ld) #Kombiniert alle infos aus dxf und "pos"
is_double = check_double_ids(ld, id, allSensors)
if not is_double:
allSensors[id] = merge_two_dicts(allSensors[id], ld) #Kombiniert alle infos aus dxf und "pos"
else:
# gib aus wo sich beide gleichlautenden Elemente auf der Zeichnung befinden
doubleIds.append((id, allSensors[id]["pos"]) )
doubleIds.append((id, ld["pos"]) )
else:
allSensors[id] = ld
elif typ == "Kabel":
@@ -152,7 +183,7 @@ def extract_input_positions(insert_iterable) -> tuple:
else:
allunknowns[id] = ld
return allSensors, allCables
return allSensors, doubleIds
def get_input_positions(msp) -> tuple:
return extract_input_positions(msp.query('INSERT'))
@@ -266,7 +297,8 @@ def get_tunnel_positions(msp):
allTunnels[tunnelname].append(pos)
else:
allTunnels[tunnelname].append(pos)
allTunnels['length'] = tunnel_length
if len(allTunnels.keys()) > 0:
allTunnels['length'] = tunnel_length
return allTunnels
def get_tunnel_positions_iter(dxf_path):
@@ -299,8 +331,8 @@ def get_tunnel_positions_iter(dxf_path):
allTunnels[tunnelname] = []
allTunnels[tunnelname].append(pos)
tunnel_length[tunnelname] = laenge
allTunnels['length'] = tunnel_length
if len(tunnel_length.keys()) > 0:
allTunnels['length'] = tunnel_length
return allTunnels
# helper function
@@ -490,6 +522,7 @@ if __name__ == '__main__':
parser.add_argument('-r', '--rack', action='store_true', help='fetch all positions of all cable racks')
parser.add_argument('-w', '--write', action='store', help='write results into a json file')
parser.add_argument('-c', '--console', action='store_true', help='print results to output')
parser.add_argument('-e', '--errors', action='store', help='write an error file in case of double defined items in layout')
parser.add_argument('-n', '--scan', action='store_true', help='print all layer of racs, distributes and equiment not empty')
args = parser.parse_args()
@@ -548,9 +581,16 @@ if __name__ == '__main__':
if args.sensors:
# Sensoren auslesen
if use_iter:
res_sens, res_cables = get_input_positions_iter(dxf_path)
res_sens, res_double = get_input_positions_iter(dxf_path)
else:
res_sens, res_cables = get_input_positions(msp)
res_sens, res_double = get_input_positions(msp)
if args.errors and len(res_double) > 0:
err_ids = set()
for item in res_double:
err_ids.add(item[0])
write_results(to_json(list(err_ids)), work_dir, args.errors)
output_results['sensors'] = res_sens
#output_results['cables'] = res_cables
@@ -603,6 +643,7 @@ if __name__ == '__main__':
res_not_found = check_existance(res_mappings, res_dist, res_sens)
res_not_found["missing_attributes"] = warnings
output_results["not_found"] = res_not_found
output_results["double_ids"] = res_double
write_results(to_json(output_results), work_dir, f"{basename}.json")
else: