# Thắc mắc - giải đáp không biết hỏi ai > Trao đổi kinh nghiệm >  G-Code căn bản - Khái niệm

## CKD

*G-Code?*
G-Code, một từ, một khái niệm có thể rất quen nhưng cũng có thể rất lạ với các bạn. Quen là vì khi chúng ta làm CNC, chúng ta hay nghe nhắc đến. Lạ là vì có thể chúng ta chưa hiểu G-Code là gì?
Nay CKD xin trình bày một số hiểu biết của mình về G-Code, mong rằng nó có thể hữu ích cho các bạn mới tập tành bước chân vào con đường CNCer.
Trong quá trình viết bài, nếu có thiếu sót mong các cao thủ có thể chỉ điểm giúp. Thanks.

*Trước hết G-Code là gì?*
G-Code là tên gọi của một ngôn ngữ lập trình ứng dụng trong điều khiển số (còn gọi là NC hoặc *N*umerical *C*ontrol). G-Code thường được sử dụng trong tự động hóa, tự động với sự trợ giúp của máy tính (còn gọi là CAE hay  *C*omputer *A*ided *E*ngineering). Đôi khi G-Code còn được gọi là ngôn ngữ lập trình G.
Cơ bản, G-Code là một ngôn ngữ lập trình mà thông qua các công cụ, thiết bị nó có thể thông báo và ra lệnh cho các thiết bị (ở đây là máy CNC của chúng ta) biết phải di chuyển thế nào, với tốc độ bao nhiêu, tắt/mở thiết bị gì, quỹ đạo di chuyển thế nào v.v... Phổ biến nhất ở đây ứng dụng trong CNC của chúng ta là điều khiển sự di chuyển trục chính hoặc phôi hoặc cả hai với mục đích cắt đi những phần dư thừa nhằm mục đích tạo ra một sản phẩm có hình thể như yêu cầu.
G-Code có 02 nhóm lệnh chính là nhóm lệnh G & lệnh M.

*Nhóm lệnh G.*- Là lệnh quy định sự dịnh chuyển (Geometric Function).
- Là lệnh quy định chế độ làm việc của máy
- Lệnh G được mã hóa từ G00 cho đến G99, mỗi lệnh có các chức năng và yêu cầu riêng.
*Nhóm lệnh M.*- Là lệnh quy định các chức năng phụ như bắt đầu, dừng, kết thúc, tắt mở một vài chức năng khác như bơm nước, trục chính v.v...
- Lệnh M được mã hóa từ M00 cho đến M99, mỗi lệnh có các chức năng và yêu cầu riêng.
- Với Mach3 còn cho phép chúng ta mở rộng thêm rất nhiều lệnh M khác. Mỗi lệnh M tạo thêm trong Mach3 là một tập lệnh VB (còn được gọi là macro).
*Tham số.*Kèm theo lệnh G hoặc M là các tham số. Các tham số này quy định cho máy biết các giá trị đi kèm liền kề sau đó dùng cho mục đích gì?, các khoảng cách cần phải di chuyển hoặc điều khiển một thiết bị nào đó. Đây là vài tham số thông dụng & thường gặp:
- X, Y, Z, A, B, C là tọa độ theo các trục.
- I, J, K là tọa độ tâm cung tròn theo các trục tương ứng là X, Y, Z
- F (feedrate) là tốc độ hay lượng chạy dao.
- S (speed) là tốc độ phay của trục chính.
- T số thứ tự dao.
_Còn tiếp_

----------

Bamboo_VN, chetaocnc, CNC abc, cuong, ducduy9104, haianhelectric, haignition, hieub1305461, kametoco, katerman, loccd, minhtriet, Mr.L, Nguyễn Văn Phương, Quang_Q7, tcm, thuyên1982, titi, Tuanlm, vuthanh, yamahaymh

----------


## CKD

*Lệnh di chuyển theo đường thẳng G0 & G1.*

