NX Lab

Khung script chuẩn dùng cho mọi dự án NX Open: kiểm tra, log, undo, báo cáo

#Python#Mẫu1 lượt xem

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

    Câu hỏi ·

    Sau 19 bài lẻ, đây là bản tổng hợp: một khung script có đủ kiểm tra part, log, undo mark, bắt lỗi và tổng kết. Bạn copy khung này làm điểm xuất phát cho các bài sau.

    Khung script chuẩn dùng cho mọi dự án NX… Khung script chuẩn dùng cho mọi dự án NX…

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

    1. Khởi tạo. Lấy Session, mở Listing Window, đọc Work Part.
    2. Kiểm tra. Dừng sớm nếu thiếu part hoặc part chỉ đọc.
    3. Đặt Undo Mark. Một mốc cho cả script.
    4. Thực thi. Gọi hàm công việc trong try/except.
    5. Tổng kết. In thời gian chạy, số thao tác thành công và lỗi.

    Code tham khảo (Python)

    import time
    import NXOpen
    
    TEN_SCRIPT = "Khung script NX Open"
    
    def cong_viec(part, lw):
        """Viết phần việc chính tại đây; trả về số đối tượng đã xử lý."""
        n = 0
        for b in part.Bodies:
            lw.WriteLine("  Body: %s (solid=%s)" % (b.JournalIdentifier, b.IsSolidBody))
            n += 1
        return n
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        t0 = time.perf_counter()
        lw.WriteLine("=== %s ===" % TEN_SCRIPT)
    
        part = session.Parts.Work
        if part is None:
            lw.WriteLine("DỪNG: chưa có Work Part")
            return
        if part.IsReadOnly:
            lw.WriteLine("DỪNG: part chỉ đọc")
            return
    
        mark = session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, TEN_SCRIPT)
        try:
            n = cong_viec(part, lw)
            lw.WriteLine("Hoàn tất: %d đối tượng" % n)
        except NXOpen.NXException as ex:
            lw.WriteLine("LỖI NX %d: %s -> hoàn tác" % (ex.ErrorCode, ex.Message))
            session.UndoToMark(mark, TEN_SCRIPT)
        except Exception as ex:
            lw.WriteLine("LỖI Python: %s -> hoàn tác" % ex)
            session.UndoToMark(mark, TEN_SCRIPT)
        finally:
            lw.WriteLine("Thời gian: %.2f s" % (time.perf_counter() - t0))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Hàm cong_viec là nơi duy nhất bạn cần sửa; mọi thứ xung quanh đã có sẵn.
    • Hoàn tác khi lỗi đảm bảo mô hình không rơi vào trạng thái dở dang.
    • b.IsSolidBody phân biệt solid với sheet body.

    Lỗi thường gặp

    • Một số thao tác ghi file không hoàn tác được bằng Undo; để chúng ở cuối, sau khi các bước mô hình đã thành công.
    • Khi chuyển sang chạy hàng loạt, tách main thành xu_ly_mot_part để dễ gọi lặp.

    Mở rộng

    Từ bài 21 trở đi, các bài sẽ dùng khung này và chỉ trình bày phần cong_viec.

    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.