
Kiểm tra thuộc tính bắt buộc theo lược đồ (schema): thiếu, rỗng, sai kiểu, giá trị ngoài danh sách
#Python#Attribute#Kiểm tra1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Quy định công ty thường yêu cầu mọi chi tiết có mã vật tư, vật liệu hợp lệ, người thiết kế. Mô tả quy định thành lược đồ rồi kiểm tra tự động trên từng part giúp phát hiện sớm thay vì khi in bản vẽ.
Kiểm tra thuộc tính bắt buộc theo lược đồ…Các bước thực hiện
- Mô tả lược đồ. Danh sách thuộc tính: tên, kiểu, bắt buộc, giá trị cho phép.
- Đọc thuộc tính part. Dùng hàm đọc dict.
- Kiểm tra từng quy tắc. Thiếu, rỗng, sai kiểu, ngoài danh sách.
- Gom lỗi. Danh sách thông điệp.
- Báo kết quả. Đạt hoặc liệt kê lỗi.
Code tham khảo (Python)
import NXOpen LUOC_DO = [ {"ten": "MA_VAT_TU", "kieu": str, "bat_buoc": True}, {"ten": "VAT_LIEU", "kieu": str, "bat_buoc": True, "cho_phep": ["S45C", "SUS304", "AL6061", "SS400"]}, {"ten": "NGUOI_THIET_KE", "kieu": str, "bat_buoc": True}, {"ten": "KHOI_LUONG", "kieu": float, "bat_buoc": False, "nho_nhat": 0.0}, ] def doc_thuoc_tinh(part): kq = {} for a in part.GetUserAttributes(): t = a.Type if t == NXOpen.NXObject.AttributeType.Real: kq[a.Title] = a.RealValue elif t == NXOpen.NXObject.AttributeType.Integer: kq[a.Title] = a.IntegerValue else: kq[a.Title] = a.StringValue return kq def kiem_tra(part, luoc_do=LUOC_DO): tt = doc_thuoc_tinh(part) loi = [] for quy_tac in luoc_do: ten = quy_tac["ten"] if ten not in tt: if quy_tac["bat_buoc"]: loi.append("Thiếu thuộc tính bắt buộc: " + ten) continue v = tt[ten] if isinstance(v, str) and quy_tac["bat_buoc"] and not v.strip(): loi.append("%s đang rỗng" % ten) if quy_tac["kieu"] is float and not isinstance(v, (int, float)): loi.append("%s phải là số, hiện là %r" % (ten, v)) if "cho_phep" in quy_tac and v not in quy_tac["cho_phep"]: loi.append("%s = %r không nằm trong %s" % (ten, v, quy_tac["cho_phep"])) if "nho_nhat" in quy_tac and isinstance(v, (int, float)) and v < quy_tac["nho_nhat"]: loi.append("%s = %r nhỏ hơn mức tối thiểu %s" % (ten, v, quy_tac["nho_nhat"])) return loi def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return loi = kiem_tra(part) if not loi: lw.WriteLine("ĐẠT: thuộc tính của %s đúng lược đồ" % part.Leaf) else: lw.WriteLine("KHÔNG ĐẠT (%d lỗi):" % len(loi)) for l in loi: lw.WriteLine(" - " + l) if __name__ == "__main__": main()Giải thích code
- Lược đồ là dữ liệu thuần (danh sách dict), nên có thể nạp từ file JSON thay vì viết cứng.
- Các quy tắc kiểm tra độc lập nhau; thêm quy tắc mới chỉ cần thêm một khối
ifhoặc một khóa trong lược đồ. - Hàm
kiem_tratrả danh sách lỗi (rỗng nghĩa là đạt), dễ ghép vào báo cáo hàng loạt.
Lỗi thường gặp
- Giá trị đọc ra từ NX có thể có khoảng trắng đầu/cuối;
strip()trước khi so sánh danh sách cho phép. - Khi lược đồ thay đổi theo thời gian, ghi số phiên bản lược đồ trong báo cáo để biết đã kiểm theo bản nào.
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.