NX Lab

Danh mục kiểm tra chương trình CAM trước khi hậu xử lý: path, dao, tên, trạng thái

#Python#CAM#Kiểm tra1 lượt xem

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

    Câu hỏi ·

    Hậu xử lý chương trình thiếu path hay dao trùng số gây tốn vật liệu và nguy hiểm. Một bộ kiểm tra tự động trước khi xuất NC bắt các lỗi thường gặp nhất.

    Danh mục kiểm tra chương trình CAM trước… Danh mục kiểm tra chương trình CAM trước…

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

    1. Mọi operation có path. AskPathExists.
    2. Không operation nào cần Regen/Repost. GetStatus.
    3. Dao: số T không trùng. Đọc TlNumberBuilder.
    4. Tên operation duy nhất. Counter.
    5. Kết luận. Cho phép hoặc chặn hậu xử lý.

    Code tham khảo (Python)

    from collections import Counter
    import NXOpen
    import NXOpen.CAM
    
    def duyet(setup, view):
        ket_qua, ngan_xep = [], [setup.GetRoot(view)]
        while ngan_xep:
            nhom = ngan_xep.pop()
            for obj in nhom.GetMembers():
                if setup.IsGroup(obj):
                    ngan_xep.append(obj)
                else:
                    ket_qua.append(obj)
        return ket_qua
    
    def kiem_tra_chuong_trinh(setup):
        loi, canh_bao = [], []
        ops = [o for o in duyet(setup, NXOpen.CAM.CAMSetup.View.ProgramOrder) if setup.IsOperation(o)]
        if not ops:
            loi.append("Chương trình không có operation nào")
        for op in ops:
            if not op.AskPathExists():
                loi.append("Operation chưa có đường chạy dao: " + op.Name)
            st = str(op.GetStatus()).split(".")[-1]
            if st in ("Regen", "Repost"):
                canh_bao.append("Operation %s ở trạng thái %s" % (op.Name, st))
        dem_ten = Counter(o.Name for o in ops)
        for ten, n in dem_ten.items():
            if n > 1:
                canh_bao.append("Tên operation trùng (%d lần): %s" % (n, ten))
        dao = [o for o in duyet(setup, NXOpen.CAM.CAMSetup.View.MachineTool) if isinstance(o, NXOpen.CAM.Tool)]
        so_t = Counter()
        for d in dao:
            b = setup.CAMGroupCollection.CreateMillToolBuilder(d)
            try:
                so_t[int(b.TlNumberBuilder.Value)] += 1
            except NXOpen.NXException:
                pass
            finally:
                b.Destroy()
        for t, n in so_t.items():
            if t != 0 and n > 1:
                loi.append("Số dao T%d bị dùng cho %d dao khác nhau" % (t, n))
        return loi, canh_bao
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        setup = part.CAMSetup if part else None
        if setup is None:
            lw.WriteLine("Part chưa có CAM Setup")
            return
        loi, canh_bao = kiem_tra_chuong_trinh(setup)
        for l in loi:
            lw.WriteLine("[LỖI] " + l)
        for c in canh_bao:
            lw.WriteLine("[CẢNH BÁO] " + c)
        lw.WriteLine("KẾT LUẬN: " + ("KHÔNG NÊN HẬU XỬ LÝ" if loi else "CÓ THỂ HẬU XỬ LÝ (còn %d cảnh báo)" % len(canh_bao)))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Phân biệt lỗi (chặn hậu xử lý) và cảnh báo (cần xem lại nhưng không chặn).
    • Kiểm tra số dao T rất quan trọng: hai dao khác nhau cùng T gây gọi nhầm dao khi chạy máy.
    • Hàm duyet dùng chung cho nhiều view, trả về cả nhóm lẫn mục khác nên lọc thêm theo IsOperation.

    Lỗi thường gặp

    • Kết luận 'có thể hậu xử lý' chỉ nghĩa là qua các kiểm tra đã viết; mô phỏng và duyệt an toàn vẫn là bước bắt buộc riêng.
    • Dao không phải dao phay bị bỏ qua ở bước đọc số T; thêm builder tương ứng nếu chương trình có dao khoan, tiện.

    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.