#!/usr/bin/env python3 # -*- coding: utf-8 -*- from agv_pathfinder import AGVMap def show_map_info(): """맵 정보 출력: RFID 목록과 연결 정보""" print("=== AGV 맵 정보 ===") # 맵 로드 agv_map = AGVMap() agv_map.load_from_file(r"C:\Data\Source\(5613#) ENIG AGV\Source\Cs_HMI\Data\NewMap.agvmap") print(f"총 노드 수: {len(agv_map.nodes)}") # RFID 목록 수집 및 정렬 rfid_nodes = [] for node in agv_map.nodes.values(): if node.rfid_id: rfid_nodes.append((node.rfid_id, node)) # RFID 번호순으로 정렬 rfid_nodes.sort(key=lambda x: int(x[0]) if x[0].isdigit() else 999) print(f"RFID 노드 수: {len(rfid_nodes)}") # RFID 목록 출력 (10개씩 줄바꿈) print("\n--- RFID 목록 ---") rfid_list = [rfid for rfid, _ in rfid_nodes] for i, rfid in enumerate(rfid_list): if i % 10 == 0: print() # 10개마다 줄바꿈 print(f"{rfid:>3}", end=" ") print() # 마지막 줄바꿈 # 연결 정보 출력 print("\n--- RFID 연결 정보 ---") for rfid, node in rfid_nodes: # 노드 타입 정보 type_str = "" if node.node_type == 2: type_str = f"[Station/Buffer, DockDir:{node.dock_direction}]" elif node.node_type == 3: type_str = f"[Charger, DockDir:{node.dock_direction}]" else: type_str = f"[Type:{node.node_type}]" # 연결된 노드들의 RFID 찾기 connected_rfids = [] for connected_node in node.connected_nodes: connected_node_obj = agv_map.nodes.get(connected_node) if connected_node_obj and connected_node_obj.rfid_id: connected_rfids.append(connected_node_obj.rfid_id) # RFID 번호순으로 정렬 connected_rfids.sort(key=lambda x: int(x) if x.isdigit() else 999) connected_str = " -> ".join(connected_rfids) if connected_rfids else "없음" print(f"RFID {rfid:>3} {type_str:<25} Pos:({node.position[0]:>4},{node.position[1]:>4}) -> {connected_str}") # 갈림길(Junction) 정보 print("\n--- 갈림길 정보 (연결 노드 3개 이상) ---") junctions = [] for rfid, node in rfid_nodes: connection_count = len([n for n in node.connected_nodes if agv_map.nodes.get(n)]) if connection_count >= 3: junctions.append(rfid) print(f"갈림길 RFID ({len(junctions)}개): {', '.join(junctions)}") # 특별 노드 분류 print("\n--- 노드 타입별 분류 ---") chargers = [] stations = [] normal = [] for rfid, node in rfid_nodes: if node.node_type == 3: chargers.append(rfid) elif node.node_type == 2: stations.append(rfid) else: normal.append(rfid) print(f"충전기 ({len(chargers)}개): {', '.join(chargers)}") print(f"스테이션/버퍼 ({len(stations)}개): {', '.join(stations)}") print(f"일반 노드 ({len(normal)}개): {', '.join(normal)}") if __name__ == "__main__": show_map_info()