* lưu ý cách ghi, cú pháp...Gx là bắt buộc, trong đó x là từ 0 (hoặc 00) đến 99.
[x] ký hiệu [] biểu thị tham số không bắt buộc, có thể có hoặc không.
*G0 - lệnh di chuyển nhanh.*
Là lệnh di chuyển thẳng & nhanh theo tọa độ X, Y, Z hoặc cả A, B, C. Di chuyển với tốc độ tối đa mà máy có thể đáp ứng được. Thường dùng để di chuyển nhanh giữa các vùng cần gia công.
 
Cú pháp: G0 [X] [Y] [Z] [A] [B] [C]
Ví dụ: G0 X0.5 Y1.3 Z10
Ý nghĩa: Di chuyển nhanh đến tọa độ X 0.5, Y 1.3, Z 10.

Lưu ý trãnh gãy vỡ dụng cụ


*G1 - lệnh di chuyển với tham số tốc độ.*
Là lệnh di chuyển thẳng với tốc độ được kiểm soát theo tham số kèm theo, hoặc tham số tốc độ đã quy định trước đó. Thường dùng trong quá trình gia công.
 
Cú pháp: G0 [X] [Y] [Z] [A] [B] [C] [F] với F là tham số tốc độ
Ví dụ: G0 X0.5 Y1.3 Z10 F1000
Ý nghĩa: Di chuyển đến tọa độ X 0.5, Y 1.3, Z 10 với tốc độ 1000 đơn vị/phút.


Bài viết có dùng một số hình ảnh từ nguồn http://www.tormach.com

----------

anhcos, Bamboo_VN, CBNN, CNC abc, kametoco, loccd, minhtriet, Nam CNC, Nguyễn Văn Phương, Quang_Q7, tcm, Tuanlm, vuthanh, yamahaymh

----------


## CKD

*Lệnh di chuyển theo cung tròn G2 & G3.*

* lưu ý cách ghi, cú pháp...Gx là bắt buộc, trong đó x là từ 0 (hoặc 00) đến 99.
[x] ký hiệu [] biểu thị tham số không bắt buộc, có thể có hoặc không.


*G2 - lệnh di chuyển theo chiều thuận (CW)*

VD theo ảnh trên:F1000
G17
G1 X1 Y2
G2 X2 Y1 I1 J1
*G3 - lệnh di chuyển theo chiều nghịch (CCW)*

VD theo ảnh trên:F1000
G17
G1 X2 Y2
G2 X1 Y1 I2 J2
Hai lệnh này đều có cú pháp và cách thức sử dụng giống nhau nhưng khá phức tạp vì phải xác định đúng mặt phẳng gia công là XY, XZ hay YZ. Với mỗi mặt phẳng gia công thì tham số tương ứng cũng khác.

Sử dụng G2/G3 với mặt phẳng XY (G17 sẽ trình bày sau)
Cú pháp: G2 [X] [Y] [Z] [A] [I] [J] [F]

Sử dụng G2/G3 với mặt phẳng XZ (G18 sẽ trình bày sau)
Cú pháp: G2 [X] [Y] [Z] [A] [I] [K] [F]

Sử dụng G2/G3 với mặt phẳng YZ (G19 sẽ trình bày sau)
Cú pháp: G2 [X] [Y] [Z] [A] [J] [K] [F]

Ngoài ra còn một cú pháp tổng quát khác là G2 [X] [Y] [Z] [R] [F]

Trong đótọa độ điểm bắt đầu là tọa độ điểm kết thúc của dòng lệnh trước đó.
X, Y, Z là tọa độ điểm đến hay điểm kết thúc.
I, J, K là tọa độ tâm cung tương ứng với các trục X, Y, Z.
R là bán kính cung tròn.
F là tốc độ.
*G17, G18, G19 lệnh quy định mặt phẳng gia công.*
Các lệnh G17, G18, G19 quy định các mặt phẳng gia công tương ứng là xOy, xOz và yOz.


