
Tính khối lượng từ mô hình và ghi vào thuộc tính KHOI_LUONG theo vật liệu của bảng tra
#Python#Attribute#Khối lượng1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Khối lượng ghi trong thuộc tính phải luôn đúng với mô hình. Script tính từ hình học với mật độ theo vật liệu, rồi ghi lại cùng thời điểm tính, thay vì để người dùng gõ tay.
Tính khối lượng từ mô hình và ghi vào…Các bước thực hiện
- Bảng tra vật liệu. Tên -> mật độ kg/mm3.
- Đọc vật liệu của part. Thuộc tính VAT_LIEU.
- Đặt mật độ cho body. body.Density.
- Tính bằng MeasureManager. NewMassProperties.
- Ghi kết quả. KHOI_LUONG và NGAY_TINH.
Code tham khảo (Python)
import time import NXOpen NGAY = NXOpen.Update.Option.Now MAT_DO = {"S45C": 7.85e-6, "SS400": 7.85e-6, "SUS304": 7.93e-6, "AL6061": 2.70e-6, "DONG": 8.96e-6} def doc_chuoi(part, ten): kieu = NXOpen.NXObject.AttributeType.String return part.GetUserAttributeAsString(ten, kieu, -1) if part.HasUserAttribute(ten, kieu, -1) else "" def tinh_khoi_luong(part, mat_do): bodies = [b for b in part.Bodies if b.IsSolidBody] if not bodies: raise RuntimeError("Không có body đặc") for b in bodies: b.Density = mat_do 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.Mass def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return vat_lieu = doc_chuoi(part, "VAT_LIEU").upper().strip() if vat_lieu not in MAT_DO: lw.WriteLine("Vật liệu '%s' chưa có trong bảng tra: %s" % (vat_lieu, ", ".join(MAT_DO))) return session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Tinh khoi luong") kl = tinh_khoi_luong(part, MAT_DO[vat_lieu]) part.SetUserAttribute("KHOI_LUONG", -1, round(kl, 4), NGAY) part.SetUserAttribute("NGAY_TINH_KL", -1, time.strftime("%Y-%m-%d"), NGAY) lw.WriteLine("Khối lượng %s (%s): %.4f kg" % (part.Leaf, vat_lieu, kl)) if __name__ == "__main__": main()Giải thích code
- Mật độ lưu theo kg/mm³ vì mô hình dùng milimét; nếu part dùng inch cần quy đổi.
- Ghi thêm
NGAY_TINH_KLđể biết con số lấy từ thời điểm nào, phát hiện khi mô hình đã đổi nhưng thuộc tính chưa cập nhật. - Làm tròn 4 chữ số vì độ chính xác tính toán không hơn thế.
Lỗi thường gặp
- Mật độ trong ví dụ chỉ để minh họa; dùng giá trị chuẩn của công ty hoặc tiêu chuẩn vật liệu.
- Chi tiết có phần rỗng (lưới, lỗ ren mô phỏng) làm khối lượng khác thực tế; ghi chú khi có sai khác đã biế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.