NX Lab

Liệt kê operation với trạng thái: đã sinh đường chạy dao chưa, cần tạo lại hay hậu xử lý lại

#Python#CAM1 lượt xem

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

    Câu hỏi ·

    Trước khi hậu xử lý cần biết operation nào chưa có đường chạy dao, operation nào đã sửa và cần sinh lại. Bài này in bảng trạng thái cho toàn bộ operation của setup.

    Liệt kê operation với trạng thái Liệt kê operation với trạng thái

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

    1. Thu thập operation. Duyệt Program Order và lọc operation.
    2. Kiểm tra đường chạy dao. operation.AskPathExists() (hoặc GetPath()).
    3. Đọc trạng thái. operation.GetStatus() trả về Complete, Repost, Regen, Approved.
    4. Gom nhóm trạng thái. Đếm từng loại.
    5. Đề xuất hành động. Regen -> sinh lại; Repost -> hậu xử lý lại.

    Code tham khảo (Python)

    import NXOpen
    import NXOpen.CAM
    
    def tat_ca_operation(setup):
        ket_qua = []
        ngan_xep = [setup.GetRoot(NXOpen.CAM.CAMSetup.View.ProgramOrder)]
        while ngan_xep:
            nhom = ngan_xep.pop()
            for obj in nhom.GetMembers():
                if setup.IsGroup(obj):
                    ngan_xep.append(obj)
                elif setup.IsOperation(obj):
                    ket_qua.append(obj)
        return ket_qua
    
    def mo_ta_trang_thai(op):
        st = op.GetStatus()
        return str(st).split(".")[-1]
    
    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
        ops = tat_ca_operation(setup)
        lw.WriteLine("%-32s %-8s %-10s" % ("Operation", "Có path", "Trạng thái"))
        can_sinh = []
        for op in ops:
            co_path = op.AskPathExists()
            lw.WriteLine("%-32s %-8s %-10s" % (op.Name[:32], "có" if co_path else "KHÔNG", mo_ta_trang_thai(op)))
            if not co_path:
                can_sinh.append(op.Name)
        lw.WriteLine("Cần sinh đường chạy dao: %d / %d operation" % (len(can_sinh), len(ops)))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • AskPathExists là kiểm tra nhanh có đường chạy dao hay chưa.
    • GetStatus cho biết operation đã hoàn thành hay cần làm lại (Regen/Repost).
    • Dùng ngăn xếp thay vì đệ quy để duyệt cây, tránh giới hạn độ sâu đệ quy.

    Lỗi thường gặp

    • Một số trạng thái chỉ cập nhật sau khi NX tính lại; gọi GenerateToolPath rồi đọc lại.
    • Operation bị khóa hoặc thuộc nhóm tham chiếu có thể xuất hiện hai lần ở hai view; chuẩn hóa theo tên nếu cầ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.