NX Lab

Tổng hợp: danh mục kiểm tra assembly trước giao hàng (thiếu file, trùng tên, suppress, chưa lưu)

#Python#Assembly#Tổng hợp1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Bài tổng hợp nhóm assembly: gom các kiểm tra ở những bài trước thành một phiếu kiểm tra, in kết quả đạt hoặc lỗi cho từng mục để người thiết kế xử lý trước khi giao hàng.

    Tổng hợp: danh mục kiểm tra assembly trước… Tổng hợp: danh mục kiểm tra assembly trước…

    Các bước thực hiện

    1. Mục 1. Component thiếu file hoặc chưa nạp đủ.
    2. Mục 2. Tên instance trùng.
    3. Mục 3. Component đang bị suppress.
    4. Mục 4. Part có thay đổi chưa lưu.
    5. Kết luận. Đạt khi không có lỗi nặng.

    Code tham khảo (Python)

    import NXOpen
    
    def duyet(root):
        ngan_xep = list(root.GetChildren())
        while ngan_xep:
            c = ngan_xep.pop()
            yield c
            ngan_xep.extend(c.GetChildren())
    
    class KiemTra:
        def __init__(self, lw):
            self.lw = lw
            self.loi_nang = 0
            self.canh_bao = 0
    
        def muc(self, ten, vi_pham, nang=True):
            if vi_pham:
                if nang:
                    self.loi_nang += 1
                else:
                    self.canh_bao += 1
                self.lw.WriteLine("[%s] %s: %d" % ("LỖI" if nang else "CẢNH BÁO", ten, len(vi_pham)))
                for v in vi_pham[:10]:
                    self.lw.WriteLine("      - " + v)
                if len(vi_pham) > 10:
                    self.lw.WriteLine("      ... và %d mục nữa" % (len(vi_pham) - 10))
            else:
                self.lw.WriteLine("[ĐẠT] " + 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:
            lw.WriteLine("Part hiện tại không phải assembly")
            return
        tat_ca = list(duyet(root))
        kt = KiemTra(lw)
        kt.muc("Component thiếu file / chưa nạp", [c.DisplayName for c in tat_ca if c.Prototype is None])
        ten = [c.DisplayName for c in tat_ca]
        kt.muc("Tên instance trùng", sorted({t for t in ten if ten.count(t) > 1}), nang=False)
        kt.muc("Component đang bị suppress", [c.DisplayName for c in tat_ca if c.IsSuppressed], nang=False)
        chua_luu = [p.Leaf for p in session.Parts if p.IsModified]
        kt.muc("Part có thay đổi chưa lưu", chua_luu)
        lw.WriteLine("=" * 50)
        lw.WriteLine("KẾT LUẬN: %s (lỗi nặng %d, cảnh báo %d)" % (
            "ĐẠT" if kt.loi_nang == 0 else "CHƯA ĐẠT", kt.loi_nang, kt.canh_bao))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Lớp KiemTra gom cách in và đếm để mỗi mục chỉ cần một dòng gọi.
    • Phân biệt lỗi nặng và cảnh báo: thiếu file là lỗi nặng, tên trùng chỉ là cảnh báo.
    • Có thể thêm mục kiểm tra mới (va chạm, thuộc tính bắt buộc...) chỉ bằng một dòng kt.muc(...).

    Lỗi thường gặp

    • ten.count trong vòng lặp có độ phức tạp bình phương; với assembly lớn dùng Counter.
    • Kết luận 'ĐẠT' chỉ có ý nghĩa với các mục đã kiểm tra; liệt kê rõ phạm vi trong tài liệu nội bộ.

    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.