
Xuất bảng dao (tool sheet) ra CSV: số dao, tên, đường kính, chiều dài và operation sử dụng
#Python#CAM#CSV1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Người chuẩn bị dụng cụ cần danh sách dao cho từng chương trình. Kết hợp bài đọc dao và bài duyệt operation cho một bảng CSV: mỗi dao một dòng, kèm các operation dùng nó.
Xuất bảng dao (tool sheet) ra CSVCác bước thực hiện
- Đọc danh sách dao. Từ Machine Tool View.
- Gom operation theo dao. Bài toán cần biết operation dùng dao nào.
- Ghép dữ liệu. Dùng tên dao làm khóa.
- Ghi CSV. Có BOM cho Excel.
- Tổng kết. Số dao khác nhau.
Code tham khảo (Python)
import csv import os import NXOpen import NXOpen.CAM def doc_dao(setup): ket_qua = {} ngan_xep = [setup.GetRoot(NXOpen.CAM.CAMSetup.View.MachineTool)] while ngan_xep: nhom = ngan_xep.pop() for obj in nhom.GetMembers(): if setup.IsGroup(obj): ngan_xep.append(obj) elif isinstance(obj, NXOpen.CAM.Tool): b = setup.CAMGroupCollection.CreateMillToolBuilder(obj) try: ket_qua[obj.Name] = {"T": int(b.TlNumberBuilder.Value), "duong_kinh": b.TlDiameterBuilder.Value, "chieu_dai": b.TlHeightBuilder.Value, "operation": []} except NXOpen.NXException: ket_qua[obj.Name] = {"T": 0, "duong_kinh": 0.0, "chieu_dai": 0.0, "operation": []} finally: b.Destroy() return ket_qua def gan_operation(setup, dao): """Dò cây Program Order; operation nào đứng ngay dưới nhóm có tên dao thì gán cho dao đó (quy ước đặt tên).""" 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): for ten_dao in dao: if ten_dao.split("_")[0] and ten_dao.split("_")[0] in obj.Name: dao[ten_dao]["operation"].append(obj.Name) 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 dao = doc_dao(setup) gan_operation(setup, dao) ra = "D:/NXLab_xuat/bang_dao_%s.csv" % part.Leaf os.makedirs(os.path.dirname(ra), exist_ok=True) with open(ra, "w", newline="", encoding="utf-8-sig") as f: w = csv.writer(f) w.writerow(["T", "Ten_dao", "Duong_kinh", "Chieu_dai", "Operation"]) for ten, d in sorted(dao.items(), key=lambda kv: kv[1]["T"]): w.writerow([d["T"], ten, "%.2f" % d["duong_kinh"], "%.2f" % d["chieu_dai"], "; ".join(d["operation"])]) lw.WriteLine("Đã ghi bảng dao (%d dao): %s" % (len(dao), ra)) if __name__ == "__main__": main()Giải thích code
- Liên kết operation - dao trong ví dụ dựa trên quy ước đặt tên; với dữ liệu thật hãy đọc dao được gán cho từng operation qua builder của operation.
sorted(..., key=T)sắp xếp theo số dao để bảng khớp thứ tự trong ổ dao.- Dao đọc lỗi vẫn xuất hiện trong bảng với giá trị 0 để người dùng nhận ra và xử lý.
Lỗi thường gặp
- Quy ước đặt tên làm cầu nối là cách tạm; cách chính xác là đọc
Toolgán cho operation trong builder của từng loại operation. - Số dao T bị trùng giữa các dao (đặt tay sai) là lỗi dữ liệu; thêm kiểm tra trùng trước khi in.
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.