NX Lab

Thuộc tính của component trong assembly: ghi chú lắp ráp và vị trí lắp riêng cho từng instance

#Python#Attribute#Assembly1 lượt xem

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

    Câu hỏi ·

    Cùng một part (bu lông M8) dùng ở nhiều chỗ, mỗi chỗ cần ghi chú riêng ('siết 25 N.m', 'có keo khóa ren'). Thuộc tính instance của component lưu thông tin riêng cho từng lần dùng mà không đổi part gốc.

    Thuộc tính của component trong assembly Thuộc tính của component trong assembly

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

    1. Tìm component. Theo tên.
    2. Ghi thuộc tính instance. comp.SetInstanceUserAttribute(title, index, value, option).
    3. Đọc thuộc tính instance. GetInstanceUserAttributeAsString.
    4. Liệt kê tất cả. GetInstanceUserAttributes.
    5. Báo cáo. Bảng component và ghi chú.

    Code tham khảo (Python)

    import NXOpen
    
    NGAY = NXOpen.Update.Option.Now
    KIEU = NXOpen.NXObject.AttributeType
    
    def duyet_la(root):
        ngan_xep = list(root.GetChildren())
        while ngan_xep:
            c = ngan_xep.pop()
            con = c.GetChildren()
            if con:
                ngan_xep.extend(con)
            else:
                yield c
    
    def ghi_chu_lap(comp, noi_dung):
        comp.SetInstanceUserAttribute("GHI_CHU_LAP", -1, noi_dung, NGAY)
    
    def doc_chu_lap(comp):
        for a in comp.GetInstanceUserAttributes():
            if a.Title == "GHI_CHU_LAP":
                return a.StringValue
        return ""
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Display
        root = part.ComponentAssembly.RootComponent if part else None
        if root is None:
            return
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Ghi chu lap")
        for c in duyet_la(root):
            if "BU_LONG" in c.DisplayName.upper():
                ghi_chu_lap(c, "Siết 25 N.m, có keo khóa ren")
        lw.WriteLine("%-24s %s" % ("Component", "Ghi chú lắp ráp"))
        for c in duyet_la(root):
            lw.WriteLine("%-24s %s" % (c.DisplayName[:24], doc_chu_lap(c)))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Thuộc tính instance thuộc về component (lần dùng), khác thuộc tính part thuộc về file.
    • Hai hàm SetInstanceUserAttribute/GetInstanceUserAttributes mô phỏng cặp hàm của đối tượng thông thường.
    • Dữ liệu này lưu trong assembly chứa component, nên phải lưu assembly sau khi ghi.

    Lỗi thường gặp

    • Nhầm thuộc tính instance với thuộc tính part làm báo cáo BOM đọc sai nguồn.
    • Thay đổi tên component sau khi gắn thuộc tính không làm mất thuộc tính, nhưng script tìm theo tên sẽ không thấy nữa.

    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.