** Với Mach3, khi sử dụng nhóm lệnh G2/G3 phải thật cẩn thận vì có thể gây lỗi.* Các lỗi thường gặp như lỗi hệ tọa độ tương đối & tuyệt đối. Lỗi chọn mặt phẳng sử dụng không đúng với cú pháp dược dùng. Do đó khuyên không nên sử dụng lệnh này nếu chưa hiểu rỏ cũng như khi chưa config Mach3 đúng.

Bài viết có dùng một số hình ảnh trên internet

----------

anhcos, Bamboo_VN, CBNN, CNC abc, ducduy9104, GOHOME, GORLAK, hadenki, haianhelectric, haignition, k123kien, kametoco, KDD, loccd, magic_kid, minhtriet, mpvmanh, Mr.L, Nguyễn Văn Phương, occutit, Quang_Q7, tcm, thanhvp, titi, Tuanlm, writewin

----------


## Nguyễn Văn Phương

mình làm bên nước ngoài 4 năm với máy cnc mak chẳng biết gì khác toàn phần mềm có sẵn làm theo giờ tìm hiểu quả là nó có nhiều tác dụng. :Big Grin:

----------


## CKD

> mình làm bên nước ngoài 4 năm với máy cnc mak chẳng biết gì khác toàn phần mềm có sẵn làm theo giờ tìm hiểu quả là nó có nhiều tác dụng.


Mình cũng vậy thôi.. toàn dùng phần mền để xuất code. Nhưng tìm hiểu thêm để khi cần có thể nhìn code, hiểu được phần nào, có thể hiệu chỉnh nho nhỏ trên code.

----------

titi

----------


## anhcos

Mình gia công một chi tiết nhỏ khoảng 40 dòng lệnh, sau đó muốn thực hiện tiếp ở vị trí khác cách đó 1 đoạn dx, dy thì dùng lệnh gcode như thế nào. 
Bác nào biết chỉ dùm cho mình với...

----------


## giaiphapcnc

Nếu dùng Mach3 xem thử M98 và M99, hoặc xem wizard Nesting trong đó xem.

----------


## letien2803

> *G-Code?*
> G-Code, một từ, một khái niệm có thể rất quen nhưng cũng có thể rất lạ với các bạn. Quen là vì khi chúng ta làm CNC, chúng ta hay nghe nhắc đến. Lạ là vì có thể chúng ta chưa hiểu G-Code là gì?
> Nay CKD xin trình bày một số hiểu biết của mình về G-Code, mong rằng nó có thể hữu ích cho các bạn mới tập tành bước chân vào con đường CNCer.
> Trong quá trình viết bài, nếu có thiếu sót mong các cao thủ có thể chỉ điểm giúp. Thanks.
> 
> *Trước hết G-Code là gì?*
> G-Code là tên gọi của một ngôn ngữ lập trình ứng dụng trong điều khiển số (còn gọi là NC hoặc *N*umerical *C*ontrol). G-Code thường được sử dụng trong tự động hóa, tự động với sự trợ giúp của máy tính (còn gọi là CAE hay  *C*omputer *A*ided *E*ngineering). Đôi khi G-Code còn được gọi là ngôn ngữ lập trình G.
> Cơ bản, G-Code là một ngôn ngữ lập trình mà thông qua các công cụ, thiết bị nó có thể thông báo và ra lệnh cho các thiết bị (ở đây là máy CNC của chúng ta) biết phải di chuyển thế nào, với tốc độ bao nhiêu, tắt/mở thiết bị gì, quỹ đạo di chuyển thế nào v.v... Phổ biến nhất ở đây ứng dụng trong CNC của chúng ta là điều khiển sự di chuyển trục chính hoặc phôi hoặc cả hai với mục đích cắt đi những phần dư thừa nhằm mục đích tạo ra một sản phẩm có hình thể như yêu cầu.
> G-Code có 02 nhóm lệnh chính là nhóm lệnh G & lệnh M.
> ...




