G-code là ngôn ngữ lập trình số (NC) điều khiển chuyển động của máy CNC — mỗi lệnh G quy định một kiểu chuyển động hoặc chế độ làm việc (chạy nhanh, cắt thẳng, cắt cung tròn, chọn đơn vị đo...). Một chương trình gia công CNC là chuỗi hàng trăm tới hàng nghìn block (dòng lệnh), mỗi block gồm địa chỉ (N, G, X, Y, Z, F, M...) đi kèm giá trị số, theo khung chuẩn quốc tế ISO 6983-1:2009.
Nội dung thuộc chuyên trang CAD – CAM – CAE của cokhi.net, cụm Lập trình CAM — ở góc nguyên lý chung theo chuẩn ISO, không phải hướng dẫn vận hành cho một dòng máy/hãng cụ thể. Ký hiệu địa chỉ khớp phần lớn hệ điều khiển phổ biến (Fanuc và tương thích) nhưng có thể khác đôi chỗ với Siemens, Heidenhain — luôn đối chiếu sổ tay lập trình của máy đang dùng trước khi chạy thật.
Cấu trúc một block lệnh
Một block điển hình gồm các địa chỉ theo thứ tự quy ước:
- N (số thứ tự dòng): đánh số block, giúp tham chiếu khi tìm lỗi hoặc chạy lại từ giữa chương trình — không bắt buộc trên nhiều hệ điều khiển hiện đại.
- G (lệnh chuẩn bị): quy định kiểu chuyển động hoặc chế độ (chạy nhanh G00, cắt thẳng G01, cắt cung G02/G03...).
- X, Y, Z (tọa độ đích): vị trí đích của chuyển động theo hệ trục máy.
- F (tốc độ chạy dao — feedrate): chỉ có ý nghĩa khi đi kèm lệnh cắt có điều khiển tốc độ (G01, G02, G03); không dùng với G00 (chạy nhanh, luôn ở tốc độ tối đa của trục).
- M (lệnh phụ trợ — M-code): điều khiển các chức năng máy không phải chuyển động trục — bật/tắt trục chính, dung dịch làm nguội, đổi dao, dừng chương trình.
G-code modal và non-modal — phân biệt hay nhầm nhất
Đây là điểm gây lỗi nhiều nhất với người mới học lập trình NC:
- G-code modal giữ hiệu lực cho tới khi bị một G-code khác cùng nhóm ghi đè — không cần lặp lại ở mỗi block. Ví dụ: gọi G01 một lần, các block sau chỉ cần ghi tọa độ mới, máy vẫn cắt thẳng cho tới khi gặp G00/G02/G03 (cùng nhóm chuyển động) hoặc lệnh khác thay thế.
- G-code non-modal chỉ có hiệu lực đúng trong block chứa nó, không "nhớ" sang block sau. Ví dụ: G28 (về điểm tham chiếu) chỉ thực hiện một lần tại block đó.
Nhầm modal với non-modal — hoặc nhầm hai G-code cùng nhóm modal (ví dụ tưởng G90 và G91 có thể "cộng dồn" hiệu lực) — là nguyên nhân phổ biến của chuyển động sai vị trí ngoài ý muốn.
Cấu trúc tổng thể chương trình NC
Ngoài chuỗi block lệnh, một chương trình NC hoàn chỉnh còn có:
- Số hiệu chương trình (ví dụ O1001 trên hệ Fanuc): định danh chương trình trong bộ nhớ máy.
- Khối mở đầu (safety block): thường gồm G90 (tuyệt đối), G54 (gọi hệ tọa độ gia công), G17/G18/G19 (chọn mặt phẳng), đơn vị đo — thiết lập trạng thái máy về một điểm khởi đầu chắc chắn, tránh kế thừa trạng thái từ chương trình chạy trước đó.
- Thân chương trình: chuỗi block gia công thực tế, thường chia theo từng nguyên công/dao.
- Khối kết thúc: M05 (dừng trục chính), M09 (tắt dung dịch làm nguội), G28 (về home), M30 (kết thúc và tua lại chương trình).
Sai lầm thực tế khi đọc/viết chương trình NC
- Quên đổi lại G90 sau khi dùng G91. Nếu chương trình có đoạn tạm chuyển sang G91 (tương đối) rồi quên chuyển lại G90 (tuyệt đối), các block sau sẽ di chuyển sai vị trí hoàn toàn — đây là lỗi gây va chạm dao/phôi phổ biến nhất liên quan tới G-code modal.
- Đặt F ngay sau G00. G00 luôn chạy ở tốc độ tối đa của trục, giá trị F đặt cùng dòng không có tác dụng — dễ gây hiểu nhầm khi đọc lại chương trình.
- Không kiểm tra hệ tọa độ gia công (G54...) trước khi chạy. Gọi nhầm hệ tọa độ đã lưu offset của phôi/đồ gá khác là nguyên nhân va chạm nghiêm trọng, đặc biệt trên máy nhiều đồ gá.
- Copy chương trình từ máy khác mà không đối chiếu sổ tay. Cùng là G-code nhưng địa chỉ/mã có thể khác đôi chỗ giữa các hệ điều khiển — chạy thẳng chương trình chưa đối chiếu là rủi ro va chạm.
Thuật ngữ
- Block: một dòng lệnh trong chương trình NC.
- Modal: thuộc tính của G-code giữ hiệu lực qua nhiều block cho tới khi bị ghi đè bởi lệnh cùng nhóm.
- Non-modal: thuộc tính của G-code chỉ có hiệu lực trong đúng block chứa nó.
- Post-processor: phần mềm dịch đường chạy dao từ CAM thành G-code đúng định dạng máy cụ thể — xem thêm tại Nguyên lý lập trình CAM.
- Safety block: khối lệnh mở đầu chương trình, thiết lập lại trạng thái máy về một điểm chắc chắn.
Tài liệu tham khảo
- CNCCookBook, G-Code and M-Code List [Easy Examples & Tutorials] (định nghĩa G00/G01/G02/G03/G17-19/G20-21/G28/G40-43/G54-59/G90-91): https://www.cnccookbook.com/g-code-m-code-command-list-cnc-mills/
- ISO, ISO 6983-1:2009 — Automation systems and integration — Numerical control of machines — Program format and definitions of address words: https://www.iso.org/standard/34397.html