NX Lab

Sinh chương trình khoan G-code đơn giản từ danh sách lỗ để học: cấu trúc chương trình và chu kỳ G81

#Python#G-code#Gia công1 lượt xem

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

    Câu hỏi ·

    Để hiểu hậu xử lý làm gì, hãy tự sinh một chương trình khoan G-code nhỏ từ danh sách lỗ. Bài này chỉ mang tính học tập: chương trình dùng cấu trúc cơ bản, không thay cho post chính thức của máy.

    Sinh chương trình khoan G-code đơn giản từ… Sinh chương trình khoan G-code đơn giản từ…

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

    1. Chuẩn bị danh sách lỗ. Tọa độ X, Y, độ sâu, đường kính.
    2. Viết phần đầu chương trình. Đơn vị, hệ tọa độ, tốc độ trục chính.
    3. Sinh chu kỳ khoan. G81 cho từng lỗ.
    4. Sắp xếp để rút ngắn đường chạy. Thứ tự gần nhất.
    5. Viết phần cuối chương trình. Hủy chu kỳ, về vị trí an toàn, M30.

    Code tham khảo (Python)

    import math
    
    def sap_xep_gan_nhat(lo, bat_dau=(0.0, 0.0)):
        con_lai, thu_tu, hien_tai = list(lo), [], bat_dau
        while con_lai:
            gan = min(con_lai, key=lambda l: math.hypot(l[0] - hien_tai[0], l[1] - hien_tai[1]))
            thu_tu.append(gan)
            con_lai.remove(gan)
            hien_tai = (gan[0], gan[1])
        return thu_tu
    
    def sinh_gcode(lo, duong_kinh_dao=8.0, rpm=3000, feed=150.0, z_an_toan=5.0, z_tham_chieu=2.0, ten="LO_KHOAN"):
        dong = ["%", "O1001 (%s)" % ten, "G21 G17 G90 G40 G49 G80", "T1 M06 (DAO KHOAN D%g)" % duong_kinh_dao,
                "S%d M03" % rpm, "G54", "G00 Z%.1f" % z_an_toan]
        for (x, y, sau) in sap_xep_gan_nhat(lo):
            dong.append("G00 X%.3f Y%.3f" % (x, y))
            dong.append("G81 Z%.3f R%.3f F%.1f" % (-abs(sau), z_tham_chieu, feed))
        dong += ["G80", "G00 Z%.1f" % z_an_toan, "M05", "G91 G28 Z0.", "M30", "%"]
        return "\n".join(dong)
    
    def main():
        lo = [(10.0, 10.0, 12.0), (50.0, 10.0, 12.0), (50.0, 40.0, 12.0), (10.0, 40.0, 12.0)]
        print(sinh_gcode(lo, duong_kinh_dao=8.0))
        print("\n--- KHÔNG chạy chương trình này trên máy thật khi chưa mô phỏng và kiểm tra bởi người có thẩm quyền ---")
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • G81 là chu kỳ khoan đơn giản; R là mặt phẳng tham chiếu, Z là độ sâu, F là lượng chạy dao.
    • Thứ tự gần nhất (nearest neighbour) là cách rút ngắn đường chạy đơn giản, không tối ưu tuyệt đối.
    • Mã mẫu theo phong cách phổ biến cho điều khiển kiểu Fanuc, nhưng mỗi máy có khác biệt riêng.

    Lỗi thường gặp

    • Chương trình do ví dụ sinh ra chỉ để học và chưa được mô phỏng; chạy trên máy thật có thể gây va chạm.
    • Ngôn ngữ mã G, M khác nhau giữa các hãng điều khiển; dùng post chính thức cho sản xuấ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.