em còn thắc mắc nhỏ. mong các cao nhân thông não hộ em với!!! em chưa hiểu phần bù dao khi gia công ạ, nếu dao 10mm thì khi cắt tâm dao trùng với điểm bắt đầu cắt, như vậy thì cung tròn sẽ mất 5mm do bắt kính dao ăn vào. Vậy làm thế nào để khắc phục ạ?

----------


## CKD

Bạn hỏi.. như chưa biết gì về cnx.
Khi xuất dường dao, sẽ có 3 kiểu khác nhau.
- dao thuận (hay dao phải) phương cắt của dao cùng chiều với phương tiến của dao, và dao ở bên phải mép cắt.
- dao nghịch (dao trái) phương cắt của dao ngược với phương tiến của dao. Dao nằm bên trai mép cắt.
- dao theo mép cắt, tâm dao trùng với đường biên cắt.

Vậy nên thông thường là đường dao đã bù trừ bán kính dao rồi. Trong trường hợp hao mòn dao, dao đã mài lại. Thì mới dùng lệnh offset để bù đi lượng hao mòn.

----------


## hoahong102

> Cú pháp: G0 [X] [Y] [Z] [A] [B] [C] [F] với F là tham số tốc độ
> Ví dụ: G0 X0.5 Y1.3 Z10 F1000
> Ý nghĩa: Di chuyển đến tọa độ X 0.5, Y 1.3, Z 10 với tốc độ 1000 đơn vị/phút.


chỗ này là G1 mới phải chứ bác, 
mình ko được học cơ khí do hoành cảnh phải tìm hiểu để làm nên giờ cũng hiểu đựoc kha khá code...
xuất code bằng phần mềm rất dễ, nhưng muốn làm tốt nên hiểu đựoc ý nghĩa đoạn code sẽ rất có ích...ví dụ đang làm gãy dao cần cắt trình làm tiếp nếu ko hiểu Gcode sẽ rất nguy hiểm lúc này bạn phải soạn code bằng tay cho dao đến vị trí gẫy dao để làm tiếp ....

----------

CKD

----------


## hoahong102

> Mình gia công một chi tiết nhỏ khoảng 40 dòng lệnh, sau đó muốn thực hiện tiếp ở vị trí khác cách đó 1 đoạn dx, dy thì dùng lệnh gcode như thế nào. 
> Bác nào biết chỉ dùm cho mình với...


cách 1. với máy hỗ trợ sét nhiều gốc:  Sét gốc 1 G54 ở chỗ phôi 1, gốc 2 G55 ở chỗ phôi 2....đến G59, khi nào chạy chỗ 1 thì code là G54, chỗ 2 code là G55 VD: G0 G90 G54 X50 Y50
Cách 2 vẽ sản phẩm ở các vị trí khác nhau rồi xuất code.

----------

anhcos

----------


## GORLAK

> cách 1. với máy hỗ trợ sét nhiều gốc:  Sét gốc 1 G54 ở chỗ phôi 1, gốc 2 G55 ở chỗ phôi 2....đến G59, khi nào chạy chỗ 1 thì code là G54, chỗ 2 code là G55 VD: G0 G90 G54 X50 Y50
> Cách 2 vẽ sản phẩm ở các vị trí khác nhau rồi xuất code.


