Tính khối lượng Assembly bằng NXOpen: occurrence, prototype và Body
Cách tính tổng khối lượng, tâm khối assembly bằng NXOpen khi cây trả Component occurrence nhưng API mass properties cần prototype Part và solid Body.
Quản trị viên 6 phút đọc

Tính khối lượng Assembly bằng NXOpen: occurrence, prototype và Body
Một chương trình duyệt assembly đã lấy được tag của component occurrence nhưng gọi hàm mass properties lại thất bại là tình huống phổ biến. Nguyên nhân: nhiều API tính thể tích/khối lượng yêu cầu solid Body hoặc Part, không chấp nhận occurrence/instance tag. Muốn tính tổng assembly chính xác, chương trình phải ánh xạ Component sang prototype, lấy body hợp lệ, chuyển tâm khối về hệ tọa độ assembly và nhân theo số occurrence mà không đếm trùng sai mục đích.
1. Xác định đầu ra cần tính
“Tổng khối lượng assembly” có thể có nhiều nghĩa:
• Tổng của mọi occurrence đang hoạt động.
• Tổng BOM bao gồm cả component suppressed.
• Khối lượng theo arrangement hiện tại.
• Khối lượng của hình học trong reference set đang hiển thị.
• Khối lượng prototype duy nhất, không nhân quantity.
Nếu không định nghĩa trước, hai chương trình đều “đúng API” nhưng trả kết quả khác nhau.
2. Component không phải Body
Component đại diện cho occurrence trong cây lắp ráp: có parent, transform, suppression, reference set và thuộc tính instance. Prototype thường trỏ đến Part nguồn. Hình học solid nằm trong Part dưới dạng Body.
Hàm kiểu UF_MODL_ask_mass_props_3d cần tag của solid/body phù hợp. Truyền tag occurrence hoặc instance có thể gây lỗi hoặc kết quả không mong muốn. Cần lấy prototype Part rồi duyệt Bodies.
3. Đếm occurrence hay prototype
Một bolt part có thể xuất hiện 20 lần. Nếu cache mass theo prototype và chỉ cộng một lần, tổng assembly bị thiếu. Nếu tính lại 20 lần, kết quả đúng nhưng lãng phí.
Giải pháp: tính mass của prototype một lần, cache theo khóa ổn định, sau đó áp dụng cho từng occurrence. Quantity vẫn đến từ occurrence; dữ liệu hình học đến từ prototype.
4. Lọc Body hợp lệ
Một Part có thể chứa nhiều solid body, sheet body, construction geometry hoặc body bị blank. Chọn quy tắc rõ: chỉ solid body, body thuộc reference set, body có thuộc tính material, hoặc tất cả solid trong work part.
Đừng mặc định body đầu tiên là chi tiết cần tính. Multi-body part, weldment và tooling có thể chứa nhiều solid chức năng.
5. Mật độ và vật liệu
Thể tích chưa phải khối lượng. NX cần density từ material assignment hoặc mass property. Nếu body/part không có vật liệu, API có thể dùng giá trị mặc định hoặc trả mass không đáng tin.
Công cụ nên báo danh sách component thiếu density thay vì âm thầm dùng một hằng số chung. Nếu doanh nghiệp cho phép default material, ghi rõ trong report và phân biệt calculated với assumed.
6. Đơn vị
Assembly có thể chứa part metric và inch. API thường trả kết quả theo unit system của part hoặc theo tham số gọi. Cần chuẩn hóa length, volume, density và mass trước khi cộng.
Một sai số đổi đơn vị thể tích có lũy thừa ba; nhầm mm³ với cm³ tạo chênh lệch rất lớn. Viết unit conversion thành module riêng và có test số học đơn giản.
7. Transform tâm khối
Mass là đại lượng vô hướng nên không đổi khi occurrence di chuyển. Nhưng center of gravity và inertia tensor phụ thuộc vị trí/hướng trong assembly. Center of gravity của prototype phải được biến đổi bằng ma trận occurrence sang hệ tọa độ cha hoặc hệ tuyệt đối.
Với subassembly nhiều cấp, transform tổng là tích của các transform trên đường từ node tới root. Kiểm tra thứ tự nhân ma trận và quy ước row/column của API.
8. Tổng tâm khối
Sau khi có mass mi và vị trí tâm ri trong cùng hệ tọa độ, tâm chung là tổng(mi × ri) chia tổng(mi). Chỉ cộng sau khi tất cả đơn vị và coordinate system đã thống nhất.
Nếu tổng mass bằng 0 do thiếu vật liệu hoặc không có body, không thực hiện phép chia; trả status rõ ràng.
9. Inertia tensor
Cộng moment of inertia không đơn giản như cộng volume. Cần xoay tensor theo orientation occurrence rồi dùng định lý trục song song để chuyển về một gốc chung. Nếu chỉ cần mass và center of gravity, đừng công bố inertia chưa được biến đổi đúng.
Kiểm thử bằng assembly đơn giản gồm hai khối giống nhau ở vị trí đối xứng. Tâm chung và tensor có thể tính tay để đối chiếu.
10. Component suppressed và arrangements
Suppressed component có thể bị bỏ qua trong mô hình vật lý hiện tại nhưng vẫn xuất hiện trong BOM. Tùy mục tiêu, lọc theo active arrangement. Ghi arrangement name trong report.
Nếu công cụ chạy trên nhiều arrangement, không cache trạng thái occurrence giữa các lần mà không làm mới. Prototype mass có thể tái dùng, nhưng danh sách occurrence hoạt động và transform có thể khác.
11. Reference Set
Component có thể hiển thị một reference set chỉ chứa một phần body hoặc simplified representation. Tính toàn bộ prototype sẽ khác khối lượng hình học đang dùng trong assembly.
Quy định rõ: mass thiết kế của toàn part hay mass của reference set occurrence. Với reference set, cần ánh xạ thành viên về prototype body và tránh tính datum/non-solid.
12. Component chưa load
Khi partial loading, prototype Part hoặc body có thể chưa sẵn sàng. Việc load toàn bộ chỉ để tính mass có thể tốn bộ nhớ. Trước tiên tìm thuộc tính mass đã lưu hoặc lightweight metadata nếu quy trình có hỗ trợ.
Nếu phải load, ghi PartLoadStatus, xử lý lỗi theo từng component và đóng part chỉ khi chắc không làm ảnh hưởng phiên người dùng. Không tự đóng file đang modified.
13. Overrides và thuộc tính mass đã nhập tay
Một số purchased part không có geometry nhưng có thuộc tính WEIGHT. Quy trình cần quyết định ưu tiên calculated mass hay declared mass. Có thể dùng rule:
• Nếu geometry hợp lệ và material đầy đủ: calculated.
• Nếu non-geometric/purchased: declared attribute.
• Nếu cả hai tồn tại và chênh vượt tolerance: cảnh báo.
Không cộng cả declared và calculated cho cùng occurrence.
14. Hiệu năng và cache
Cache prototype result gồm mass, center trong hệ prototype, inertia, unit và status. Khóa có thể là Part tag trong session kết hợp revision/modified state. Nếu part được update trong lúc chạy, cache phải invalidated.
Duyệt occurrence một lần, tránh chuyển Work Part cho từng node. Gom warning rồi hiển thị cuối tác vụ thay vì mở dialog liên tục.
15. Báo cáo có thể kiểm toán
Mỗi dòng nên chứa occurrence path, prototype identifier, quantity logic, mass source, unit, material, status và warning. Tổng hợp số component suppressed, unloaded, missing material và failed.
So sánh tổng với Weight Management hoặc Measure Bodies trên assembly mẫu. Chênh lệch phải truy được về từng node.
Bộ kiểm thử tối thiểu
• Part đơn một solid có density biết trước.
• Multi-body part với một sheet và hai solid.
• Hai occurrence cùng prototype ở vị trí khác nhau.
• Subassembly hai cấp có rotation.
• Component suppressed trong hai arrangements.
• Reference set chỉ chứa một body.
• Part không vật liệu.
• Purchased part không geometry nhưng có WEIGHT.
• Assembly trộn mm và inch.
• Component load lỗi.
Kết luận
Tính mass assembly bằng NXOpen là bài toán ánh xạ dữ liệu và hệ tọa độ, không chỉ một lời gọi API. Component cho biết occurrence và transform; prototype Part chứa Body; material cung cấp density. Khi cache theo prototype nhưng cộng theo occurrence, chuẩn hóa đơn vị và biến đổi center/inertia đúng cách, kết quả sẽ nhanh, có thể kiểm toán và phù hợp assembly thực tế.
Nguồn gợi ý chủ đề: UGAPI – “遍历装配体并且得到质量体积”: https://www.ugapi.com/thread-6216.html ; “递归方式获得装配下指定节点下的所有子组件Component”: https://www.ugapi.com/thread-6114.html ; tài liệu NXOpen Component: https://www.ugapi.com/doc/nxopen/a00563.html
Nội dung được biên soạn lại và mở rộng về đơn vị, transform, inertia, cache và kiểm thử; không sao chép mã nguồn nguyên văn.
Bình luận (0)
Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.
Đăng nhập để bình luận.


