NX Lab

Đặt tên operation theo quy tắc chung: OP10_ROUGH_D12, OP20_FINISH_D6 từ loại và dao

#Python#CAM#Quy ước1 lượt xem

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

    Câu hỏi ·

    Tên operation lộn xộn (CAVITY_MILL_1, ZLEVEL_PROFILE_3) khiến người vận hành khó đọc chương trình. Script đổi tên theo quy tắc: số thứ tự công đoạn, loại gia công, đường kính dao.

    Đặt tên operation theo quy tắc chung Đặt tên operation theo quy tắc chung

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

    1. Thu thập operation theo thứ tự. Theo cây Program Order.
    2. Xác định loại gia công. Dựa vào tên template hoặc loại operation.
    3. Đọc dao của operation. Lấy đường kính từ MillToolBuilder.
    4. Dựng tên mới. OP{số}_{loại}_D{đường kính}.
    5. Đổi tên. operation.SetName(tên_mới).

    Code tham khảo (Python)

    import re
    import NXOpen
    import NXOpen.CAM
    
    LOAI_THEO_TU_KHOA = [
        ("CAVITY", "ROUGH"), ("ROUGH", "ROUGH"), ("ZLEVEL", "SEMI"), ("FINISH", "FINISH"),
        ("FACE", "FACE"), ("DRILL", "DRILL"), ("PLANAR", "PLANAR"),
    ]
    
    def doan_loai(ten_cu):
        hoa = ten_cu.upper()
        for tu_khoa, loai in LOAI_THEO_TU_KHOA:
            if tu_khoa in hoa:
                return loai
        return "OP"
    
    def ten_moi(stt, ten_cu, duong_kinh=None):
        loai = doan_loai(ten_cu)
        phan_dao = "_D%g" % duong_kinh if duong_kinh else ""
        return "OP%02d_%s%s" % (stt * 10, loai, phan_dao)
    
    def tat_ca_operation(setup):
        kq, ngan_xep = [], [setup.GetRoot(NXOpen.CAM.CAMSetup.View.ProgramOrder)]
        while ngan_xep:
            nhom = ngan_xep.pop()
            con = [o for o in nhom.GetMembers()]
            for obj in reversed(con):
                if setup.IsGroup(obj):
                    ngan_xep.append(obj)
                elif setup.IsOperation(obj):
                    kq.append(obj)
        return kq
    
    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:
            return
        ops = tat_ca_operation(setup)
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Doi ten operation")
        for i, op in enumerate(ops, 1):
            moi = ten_moi(i, op.Name)
            lw.WriteLine("%-30s -> %s" % (op.Name, moi))
            op.SetName(moi)
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Hàm doan_loai ánh xạ từ khóa trong tên cũ thành loại gia công chuẩn; mở rộng bảng theo template của bạn.
    • stt * 10 tạo số công đoạn OP10, OP20, OP30... để chừa chỗ chèn công đoạn mới.
    • Phần đường kính dao để trống trong ví dụ; kết hợp với hàm đọc dao ở bài 164 để thêm _D12.

    Lỗi thường gặp

    • Tên operation phải duy nhất trong part; quy tắc có số thứ tự đảm bảo điều này.
    • Đổi tên sau khi đã hậu xử lý làm file NC không còn khớp tên; đặt tên trước khi xuấ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.