KO dám múa rìu nhưng trong trường hợp đang chạy gãy dao thì mình có 1 cách sơ cua, đó là trc khi gia công, trên vùng gia công có 1 vị trí khoan chẳn hạn, thì mình sẽ khoan 1 lỗ bằng với đường kính dao, sau đó làm việc bình thường, vị trí khoan đó sẽ là mốc để set lại vị trí nếu đang gia công bị gãy dao hoặc cúp điện...vv... Vì khi có sự cố xảy ra, chỉ cần làm 1 G-code cho dao chạy tới vị trí đó (bảo đảm sẽ lệch, so dao đúng vị trí khoan rồi set lại trên bảng cho đúng như trên G-code là ok. về lại zero rồi load lại G-code chạy tiếp.

----------

haiquanckbn

----------


## hoahong102

mình xin góp chút ví dụ cụ thể để người hoàn toàn chưa có khái niệm như mình lúc trước hiểu nhanh nhất có thể:
*%                *  _  (Mở đầu trình phải có )_
*:0001   *  _ (Tên trình)_
*G40 G17 G80 G49 *  _   (các dòng lệnh về hệ tọa độ, tùy theo postproset cho mỗi máy mà cái này có thêm hay bớt, nếu mang code máy fanuc cho máy mach 3 là phải sửa chỗ này)_
*G0 G90 *  
*T5 M6         *  _(M6= thay dao, T5= dao số 5, với máy có thay dao tự động)_
*G54 G90     *  _(gốc tọa độ tuyệt đối, sét gốc phôi cho vị trí  G54, có thể là G55- G59 nếu làm việc nhiều phôi trên bàn)_
*( Toolpath Name: c2 buom)*       (_những cái trong ngoặc là thông tin để người làm nhớ ko ảnh hưởng đến máy làm việc)_
( Toolpath Stats :Smile: 
( TIME: 0/28/21)
( LIFTS: 478)
*G0 X162.296 Y157.922 S6500 M3* _( di chuyển nhanh đến : X162.296 Y157.922, M3 bật Spindle thuận tốc độ S 6500)_
*G43 Z-1.943 H5 M8*  _ (G43 bù dao với H5 rồi di chuyển đến Z-1.943, M8= bật nước tưới nguội)_
*G1 Z-6.943 F800 *  _(G1 di chuyển với F800 đến Z-6.943)_
............
Với G2, G3 thì di chuyển theo đường cong có thông số  i, j Q

----------

haignition

----------


## haiquanckbn

> KO dám múa rìu nhưng trong trường hợp đang chạy gãy dao thì mình có 1 cách sơ cua, đó là trc khi gia công, trên vùng gia công có 1 vị trí khoan chẳn hạn, thì mình sẽ khoan 1 lỗ bằng với đường kính dao, sau đó làm việc bình thường, vị trí khoan đó sẽ là mốc để set lại vị trí nếu đang gia công bị gãy dao hoặc cúp điện...vv... Vì khi có sự cố xảy ra, chỉ cần làm 1 G-code cho dao chạy tới vị trí đó (bảo đảm sẽ lệch, so dao đúng vị trí khoan rồi set lại trên bảng cho đúng như trên G-code là ok. về lại zero rồi load lại G-code chạy tiếp.


Nếu vậy sử dụng gốc máy để lưu lại vị trí gốc phôi. sau đó Khi chạy lại chỉ cần reset máy. lấy lại gốc phôi dựa vào gốc máy là dc ah.
Vì e sử dụng đục tranh nên e tạo 1 micro như này ah. nhấn nút tự home các trục. sau đó set gốc toàn bộ về 0 ( gốc máy trùng vs gốc phôi). sau đó g00x300y300. sau đó lại set gốc phôi x0y0 => tương đương với việc cài gốc phôi ở vị trí x300y300 so với gốc máy.
Sau này mất điện chỉ việc chạy lại micro đó là có dc gốc phôi rồi. sai số phụ thuộc vào cảm biến home của các bác thôi ah.

Với trường hợp phôi gá sẵn mà gốc phôi không phải ở vị trí x300y300 nữa thì e có cách khắc phục là sau khi set gốc phôi. a chuyển sang hệ tọa độ gốc máy. ghi lại tọa độ đó. sau này mất điện chỉ cần home các trục rồi đưa đầu trục đến vị trí đã dc ghi lại. set gốc phôi là dc rồi ah.
Ngu kiến của em nhờ các bác chỉ giáo thêm ah.

----------

