NX Lab

Ghi thuộc tính số nguyên, số thực, đúng/sai và ngày giờ: các kiểu dữ liệu của attribute

#Python#Attribute1 lượt xem

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

    Câu hỏi ·

    Không phải thuộc tính nào cũng là chuỗi. Khối lượng là số thực, số lượng là số nguyên, 'đã duyệt' là đúng/sai, ngày phát hành là thời gian. NX phân biệt kiểu và có hàm riêng cho từng kiểu.

    Ghi thuộc tính số nguyên, số thực… Ghi thuộc tính số nguyên, số thực…

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

    1. Số nguyên. SetUserAttribute(title, -1, int, option).
    2. Số thực. SetUserAttribute(title, -1, float, option).
    3. Đúng/sai. SetBooleanUserAttribute(title, -1, bool, option).
    4. Thời gian. SetTimeUserAttribute(title, -1, chuỗi ngày giờ, option).
    5. Đọc theo kiểu. Dùng AttributeType để phân biệt.

    Code tham khảo (Python)

    import time
    import NXOpen
    
    KHONG_MANG = -1
    NGAY = NXOpen.Update.Option.Now
    KIEU = NXOpen.NXObject.AttributeType
    
    def ghi_cac_kieu(part):
        part.SetUserAttribute("SO_LUONG_TOI_THIEU", KHONG_MANG, 10, NGAY)               # số nguyên
        part.SetUserAttribute("KHOI_LUONG", KHONG_MANG, 0.752, NGAY)                      # số thực
        part.SetBooleanUserAttribute("DA_DUYET", KHONG_MANG, True, NGAY)                   # đúng/sai
        part.SetTimeUserAttribute("NGAY_PHAT_HANH", KHONG_MANG, time.strftime("%d-%b-%Y %H:%M:%S"), NGAY)
    
    def doc_tat_ca(part):
        kq = []
        for a in part.GetUserAttributes():
            if a.Type == KIEU.Integer:
                v = a.IntegerValue
            elif a.Type == KIEU.Real:
                v = a.RealValue
            elif a.Type == KIEU.Boolean:
                v = a.BooleanValue
            elif a.Type == KIEU.Time:
                v = a.TimeValue
            else:
                v = a.StringValue
            kq.append((a.Title, str(a.Type).split(".")[-1], v))
        return kq
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Ghi cac kieu")
        ghi_cac_kieu(part)
        for ten, kieu, gia_tri in doc_tat_ca(part):
            lw.WriteLine("%-22s %-8s %s" % (ten, kieu, gia_tri))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Python tự chọn overload theo kiểu giá trị: int ghi thuộc tính nguyên, float ghi thuộc tính thực.
    • Giá trị thời gian là chuỗi theo định dạng NX (ví dụ 09-Oct-2026 10:30:00); tên tháng tiếng Anh viết tắt.
    • Khi đọc, AttributeInformation có sẵn các trường IntegerValue, RealValue, StringValue...; chọn trường theo Type.

    Lỗi thường gặp

    • time.strftime("%b") phụ thuộc ngôn ngữ hệ điều hành; trên máy Windows tiếng Việt có thể không ra đúng tên tháng NX cần.
    • Truyền True/False vào SetUserAttribute bị coi là số nguyên; dùng SetBooleanUserAttribute cho thuộc tính đúng/sai.

    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.