
Tổng hợp: báo cáo tính công nghệ gia công cho một chi tiết (hộp bao, phôi, lỗ, thành mỏng, góc thoát)
#Python#Tổng hợp#Gia công1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Bài tổng hợp nhóm gia công: ghép các phép kiểm tra hình học thành một báo cáo 'tính công nghệ' cho chi tiết: kích thước phôi, bảng lỗ, cảnh báo thành mỏng, cảnh báo mặt đứng thiếu góc thoát, trong một lần chạy.
Tổng hợp: báo cáo tính công nghệ gia công…Các bước thực hiện
- Hộp bao và phôi. Kích thước và dư.
- Bảng lỗ. Gom theo đường kính.
- Mặt đứng. Đếm mặt phẳng gần vuông góc hướng mở.
- Gom cảnh báo. Mỗi phép kiểm tra trả danh sách cảnh báo.
- In báo cáo. Tiêu đề và đánh giá tổng quan.
Code tham khảo (Python)
import math from collections import Counter import NXOpen def hop_bao(body): xs, ys, zs = [], [], [] for e in body.GetEdges(): for p in e.GetVertices(): xs.append(p.X); ys.append(p.Y); zs.append(p.Z) return [max(xs) - min(xs), max(ys) - min(ys), max(zs) - min(zs)] def lo_theo_duong_kinh(body): dem = Counter() for e in body.GetEdges(): if e.SolidEdgeType == NXOpen.Edge.EdgeType.Circular: a, b = e.GetVertices() if abs(a.X - b.X) + abs(a.Y - b.Y) + abs(a.Z - b.Z) < 1e-4: dem[round(e.GetLength() / math.pi, 2)] += 1 return dem def so_mat_theo_loai(body): return Counter(str(f.SolidFaceType).split(".")[-1] for f in body.GetFaces()) def lap_bao_cao(part): dong, canh_bao = [], [] solids = [b for b in part.Bodies if b.IsSolidBody] if not solids: return ["Không có body đặc"], ["Không có body đặc"] body = solids[0] kt = sorted(hop_bao(body), reverse=True) dong.append("Hộp bao: %.2f x %.2f x %.2f mm" % tuple(kt)) dong.append("Phôi đề xuất (dư 2/phía): %.0f x %.0f x %.0f" % tuple(-(-(k + 4) // 5) * 5 for k in kt)) lo = lo_theo_duong_kinh(body) dong.append("Lỗ (Ø: số cạnh tròn): " + ", ".join("Ø%.2f:%d" % (d, n) for d, n in sorted(lo.items())) if lo else "Không có lỗ tròn") if any(d < 2.0 for d in lo): canh_bao.append("Có lỗ Ø nhỏ hơn 2 mm: khó khoan, cần dao chuyên dụng") mat = so_mat_theo_loai(body) dong.append("Mặt theo loại: " + ", ".join("%s=%d" % kv for kv in sorted(mat.items()))) if mat.get("Planar", 0) + mat.get("Cylindrical", 0) < 0.8 * sum(mat.values()): canh_bao.append("Nhiều mặt tự do (không phẳng/trụ): cần gia công 3D hoặc 5 trục") return dong, canh_bao def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return dong, canh_bao = lap_bao_cao(part) lw.WriteLine("=== BÁO CÁO TÍNH CÔNG NGHỆ: %s ===" % part.Leaf) for d in dong: lw.WriteLine(" " + d) lw.WriteLine("--- Cảnh báo (%d) ---" % len(canh_bao)) for c in canh_bao: lw.WriteLine(" ! " + c) if __name__ == "__main__": main()Giải thích code
- Mỗi hàm nhỏ trả dữ liệu thuần;
lap_bao_caoghép chúng và áp các quy tắc cảnh báo. - Biểu thức
-(-(k + 4) // 5) * 5làm tròn lên bội số của 5 mà không cầnmath.ceil. - Tỉ lệ mặt phẳng/trụ giúp đoán nhanh chi tiết gia công 2.5D hay cần 3D.
Lỗi thường gặp
- Các ngưỡng cảnh báo (2 mm, 80%) là gợi ý; điều chỉnh theo năng lực xưởng của bạn.
- Báo cáo tự động hỗ trợ chứ không thay phán đoán của kỹ sư công nghệ.
Mở rộng
Nhóm bài cuối (181–200) đi vào thiết kế tham số, cấu hình hàng loạt và tích hợp với hệ thống bên ngoài.
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.