NX Lab

Thống kê số lượng chi tiết tiêu chuẩn (bu lông, đai ốc, vòng đệm) theo kích thước

#Python#Assembly#BOM1 lượt xem

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

    Câu hỏi ·

    Báo cáo mua hàng cần biết cần bao nhiêu bu lông M6, M8, M10. Nếu tên file có quy ước (BULONG_M8x30), regex trích kích thước và đếm được ngay.

    Thống kê số lượng chi tiết tiêu chuẩn (bu… Thống kê số lượng chi tiết tiêu chuẩn (bu…

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

    1. Quy ước tên. Ví dụ BULONG_M8x30, DAIOC_M8, DEM_M8.
    2. Viết regex. Trích loại, đường kính ren, chiều dài.
    3. Đếm theo khóa. (loại, M, dài).
    4. Sắp xếp. Theo loại rồi đường kính.
    5. Xuất danh sách mua. CSV.

    Code tham khảo (Python)

    import csv
    import os
    import re
    from collections import Counter
    import NXOpen
    
    MAU = re.compile(r"^(BULONG|DAIOC|DEM|VIT)_M(\d+(?:\.\d+)?)(?:[xX](\d+(?:\.\d+)?))?", re.IGNORECASE)
    
    def duyet_la(root):
        ngan_xep = list(root.GetChildren())
        while ngan_xep:
            c = ngan_xep.pop()
            con = c.GetChildren()
            if con:
                ngan_xep.extend(con)
            else:
                yield c
    
    def thong_ke(root):
        dem = Counter()
        khong_khop = []
        for c in duyet_la(root):
            ten = c.Prototype.Leaf if c.Prototype is not None else c.DisplayName
            m = MAU.match(ten)
            if m:
                loai, d, dai = m.group(1).upper(), m.group(2), m.group(3) or ""
                dem[(loai, "M" + d, dai)] += 1
            else:
                khong_khop.append(ten)
        return dem, khong_khop
    
    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
        dem, khong_khop = thong_ke(root)
        os.makedirs("D:/NXLab_xuat", exist_ok=True)
        with open("D:/NXLab_xuat/danh_sach_mua.csv", "w", newline="", encoding="utf-8-sig") as f:
            w = csv.writer(f)
            w.writerow(["loai", "ren", "chieu_dai", "so_luong"])
            for (loai, ren, dai), n in sorted(dem.items()):
                w.writerow([loai, ren, dai, n])
                lw.WriteLine("%-8s %-5s %-6s x %d" % (loai, ren, dai, n))
        lw.WriteLine("Không khớp quy ước tên: %d chi tiết" % len(khong_khop))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Biểu thức chính quy có ba nhóm bắt: loại, đường kính ren, chiều dài (tùy chọn).
    • Counter với khóa tuple đếm theo cả ba đặc điểm.
    • Chi tiết không khớp được báo riêng để bạn hoàn thiện quy ước đặt tên.

    Lỗi thường gặp

    • Quy ước tên phải nhất quán trong cả công ty; script chỉ tốt bằng dữ liệu nó đọc.
    • Bu lông lấy từ thư viện Teamcenter có thể có tên khác file; đọc thuộc tính thay vì tên file.

    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.