NX Lab

Tổng hợp: bộ kiểm tra và chuẩn hóa metadata cho thư mục dự án (kiểm tra, sửa, báo cáo)

#Python#Tổng hợp#Attribute1 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 thuộc tính: một script quét thư mục, kiểm tra theo lược đồ, tự sửa những lỗi an toàn (chuẩn hóa chữ hoa, bỏ khoảng trắng thừa, điền ngày), và xuất báo cáo cho những lỗi cần người xử lý.

    Tổng hợp: bộ kiểm tra và chuẩn hóa… Tổng hợp: bộ kiểm tra và chuẩn hóa…

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

    1. Định nghĩa lược đồ. Thuộc tính bắt buộc, giá trị cho phép.
    2. Quét và mở từng part. Đọc thuộc tính.
    3. Tự sửa lỗi an toàn. Chuẩn hóa hoa/thường, cắt khoảng trắng.
    4. Ghi lại lỗi cần người xử lý. Thiếu hoặc sai danh sách.
    5. Xuất báo cáo và lưu. CSV và lưu part đã sửa.

    Code tham khảo (Python)

    import csv
    import os
    import NXOpen
    
    NGAY = NXOpen.Update.Option.Now
    KIEU = NXOpen.NXObject.AttributeType
    BAT_BUOC = ["MA_CHI_TIET", "VAT_LIEU", "NGUOI_THIET_KE"]
    VAT_LIEU_HOP_LE = {"S45C", "SS400", "SUS304", "AL6061", "DONG"}
    
    def doc(part, ten):
        return part.GetUserAttributeAsString(ten, KIEU.String, -1) if part.HasUserAttribute(ten, KIEU.String, -1) else None
    
    def chuan_hoa_va_kiem_tra(part):
        da_sua, can_nguoi = [], []
        for ten in BAT_BUOC:
            gia_tri = doc(part, ten)
            if gia_tri is None or not gia_tri.strip():
                can_nguoi.append("Thiếu " + ten)
                continue
            sach = gia_tri.strip()
            if ten in ("MA_CHI_TIET", "VAT_LIEU"):
                sach = sach.upper()
            if sach != gia_tri:
                part.SetUserAttribute(ten, -1, sach, NGAY)
                da_sua.append("%s: %r -> %r" % (ten, gia_tri, sach))
        vl = (doc(part, "VAT_LIEU") or "").strip().upper()
        if vl and vl not in VAT_LIEU_HOP_LE:
            can_nguoi.append("Vật liệu ngoài danh sách: " + vl)
        return da_sua, can_nguoi
    
    def main(thu_muc="D:/Du_an/ban_ve", ra="D:/NXLab_xuat/bao_cao_metadata.csv"):
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        os.makedirs(os.path.dirname(ra), exist_ok=True)
        tong = sach = 0
        with open(ra, "w", newline="", encoding="utf-8-sig") as f:
            w = csv.writer(f)
            w.writerow(["file", "da_tu_sua", "can_nguoi_xu_ly"])
            for goc, thu_muc_con, files in os.walk(thu_muc):
                thu_muc_con[:] = [d for d in thu_muc_con if d.lower() not in ("backup", "old")]
                for ten in sorted(files):
                    if not ten.lower().endswith(".prt"):
                        continue
                    duong_dan = os.path.join(goc, ten).replace("\\", "/")
                    part = None
                    try:
                        part, st = session.Parts.Open(duong_dan)
                        st.Dispose()
                        da_sua, can_nguoi = chuan_hoa_va_kiem_tra(part)
                        if da_sua and not part.IsReadOnly:
                            s = part.Save(NXOpen.BasePart.SaveComponents.FalseValue, NXOpen.BasePart.CloseAfterSave.FalseValue)
                            s.Dispose()
                        w.writerow([duong_dan, " ; ".join(da_sua), " ; ".join(can_nguoi)])
                        sach += 0 if (da_sua or can_nguoi) else 1
                    except Exception as ex:
                        w.writerow([duong_dan, "", "LỖI: %s" % ex])
                    finally:
                        if part is not None:
                            part.Close(NXOpen.BasePart.CloseWholeTree.FalseValue,
                                       NXOpen.BasePart.CloseModified.CloseModified, None)
                    tong += 1
        lw.WriteLine("Đã kiểm %d file, %d file sạch. Báo cáo: %s" % (tong, sach, ra))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Chỉ những lỗi an toàn (khoảng trắng, chữ hoa) được tự sửa; các lỗi cần hiểu ngữ cảnh chỉ báo cho người.
    • Chỉ lưu khi thật sự có sửa và part không chỉ đọc, giảm rủi ro ghi nhầm.
    • Báo cáo CSV có hai cột riêng để người dùng biết việc gì đã tự xử lý, việc gì còn chờ họ.

    Lỗi thường gặp

    • Chạy lần đầu trên bản sao dữ liệu; tự sửa hàng loạt nhầm rất khó phục hồi.
    • Danh sách vật liệu hợp lệ nên lấy từ file cấu hình dùng chung để mọi script cùng một chuẩn.

    Mở rộng

    Nhóm bài tiếp theo (141–160) chuyển sang kiểm thử, gỡ lỗi và đóng gói chương trình NX Open.

    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.