
Quét tham số (parameter sweep): thay đổi một kích thước theo từng bước và ghi bảng khối lượng, thể tích
#Python#Tham số#CSV1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Khảo sát ảnh hưởng của một kích thước tới khối lượng hay thể tích là việc thường gặp trong thiết kế. Quét từ giá trị nhỏ đến lớn theo bước cố định, đo mỗi điểm và ghi CSV để vẽ đồ thị trong Excel.
Quét tham số (parameter sweep)Các bước thực hiện
- Chọn expression và khoảng. Từ, đến, bước.
- Lặp qua các giá trị. Sửa expression, cập nhật.
- Đo kết quả. Khối lượng, thể tích, diện tích.
- Ghi CSV. Mỗi dòng một điểm.
- Khôi phục. Đặt lại giá trị gốc cuối cùng.
Code tham khảo (Python)
import csv import os import NXOpen def do_chi_tieu(part): bodies = [b for b in part.Bodies if b.IsSolidBody] for b in bodies: if b.Density <= 0: b.Density = 7.85e-6 uc = part.UnitCollection don_vi = [uc.FindObject("SquareMilliMeter"), uc.FindObject("CubicMilliMeter"), uc.FindObject("Kilogram"), uc.FindObject("MilliMeter"), uc.FindObject("Kilogram")] r = part.MeasureManager.NewMassProperties(don_vi, 0.99, bodies) return r.Area, r.Volume, r.Mass def khoang(tu, den, buoc): n = int(round((den - tu) / buoc)) return [tu + i * buoc for i in range(n + 1)] def quet(session, part, ten_exp, tu, den, buoc, lw): exp = part.Expressions.FindObject(ten_exp) cu = exp.RightHandSide ket_qua = [] try: for gt in khoang(tu, den, buoc): mark = session.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Quet") part.Expressions.Edit(exp, "%.4f" % gt) ma = session.UpdateManager.DoUpdate(mark) session.DeleteUndoMark(mark, "Quet") if ma != 0: lw.WriteLine("Bỏ qua %g (DoUpdate lỗi %d)" % (gt, ma)) continue dien_tich, the_tich, khoi_luong = do_chi_tieu(part) ket_qua.append((gt, dien_tich, the_tich, khoi_luong)) finally: part.Expressions.Edit(exp, cu) session.UpdateManager.DoUpdate(session.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Khoi phuc")) return ket_qua def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return kq = quet(session, part, "day", 2.0, 12.0, 1.0, lw) ra = "D:/NXLab_xuat/quet_day.csv" 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(["day_mm", "dien_tich_mm2", "the_tich_mm3", "khoi_luong_kg"]) w.writerows([("%.3f" % a, "%.1f" % b, "%.1f" % c, "%.4f" % d) for a, b, c, d in kq]) lw.WriteLine("Đã quét %d điểm -> %s" % (len(kq), ra)) if __name__ == "__main__": main()Giải thích code
khoangdùng số bước nguyên để tránh sai số cộng dồn của số thực.- Khôi phục giá trị gốc trong
finallyđảm bảo mô hình trở lại như ban đầu dù lỗi xảy ra. - File CSV mở thẳng trong Excel để vẽ đồ thị quan hệ độ dày - khối lượng.
Lỗi thường gặp
- Quét nhiều điểm trên mô hình nặng rất lâu; đo thời gian một điểm trước khi chọn bước.
- Giá trị làm mô hình lỗi (độ dày lớn hơn khoảng hở) bị bỏ qua nhưng vẫn chiếm thời gian; giới hạn khoảng quét hợp lý.
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.