
Cảnh báo tên component trùng và part dùng nhiều lần với tên khác nhau trong assembly
#Python#Assembly#Kiểm tra1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Hai component trùng tên instance gây khó khăn khi script tìm theo tên; cùng một part nhưng nhiều tên khác nhau lại làm BOM khó hiểu. Kiểm tra hai điều này trước khi giao hàng.
Cảnh báo tên component trùng và part dùng…Các bước thực hiện
- Thu thập tên instance. DisplayName của mọi component.
- Tìm trùng. Counter trên tên.
- Gom tên theo part. Dict part gốc -> tập tên instance.
- Báo trùng tên. Các tên xuất hiện nhiều hơn một lần.
- Báo part nhiều tên. Các part có hơn một tên instance.
Code tham khảo (Python)
from collections import Counter, defaultdict import NXOpen def duyet(root): ngan_xep = list(root.GetChildren()) while ngan_xep: c = ngan_xep.pop() yield c ngan_xep.extend(c.GetChildren()) def phan_tich(root): dem_ten = Counter() ten_theo_part = defaultdict(set) for c in duyet(root): dem_ten[c.DisplayName] += 1 p = c.Prototype if p is not None: ten_theo_part[p.FullPath].add(c.DisplayName) trung = {t: n for t, n in dem_ten.items() if n > 1} nhieu_ten = {k: v for k, v in ten_theo_part.items() if len(v) > 1} return trung, nhieu_ten def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Display root = part.ComponentAssembly.RootComponent if part else None if root is None: return trung, nhieu_ten = phan_tich(root) lw.WriteLine("== Tên instance trùng (%d) ==" % len(trung)) for t, n in sorted(trung.items()): lw.WriteLine(" %-24s x %d" % (t, n)) lw.WriteLine("== Part có nhiều tên instance (%d) ==" % len(nhieu_ten)) for k, v in nhieu_ten.items(): lw.WriteLine(" %s -> %s" % (k.split("/")[-1], ", ".join(sorted(v)))) if __name__ == "__main__": main()Giải thích code
- Tên trùng là bình thường nếu ở các nhánh khác nhau, nhưng đáng chú ý khi script dùng tên để tìm.
defaultdict(set)gom tên theo part mà không cần khởi tạo từng khóa.- Kết quả là danh sách để người thiết kế quyết định đổi tên cho thống nhất.
Lỗi thường gặp
- Tên instance NX tự thêm hậu tố khi trùng; sau khi đổi tên cần lưu assembly.
- Với assembly lấy từ Teamcenter, DisplayName có thể kèm số phiên bản; chuẩn hóa trước khi so sánh.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.