NX Lab

Kiểm tra kích thước hộp bao của chi tiết với yêu cầu có dung sai: báo đạt / không đạt

#Python#Kiểm tra#Dung sai1 lượt xem

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

    Câu hỏi ·

    Trước khi chuyển bản vẽ sang gia công, cần chắc chắn chi tiết nằm trong khuôn khổ cho phép. Bài này so hộp bao của mô hình với kích thước yêu cầu và dung sai, rồi in kết quả đạt hay không đạt.

    Kiểm tra kích thước hộp bao của chi tiết… Kiểm tra kích thước hộp bao của chi tiết…

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

    1. Khai báo yêu cầu. Kích thước danh nghĩa và dung sai cho ba trục.
    2. Tính hộp bao. Min, max của các đỉnh cạnh.
    3. Sắp xếp kích thước. So sánh theo thứ tự lớn - vừa - nhỏ để không phụ thuộc hướng đặt.
    4. So dung sai. Chênh lệch tuyệt đối nhỏ hơn hoặc bằng dung sai.
    5. Báo kết quả. Từng trục và kết luận chung.

    Code tham khảo (Python)

    import NXOpen
    
    YEU_CAU = {"danh_nghia": (120.0, 80.0, 25.0), "dung_sai": 0.5}   # mm
    
    def hop_bao(bodies):
        xs, ys, zs = [], [], []
        for b in bodies:
            for e in b.GetEdges():
                for p in e.GetVertices():
                    xs.append(p.X); ys.append(p.Y); zs.append(p.Z)
        return sorted([max(xs) - min(xs), max(ys) - min(ys), max(zs) - min(zs)], reverse=True)
    
    def so_sanh(kich_thuoc, danh_nghia, dung_sai):
        yc = sorted(danh_nghia, reverse=True)
        ket_qua = []
        for thuc, can in zip(kich_thuoc, yc):
            lech = thuc - can
            ket_qua.append((can, thuc, lech, abs(lech) <= dung_sai))
        return ket_qua
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        bodies = [b for b in part.Bodies if b.IsSolidBody] if part else []
        if not bodies:
            lw.WriteLine("Không có body đặc")
            return
        kq = so_sanh(hop_bao(bodies), YEU_CAU["danh_nghia"], YEU_CAU["dung_sai"])
        lw.WriteLine("%-10s %-10s %-10s %s" % ("Yêu cầu", "Thực tế", "Lệch", "Kết luận"))
        for can, thuc, lech, ok in kq:
            lw.WriteLine("%-10.2f %-10.2f %+-10.3f %s" % (can, thuc, lech, "ĐẠT" if ok else "KHÔNG ĐẠT"))
        lw.WriteLine("=> " + ("CHI TIẾT ĐẠT" if all(k[3] for k in kq) else "CHI TIẾT KHÔNG ĐẠT"))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Sắp xếp giảm dần cả kích thước thực lẫn yêu cầu giúp kết quả không phụ thuộc cách đặt chi tiết trong hệ tọa độ.
    • zip ghép từng cặp kích thước tương ứng, abs(lech) <= dung_sai là điều kiện đạt.
    • Giá trị %+-10.3f hiển thị dấu cộng/trừ để thấy ngay lệch dương hay âm.

    Lỗi thường gặp

    • Hộp bao theo đỉnh cạnh có thể nhỏ hơn thực tế với chi tiết có cung tròn lồi; dùng thêm Measure để chắc chắn khi cần chính xác.
    • Dung sai theo từng trục khác nhau thì thay đối số dung_sai bằng danh sách ba phần tử.

    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.