Custom macro for cnc machine (gcode)

L

lam.pham

Ðề: Custom macro for cnc machine (gcode)

Bác QuyenMC ơi. Bác giải thích chương trình này giúp em nhé. Trong Cimco nó chạy không được. Đây là 1 chương trình có sẵn trên máy của em. Mấy ông chạy thử máy chạy rồi nhưng em không hiểu gì hết.


Code:
% 
O0202
N001
G91G28G0Z0 
G92Z0
G91G00Z0.9 
G04X2. 
G91G00Z-0.9
G04X4. 
M00
#1=1 
WHILE[#1LE16]DO1 
G91G0Z-100.
G4X4.
#1=#1+1
END1 
G91G0Z-0.9 
G4X2.
G91G0Z0.9
G4X4.
#2=1 
WHILE[#2LE16]DO2 
G91G0Z100. 
G4X4.
#2=#2+1
END2 
G91G28G0Z0 
M00

N002
G91G28Z0.
G4X2.
G92Z0. 
G91G0Z0.9
G4X2.
G91G0Z-0.9 
M00
#1=1 
WHILE[#1LE5]DO1
G90G0Z-205.771 
G4X4.
G90G0Z-460.052 
G4X4.
G90G0Z-671.694 
G4X4.
G90G0Z-928.403 
G4X4.
G90G0Z-1146.746
G4X4.
G90G0Z-1370.511
G4X4.
G90G0Z-1600. 
G4X4.
G90G0Z-1600.9
G04X2. 
G90G0Z-1600. 
G4X4.
G90G0Z-1370.511
G4X4.
G90G0Z-1146.746
G4X4.
G90G0Z-928.403 
G4X4.
G90G0Z-671.694 
G4X4.
G90G0Z-460.052 
G4X4.
G90G0Z-205.771 
G4X4.
G90G0Z0. 
G4X4.
G90G0Z0.9
G4X2.
G90G0Z0. 
G4X4.
#1=#1+1
END1 
G91G28Z0.
M00

N003(Z ICHI KIME KURI.)
G91G28G0Z0 
G92Z0. 
G91G00Z0.9 
G4X2.
G91G0Z-0.9 
G4X2.
G91G0Z-700.
M00
#1=1 
WHILE[#1LE7]DO1
G91G00Z-200. 
G4X8.
G91G0Z200. 
G4X8.
#1=#1+1
END1 
G91G28Z0.
M00
Còn code chương trình này chỉ là chương trình warm up máy mới cài đặt thôi, giống như mới mua xe về chạy "rô đai" ý.
G04 Dwell time (thời gian máy đứng yên khi xong câu lệnh trước đó).
Ví dụ:
G91G0Z-0.9
G4X2. (máy xong câu lệnh trên dao sẽ tại vị trí đó trong 2s rồi mới chạy tiếp câu lệnh kế tiếp.)
G91G0Z-700.
Thân!
 
Ðề: Custom macro for cnc machine (gcode)

Macro là ngôn ngữ của nhà sản xuất, toàn *#.... bố tây cũng bó chiếu. Mình chỉ áp dụng thôi. cứ G65 mà phang...
còn ai muốn chuyên sâu chắc phải mất chi phí
Mong bác chỉ giáo rõ hơn một tý:
Mấy chương trình macro nằm ở đâu và làm sao để mình biết là chương trình đó làm gì. Mong bác chỉ giáo từ đầu để em được mở mang tầm mắt thêm. Cám ơn Bác.
 
L

lam.pham

Ðề: Custom macro for cnc machine (gcode)

Mong bác chỉ giáo rõ hơn một tý:
Mấy chương trình macro nằm ở đâu và làm sao để mình biết là chương trình đó làm gì. Mong bác chỉ giáo từ đầu để em được mở mang tầm mắt thêm. Cám ơn Bác.
vuthemanh1 Thân!
Macro cũng chỉ là chương trình gia công của mình mà thôi, thay vì giá trị tọa độ là 1 con số cụ thể thì giá trị tọa độ trong macro sẽ thay bằng các biến. ví dụ nha
với chương trình thường: G01 X10.Y35.5 F20 Macro thì như thế này: #1=10.
X20. #2=35.5
...... #3=#1.+10.
G01 X#1 Y#2
X#3
........
Ngoài ra còn 1 số biến đặc biệt khác nữa. Gán biến ở trên là tôi đã gán trược tiếp lên chương trình, ngoài ra bạn còn có thể thiết lập thông số biến trong user parameter nữa.
Tại sao người ta xài macro? Bạn hình dung như vầy nha, giả sử bạn 30 lỗ trên 1 chi tiết, và tọa độ tâm 30 lỗ đó sẽ tuân theo 1 hàm toán học, thay vì bạn xác định giá trị tọa độ tâm từng lỗ thì chương trình bạn sẽ rất dài, lúc này macro sẽ phát huy tác dụng, cực kỳ ngắn gọn, hoặc bạn gia công chi tiết khác giống như trên như tỉ lệ kích thước scale lại còn 1:2 hay 1:3,4.. chẳng hạn nếu không có macro, bạn sẽ tính lại rất mất thời gian, nếu xài macro, bạn chỉ cần sửa giá trị của biến ban đầu. Chương trình tiện lợi, ngắn gọn.
Máy mới mua về thường sẽ có sách đi kèm, tôi nhớ là macro được giải thích trong cuốn programming manual rất chi tiết đó bạn. Nếu bạn biết ngôn ngữ Visual Basic hay C hay pascal cơ bản thôi, không cần cao siêu thì viết 1 chương trình macro sẽ không khó với bạn đâu.
Thân!
 

QuyenQCM

Active Member
Author
Ðề: Custom macro for cnc machine (gcode)

@lam.pham: Bác siêu quá, mình không rành mấy cái vụ macro này cho lắm, chỉ áp dụng với con máy của cty thôi, cũng chỉ được vài ba lệnh, mấy chú công nhân cty mình thì khoản settup này pro hơn nhiều, post lên đây để cho anh em giao lưu học hỏi thôi...
 
Ðề: Custom macro for cnc machine (gcode)

Đang quan tâm mấy cái vụ Macro này.Bác nào rành giải thích giúp em đoạn
này với.Xem qua thấy còn lơ mơ quá• :8000(PILLAR HOLES)
• #100=1.0(CUTTER DIAMETER)
• #101=30.0(X CENTRE)
• #102=30.0(Y CENTRE)
• #103=0.0
• #104=30.0(DEPTH OF HOLE)
• #105=50.0(DIA OF HOLE)
• #106=3000(SPNDLE SPEED)
• #107=500.0(FEED)
• #108=10(TOOL POS)
• #110=20.0(DEPTH OF CUT)
• G00G91G28Z0.0
• G91G28X0.0Y0.0
• T#108M06
• G00G90G54X#101Y#102S#106M03
• G43Z10.0H#108M08
• N1WHILE[-#104LE#103]DO1
• #103=[#103-#110]
• IF[-#104GT#103]GOTO20
• G1Z#103F[#107/3]
• G03X[#101+#105-#100/2]R[[#105-#100]/4]F#107 I-[#105/2-#100/2]J0.0
• X#101R[[#105-#100]/4]
• G00Z10.0
• END1
• N20#103=-#104
• G01Z#103F[#107/3]
• G03X[#101+#105-#100/2]R[[#105-#100]/4]F#107[[#10-#100]/4]
• G00Z10.0 M09
• G00G91G28Z0.0
• G91G28X0.0Y0.0
• M30
 
L

lam.pham

Ðề: Custom macro for cnc machine (gcode)

Đang quan tâm mấy cái vụ Macro này.Bác nào rành giải thích giúp em đoạn
này với.Xem qua thấy còn lơ mơ quá• :8000(PILLAR HOLES)
• #100=1.0(CUTTER DIAMETER)
• #101=30.0(X CENTRE)
• #102=30.0(Y CENTRE)
• #103=0.0
• #104=30.0(DEPTH OF HOLE)
• #105=50.0(DIA OF HOLE)
• #106=3000(SPNDLE SPEED)
• #107=500.0(FEED)
• #108=10(TOOL POS)
• #110=20.0(DEPTH OF CUT)
• G00G91G28Z0.0
• G91G28X0.0Y0.0
• T#108M06
• G00G90G54X#101Y#102S#106M03
• G43Z10.0H#108M08
• N1WHILE[-#104LE#103]DO1
• #103=[#103-#110]
• IF[-#104GT#103]GOTO20
• G1Z#103F[#107/3]
• G03X[#101+#105-#100/2]R[[#105-#100]/4]F#107 I-[#105/2-#100/2]J0.0
• X#101R[[#105-#100]/4]
• G00Z10.0
• END1
• N20#103=-#104
• G01Z#103F[#107/3]
• G03X[#101+#105-#100/2]R[[#105-#100]/4]F#107[[#10-#100]/4]
• G00Z10.0 M09
• G00G91G28Z0.0
• G91G28X0.0Y0.0
• M30
nam1408_hn thân!
Như tôi đã trình bày ở trên, thì với chương trình này, bạn thử thay các biến #100, #101....bằng các giá trị đã gán vào chương trình thì sẽ hiểu ngay.
Tôi sẽ giải thích 1 chút về những câu lệnh thôi nha.
+ #100= 1.0.......cho tới #110=20. thì tôi khỏi nói nha: những câu này bạn gán kích thước dao, tọa độ, tốc độ trục chính, bước tiến...
+G00G91G28Z0.0
G91G28X0.0Y0.0 2 dòng này khỏi nói nha.
+
T#108M06 : đây là bạn gọi con dao số 10, vì bạn đã gán vào biến #108=10 .
+
G00G90G54X#101Y#102S#106M03: bạn chạy dao nhanh tới tọa độ X=30.0, Y=30.0, trục chính quay với tốc độ là 3000. vì bạn đã gán giá trị vào các biến #101=30.0, #102=30.0, #106=3000
+
G43Z10.0H#108M08 : bạn xài G43 bù dài dao với ô nhớ H10, vì biến #108=10.
+
N1WHILE[-#104LE#103]DO1 : Cấu trúc lệnh này tôi đã nói rồi, xin xem lại các bài ở trên nha,
ở đây #104=30, dựa vào cấu trúc lệnh thì -#104=-30. hiện tại nhỏ hơn #103=0.0, do đó máy sẽ thực hiện các câu lệnh bắt đầu từ N1. cho tới khi biến #103 thay đổi giá trị nhỏ hơn -30. và kết thúc vòng lặp này.
+
#103=[#103-#110] : sao khi máy chạy các câu lệnh trong N1, hết mỗi 1 chu kỳ, thì giá trị #103 sẽ thay đổi theo công thức là: giá trị #103 trước đó - cho giá trị biến #110. Hiện tại với vòng lặp đầu tiên thì giá trị #103= 0, sau khi xong chu kỳ đầu, giá trị #103 mới = Giá trị #103 đầu (0.0) - giá trị #110 (20.0) =-20.0. Khi đó máy sẽ lấy giá trị này sao sánh với -#104, nếu thỏa điều kiện thì tiếp tục vòng lặp gia công, nếu không thỏa thì sẽ thoát ra N1 để tiếp tục chu trình gia công mới.
+
IF[-#104GT#103] GOTO20: như đã nói ở trên, giả sử -#104 lớn hơn #103, thì chương trình gia công sẽ nhảy tới N20 để gia công chu trình khác. Ở đây, người lập trình xài cấu trúc IF......GOTO..... lệnh IF này vẫn nằm trong N1, chỉ để so sánh #104 để cho phép máy chạy tới N20 hay không.
+
G1Z#103F[#107/3]
+
G03X[#101+#105-#100/2]R[[#105-#100]/4]F#107 I-[#105/2-#100/2]J0.0
+
X#101R[[#105-#100]/4]
+
G00Z10.0
nếu như thỏa điều kiện cấu trúc While và IF trong N1 thì máy sẽ gia công như trên, còn tọa độ gia công X, y, Z, R thấy rườm ra như vậy bạn chịu khó lấy máy tính ra thay biến bằng số đã gán rồi +, -, *,/ nha.
+
END1...kết thúc lệnh While nếu -#104 không nhỏ hơn hoặc bằng #103 và thỏa mãn lệnh IF -#104 > #103 thì sẽ gia công chu trình kế tiếp là N20. Theo như tôi tính toán thì giá trị #103 qua 2 chu kỳ sẽ là -40. nên máy sẽ chạy tiếp N20.
+
N20#103=-#104 : khi đã thoát khỏi vòng lặp WHILE, lúc này giá trị #103=-40. nhưng theo yêu cầu gia công hay thông số cắt gọt thì người lập trình đã gán #103=-#104 tức là #103 lúc này bị gán giá trị = -30.
+
G01Z#103F[#107/3]
+
G03X[#101+#105-#100/2]R[[#105-#100]/4]F#107[[#10-#100]/4]
+
G00Z10.0 M09
• G00G91G28Z0.0
• G91G28X0.0Y0.0
• M30
máy tiếp tục gia công với G1 G2 G3....gì gì đó, tọa độ X Y Z thì bạn tự tính nha, cộng trừ nhân chia thôi.
thực ra mình không cần tính, máy CNC tự tính rồi, tính tọa độ ở đây thực chất là để hiểu rõ vấn đề thôi.
Thân!
 
Ðề: Custom macro for cnc machine (gcode)

Chào bác lam.pham, các bài viết của bác rất hay. Nếu có thời gian bác giải thích giúp em một chút ở chương trình Macro này nhé.
Đây là chương trình mô phỏng chạy 01 cung ellipse

T01M06
N10 G54 G90 G0 S1500 M03
N12 X0 Y0 Z20.
N14 G0 Z1
N16 G1 Z-5. F150.
N18 G41 D1
N20 #1=0
N22 #2=34
N24 #3=24
N26 #4=#2*COS[#1]
N28 #5=#3*SIN[#1]
N30 #10=#4*COS[45]-#5*SIN[45]
N32 #11=#4*SIN[45]+#5*COS[45]
N34 G1 X#10 Y#11
N36 #1=#1+1
N38 IF [#1 LT 370] GOTO26 (Câu lệnh IF là nếu: LT= LESS THAN bác không cần giải thích vì bác đã giải thích rồi. Nhưng GOTO26 là gì bác giải thích giúp em nhé: số 26 sau đuôi có ý nghĩa và mục đích để làm gì?)
N40 G40 G1 X0 Y0
N42 G0 Z100
N44 M30

Ngoài ra bác cho em hỏi một số câu hỏi sau nhé. Em cũng đang tập làm chương trình bằng Macro.
1: Nguyên tắc gán biến Macro tại những vị trí nào trong chương trình.
2: Bác có thể tổ hợp một số cặp Macro thông dụng trong Macro đi liền với nhau được không: Ví dụ (IF [ .. LT hoặc LE...] ;
3: Có nên chỉnh sửa Macro trực tiếp vào Parameter của máy không hay nên mỗi chương trình tự gán biến Macro vào?
Mong bác hỗ trợ
Chân thành cảm ơn bác nhiều về các đóng góp cho mọi người

 
Last edited by a moderator:
Ðề: Custom macro for cnc machine (gcode)

Rất Cám ơn Lam.Pham. Nhờ chỉ giáo của bác tôi thấy đã bắt đầu có hướng để tìm hiểu. Một lần nữa xin cám ơn.
 
Ðề: Custom macro for cnc machine (gcode)

Chào bác lam.pham, các bài viết của bác rất hay. Nếu có thời gian bác giải thích giúp em một chút ở chương trình Macro này nhé.
Đây là chương trình mô phỏng chạy 01 cung ellipse

T01M06
N10 G54 G90 G0 S1500 M03
N12 X0 Y0 Z20.
N14 G0 Z1
N16 G1 Z-5. F150.
N18 G41 D1
N20 #1=0
N22 #2=34
N24 #3=24
N26 #4=#2*COS[#1]
N28 #5=#3*SIN[#1]
N30 #10=#4*COS[45]-#5*SIN[45]
N32 #11=#4*SIN[45]+#5*COS[45]
N34 G1 X#10 Y#11
N36 #1=#1+1
N38 IF [#1 LT 370] GOTO26 (Câu lệnh IF là nếu: LT= LESS THAN bác không cần giải thích vì bác đã giải thích rồi. Nhưng GOTO26 là gì bác giải thích giúp em nhé: số 26 sau đuôi có ý nghĩa và mục đích để làm gì?)
N40 G40 G1 X0 Y0
N42 G0 Z100
N44 M30

Ngoài ra bác cho em hỏi một số câu hỏi sau nhé. Em cũng đang tập làm chương trình bằng Macro.
1: Nguyên tắc gán biến Macro tại những vị trí nào trong chương trình.
2: Bác có thể tổ hợp một số cặp Macro thông dụng trong Macro đi liền với nhau được không: Ví dụ (IF [ .. LT hoặc LE...] ;
3: Có nên chỉnh sửa Macro trực tiếp vào Parameter của máy không hay nên mỗi chương trình tự gán biến Macro vào?
Mong bác hỗ trợ
Chân thành cảm ơn bác nhiều về các đóng góp cho mọi người
Chào
1. Bạn xem lại trả lời của Lam.Pham nhé, câu lệnh Goto26 chỉ vào địa chỉ số N26 đó, đây chính là một vòng lặp để tính toán tập hợp các điểm tạo ra đường elipse đây mà.
(Câu trả lời gốc của Lam.Pham: +IF[-#104GT#103] GOTO20: như đã nói ở trên, giả sử -#104 lớn hơn #103, thì chương trình gia công sẽ nhảy tới N20 để gia công chu trình khác. Ở đây, người lập trình xài cấu trúc IF......GOTO..... lệnh IF này vẫn nằm trong N1, chỉ để so sánh #104 để cho phép máy chạy tới N20 hay không.).

Trong máy( mình tạm nói riêng về máy Fanuc nhé, do rành nhất mà, còn mấy cái kia thì không biết:38:), macro sẽ được lưu như là parameter( ví dụ ứng với Oi thì Common Vaỉable= #P100-#P149, #P500-#P531, nhìn lại ví dụ của nam1408_hn thì thấy rất rõ, ta chỉ bắt đầu gán biến từ vị trí #100 trở đi). Như vậy ta có thể dùng macro( hoặc gọi cách khác là biến cho quen) ở bất kỳ ở đâu trong chương trình gia công, chỉ chú ý mấy điều: a./ Tên và số lượng các biến phải bảo đảm đúng với quy định của máy( chính xác hơn là hệ điều hành) hiện tại, nếu không thì ta lại vô tình thay đổi các parameter làm việc của máy đấy.
b./ Giá trị của các parameter này sẽ bị mất( =0) nếu đã nhấn nút Reset hoặc Power Off.

Cách lập trình với macro( biến) là bình thường như bất kỳ các ngôn ngữ lập trình bậc thấp nào khác ( V.d: Basic, Fotransv.v...), ta chủ yếu dùng các cặp lệnh If...then, Goto v.v..., chứ sẽ không dùng được các hàm cấp cao như các ngôn ngữ lập trình đời mới gần đây.

Ta có thể chỉnh sửa giá trị của macro trong máy, nhưng như đã nói ở trên, ta chỉ dùng được khi chưa bấm Reset hoặc chưa tắt máy, vì vậy coi chừng mệt hơn.
br.
 
L

lam.pham

Ðề: Custom macro for cnc machine (gcode)

Chào bác lam.pham, các bài viết của bác rất hay. Nếu có thời gian bác giải thích giúp em một chút ở chương trình Macro này nhé.
Đây là chương trình mô phỏng chạy 01 cung ellipse

T01M06
N10 G54 G90 G0 S1500 M03
N12 X0 Y0 Z20.
N14 G0 Z1
N16 G1 Z-5. F150.
N18 G41 D1
N20 #1=0
N22 #2=34
N24 #3=24
N26 #4=#2*COS[#1]
N28 #5=#3*SIN[#1]
N30 #10=#4*COS[45]-#5*SIN[45]
N32 #11=#4*SIN[45]+#5*COS[45]
N34 G1 X#10 Y#11
N36 #1=#1+1
N38 IF [#1 LT 370] GOTO26 (Câu lệnh IF là nếu: LT= LESS THAN bác không cần giải thích vì bác đã giải thích rồi. Nhưng GOTO26 là gì bác giải thích giúp em nhé: số 26 sau đuôi có ý nghĩa và mục đích để làm gì?)
N40 G40 G1 X0 Y0
N42 G0 Z100
N44 M30

Ngoài ra bác cho em hỏi một số câu hỏi sau nhé. Em cũng đang tập làm chương trình bằng Macro.
1: Nguyên tắc gán biến Macro tại những vị trí nào trong chương trình.
2: Bác có thể tổ hợp một số cặp Macro thông dụng trong Macro đi liền với nhau được không: Ví dụ (IF [ .. LT hoặc LE...] ;
3: Có nên chỉnh sửa Macro trực tiếp vào Parameter của máy không hay nên mỗi chương trình tự gán biến Macro vào?
Mong bác hỗ trợ
Chân thành cảm ơn bác nhiều về các đóng góp cho mọi người
ngocm02 Thân!
Theo định nghĩa Eliipse thì tôi giả sử dao là điểm M chạy tương đối với tiêu điểm F1 và F2 của ellipse nha.
Theo như người lập trình thì hàm Ellipse ở trên là phương trình tham số, khong phải chính tắc.
Phương trình ellipse (E) tôi viết lại như sau: (E) : x'=acost
y'=bsint để hiểu rõ hơn bạn xem lại SGK lớp 12 nhé.
Tôi goi tâm ellipse này là O' nha, t là góc quay, (xem lại định nghĩa ellipse nha) a,b là độ dài trục lớn và trục nhỏ.
Tại sao tôi gọi x', và y' mà không gọi là x, y, bởi vì Ở chương trình gia công này thì có 2 hệ quy chiếu, 1 là Oxy, cái này là do bạn xét G54, tôi gọi góc là O, còn lại là hệ quy chiếu O'x'y', là của ellipse so với gốc G54 phôi.
Từ N10 tới N18: tôi không giải thích ha.
+N12: Người ta gán biến #1 = 0, ở đây bạn hiểu #1 chính là t trong phương trình (E), giá trị 0 là góc tại thời điểm đầu tiên của điểm M so với O', khi điểm M di chuyển so với 2 tiêu điểm F1 và F2 thì góc t sẽ biến thiên, tức là #1 biến thiên.
+N14: gán giá trị trục lớn cho ellipse #2=a=34.
+N16: gán giá trị trục nhỏ cho ellipese #3 = b= 24.
+N18 #4=#2cos[#1]
+N20 #5=#3sin[#1] 2 câu lệnh này thực chất là phương trình ellipse tham số đó bạn.
#4 là x', #5 là y', #2 và #3 là a và b, còn #1 là t. Người lập trình tạo 1 hàm cho máy CNC thôi.
+N22 và N24 : là công thức tính ma trận chuyển vị để dưa giá trị x' và y' của hệ quy chiếu O'x'y' về hệ quy chiếu Oxy của G54, theo như tôi, thì máy sẽ chạy ra 1 cung ellipse, có hệ quy chiếu O'x'y' lệch với Oxy 1 góc 45 độ, mà máy CNC cần tọa độ x,y trong hệ quy chiếu Oxy nên mới cần chuyển vị thế này, còn làm sao ra công thức trên thì bạn xem lại sách toán A2 để biết cách tính ma trận chuyển vị nha.
Ngoài lề tí xíu, nếu bạn muốn dao chạy 1 đường ellipse có tâm trung với gốc G54, O' trùng với O thì khong cần viết N22 và N24, tại N34, thay #10 và #11 thành #4 và #5 là OK.
Sau khi xong N34, thì là N36, #1 tăng lên 1 cho tới khi tăng vượt quá 370 thì sẽ thoát vòng lặp và chạy tiếp N40,
Nếu bạn muốn chạy 1 ellipes mới với kích thước khác nhau, thì chỉ cần sửa lại giá trị #2 và #3 là được.
Goto26 tức là máy sẽ so sánh, nếu #1 nhỏ hơn 370 thì sẽ quay về vòng lặp bắt đầu từ N26.
1. Gán biến macro thì chô nào cũng được, theo tôi thì nên đầu chương trình cho dễ quản lý.
2. Tôi sẽ tổng hợp và post lên sau.
3. Anh namnp2007 có nói đó bạn, theo tôi thì nên gán trong chương trình, như vậy mỗi lần tắt máy thì không sợ mất giá trị...
Thân!
 
Ðề: Custom macro for cnc machine (gcode)

Cảm ơn các bác rất nhiều. Vì lệnh DO và GOTO ( có gán các số phía sau) mình chưa phân biệt được rõ ràng nên cần hỏi lại các bác đã chạy rồi để biết chính xác nhất có thể.
 
Ðề: Custom macro for cnc machine (gcode)

__

__Tình hình là thấy bác ca sĩ Duy Mạnh :1: cũng đang nghiên cứu về vấn đề này nên rãnh rỗi sinh nông nổi đi tìm thông tin về chủ đề này để cùng nhau ngâm cứu ^_^...Có 1 vài thông tin về ebook xin chia sẽ cùng các bác quan tâm về CNC Custom Macro của S. K. Sinha.

Link tải chương 6 và 7 của Ebook : CNC Programming Using Fanuc Custom Macro B
















__
 
Ðề: Custom macro for cnc machine (gcode)

__

__Tình hình là thấy bác ca sĩ Duy Mạnh :1: cũng đang nghiên cứu về vấn đề này nên rãnh rỗi sinh nông nổi đi tìm thông tin về chủ đề này để cùng nhau ngâm cứu ^_^...Có 1 vài thông tin về ebook xin chia sẽ cùng các bác quan tâm về CNC Custom Macro của S. K. Sinha.

Link tải chương 6 và 7 của Ebook : CNC Programming Using Fanuc Custom Macro B




__
Tình hình là mình bỏ nghề ca hát theo nghề này nên còn mới mẻ, mong các bác giúp đỡ. Hi hi hi
 
Last edited by a moderator:
P

picachiu

Ðề: Custom macro for cnc machine (gcode)

Các bác có phần mềm mô phỏng macro nào không, cho em xin với; em kiếm mãi mà không có
Cảm ơn ạ.
 
Ðề: Custom macro for cnc machine (gcode)

Các bác có phần mềm mô phỏng macro nào không, cho em xin với; em kiếm mãi mà không có
Cảm ơn ạ.
Cimco edit V6 mô phỏng được mà. Tôi vẫn chạy mô phỏng trên đó. Lưỡi gươm không thể thiếu trong lập trình Phay CNC
 
P

picachiu

Ðề: Custom macro for cnc machine (gcode)

Cimco edit V6 mô phỏng được mà. Tôi vẫn chạy mô phỏng trên đó. Lưỡi gươm không thể thiếu trong lập trình Phay CNC
Cảm ơn anh ạ.
Cho em hỏi, trong CimcoEdit V6 thì mình nhập biến macro vào đâu ạ?
Ví dụ, em có lập trình 1 đoạn để khoan mấy cái lỗ của tấm ép. Hình dạng giống nhau nhưng kích thước có thay đổi nên em sử dụng chương trình macro.
...
Đường kính mũi khoan (Magic 20) em dùng biến #506 và nhập trong máy CNC ở ô nhớ #506 = 20.0, vậy thì làm sao em nhập được để Cimco nó hiểu hả anh?
Em tìm mãi mà không thấy ạ. Giúp em với.
Em cảm ơn ạ.

Code:
O0001(PRESS PLATE)
(#501 PCD)
(#502 SO LO)
(#503 DK NGOAI)
(#504 DK LOI)
(#505 DK BORE)
(#506 DK MAGIC)
/M83
G91G28Z0
G90G58
IF[#501LT[#504+#505]]THEN#3000=1(PCD SAI)
IF[#502NE9.0OR10.0]THEN#3000=1(SO LO SAI)
IF[#503LT#501]THEN#3000=1(DK NGOAI SAI)
IF[#505LT#506]THEN#3000=1(DK BORE SAI)
M1


N1(CENTER MOI)
T2
M6
G90G0X0Y0.T3
(TOOL/DRILL,10,120,100)
(COLOR,255,255,255)
G43Z150.H12
/M8
Z20.
/S700M3
#103=0
G98G81Z-1.5R3.F100
WHILE[#103LE[#504/2-10.0]]DO3
#103=#103+8.
Y#103
END3
G80
IF[[[#501-#504-#505]/2]LT6.0]GOTO11
G98G81X0Y[[#501-#505]/2-3.0]Z-2.F100
N11G80
#103=0
G0G90Z50.


IF[#501GT80.0]GOTO111
G90G0X0Y0.
G16
G98G81X[#503/2.0+4.5]Y[90.0+[180/#502]]Z-2.R2.F100
G91Y[360.0/#502]K[#502-1.0]
G80
G15
N111
G0G90Z100.M9
G91G28Z0
M1


N2(DRILL 8.6)
T3
M6
G90G0X0Y0.T9
G43Z150.H13
/M8
Z20.
/S700M3
#104=0
G98G81Z-12.0R3.F100
WHILE[#104LE[#504/2-10.0]]DO3
#104=#104+8.
Y#104
END3
IF[[[#501-#504-#505]/2]LT6.0]GOTO22
G98G81X0Y[[#501-#505]/2-3.0]Z-12.0F60
N22G80
#104=0


IF[#501GT80.0]GOTO23
G90G0X0Y0.
G16
G98G81X[#503/2.0+4.5]Y[90.0+[180/#502]]Z-11.5R5.F100
G91Y[360.0/#502]K[#502-1.0]
N23G80
G15
G0Z100.M9
G91G28Z0
M1


N3(DRILL 11)
IF[#501LE80.0]GOTO4
T9
M6
G90G0X0Y0.T1
G43Z150.H19
/M8
Z20.
/S800M3
G16
G98G81X[#503/2.0+5.7]Y[90.0+[180/#502]]Z-10.R3.F60
G91Y[360.0/#502]K[#502-1.0]
G80
G15
G0Z100.M9
G91G28Z0
M1


N4(MAGIC DRILL)
T1
M6
T8
G90G0X0Y0
G43Z150.H11/M80
/M8
Z50.
S900M3
G16
G98G81X[#501/2.0]Y90.Z-12.0R5.F40
G91Y[360.0/#502]K[#502-1.0]
G80
G15
G0G90Z100.M9
G91G28Z0
M1


N5(EMILL 20)
IF[#505EQ#506]GOTO6
T8
M6
G90G0X0.Y[#501/2.0]T4
G43Z150.H18/M8
G69
Z50.
/S600M3
M98P0005


G90G17G68X0.Y0.R[360.0/#502]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[2*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[3*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[4*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[5*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[6*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[7*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[8*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


IF[#502EQ9]GOTO1010
G90G17G68X0.Y0.R[9*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


N1010G69
G91G28Z0.M9
M1


N6(EM 9.8)
T4
M6
G90G0X0Y[[#501-#505]/2+6.0]T5
G43Z150.H14
/M8
Z50.
S400M3
G1Z3.F1000
#101=0
WHILE[#101LT6.0]DO1
#101=#101+1.
G1Z-1.0F80
G1G90Y0.F80
G1G91Z-1.
G1G91Y[[#501-#505]/2+2.0]
END1
G0G90Z100.M9
#101=0
G91G28Z0
M1


N7(EM 10)
T5
M6
G90G0X0Y[[#501-#505]/2+6.0]T6
G43Z150.H15
/M8
Z50.
S500M3
G1Z-11.F1000
G1Y0.3F40
G1Y0.F10
G1Y0.2
G1Z10.F1000
G80M5
G0Z100.M9
G91G28Z0
M1


N8([MEDIA=youtube]AVI-CENTER[/MEDIA]-POINT 22)
T6
M6
G90G0X0Y[#501/2]T7
G43Z150.H16
/M8
Z50.
S2000M3
Z3.
G1Z-5.1F200
G1Y[#504/2+1]
G1Z-4.1
G1Y0.
G0G90Z20.
IF[#505GT21.0]GOTO88
G90G0X0Y0
G16
G98G81X[#501/2.0]Y90.Z-[#505/2+0.1]R-4.F200
G91Y[360.0/#502]K[#502-1.0]
G80
G15
N88


G90G0X0.Y[#501/2.0]
G69
/S2000M3
M98P0006


G90G17G68X0.Y0.R[360.0/#502]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[2*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[3*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[4*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[5*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[6*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[7*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[8*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


IF[#502EQ9]GOTO888
G90G17G68X0.Y0.R[9*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


N888G69
G0Z100.M9
G91G28Z0
M1


N9(EM 6)
T7
M6
G90G0X0Y[#503/2+3.15]T2
G43Z150.H17
/M8
Z50.
Z5.
S1400M3
G0G90Z-8.
G1G90Z-10.F500
G2J-[#503/2+3.0]F70
G80M5
G0G90Z100.M9
G91G28Z0
M1


N10([MEDIA=youtube]AVI-CENTER[/MEDIA] 3*10)
T2
M6
G90G0X0Y[#503/2+3.0]T1
G43Z150.H12
/M8
Z50.
Z5.
S3000M3
G1Z-3.8F500
G2J-[#503/2+3.0]F500
G80
G0G90Z100.M9
G91G28Z0M5
G28Y0
T1
M6
M82
M30
(@@@@@@@@@@@@@@@@@@@@@@@@@)
%
O0005(EM20)
/600M3
G90G0Z-8.
G1Z-11.F70
G42G91G1X0Y[#505/2]D18
G2J-[#505/2]
G0X0Y-[#505/2]G40
G0Z20.
M99


O0006(CENTER-POINT-22)
/S1000M3
G90G0Z-8.
G1Z-10.F100
G42G91G1X0Y[#505/2+0.1]D18
G2J-[#505/2+0.1]
G0X0Y-[#505/2+0.1]G40
G0Z20.
M99
%
 
Ðề: Custom macro for cnc machine (gcode)

picachiu thân.

Dòng mình bôi đỏ mình chưa hiểu rõ ý bạn lắm.

Đường kính mũi khoan (Magic 20) em dùng biến #506 và nhập trong máy CNC ở ô nhớ #506 = 20.0, vậy thì làm sao em nhập được để Cimco nó hiểu hả anh?

Chương trình bạn nhập vào máy CNC của bạn như thế nào thì vào nhập vào CIMCO y hệt như vậy là nó chạy được. Muốn chạy được CIMCO thì vào phần Backplot, chọn FANUC MILLING thì máy sẽ hiểu ( #506 = 20.0 - nhập như vậy luôn)
Chú ý: Riêng khi chạy chương trình con khi chạy trong CIMCO nó chỉ hiểu là nó chạy 1 lần thôi nhé: Ví dụ bạn gọi M98P1234 thì nó hiểu rằng nó sẽ chạy chương trình con số O1234, nhưng khi bạn gán vòng lặp M98P301234 thì CIMCO nó không hiểu là mình sẽ chạy lặp 30 lần và không chạy
Cimco V6 có đặc điểm lợi hại nữa là hiểu máy tiện-phay mà gắn thêm trục C nữa. Chạy biên dạng trục C và kiểm tra rất tốt.

Xong chương trình nhớ post lại chương trình cho mình tìm hiểu với nhé. Mình chưa hiểu lắm về Macro này đâu.


Cảm ơn anh ạ.
Cho em hỏi, trong CimcoEdit V6 thì mình nhập biến macro vào đâu ạ?
Ví dụ, em có lập trình 1 đoạn để khoan mấy cái lỗ của tấm ép. Hình dạng giống nhau nhưng kích thước có thay đổi nên em sử dụng chương trình macro.
...
Đường kính mũi khoan (Magic 20) em dùng biến #506 và nhập trong máy CNC ở ô nhớ #506 = 20.0, vậy thì làm sao em nhập được để Cimco nó hiểu hả anh?
Em tìm mãi mà không thấy ạ. Giúp em với.
Em cảm ơn ạ.

Code:
O0001(PRESS PLATE)
(#501 PCD)
(#502 SO LO)
(#503 DK NGOAI)
(#504 DK LOI)
(#505 DK BORE)
(#506 DK MAGIC)
/M83
G91G28Z0
G90G58
IF[#501LT[#504+#505]]THEN#3000=1(PCD SAI)
IF[#502NE9.0OR10.0]THEN#3000=1(SO LO SAI)
IF[#503LT#501]THEN#3000=1(DK NGOAI SAI)
IF[#505LT#506]THEN#3000=1(DK BORE SAI)
M1


N1(CENTER MOI)
T2
M6
G90G0X0Y0.T3
(TOOL/DRILL,10,120,100)
(COLOR,255,255,255)
G43Z150.H12
/M8
Z20.
/S700M3
#103=0
G98G81Z-1.5R3.F100
WHILE[#103LE[#504/2-10.0]]DO3
#103=#103+8.
Y#103
END3
G80
IF[[[#501-#504-#505]/2]LT6.0]GOTO11
G98G81X0Y[[#501-#505]/2-3.0]Z-2.F100
N11G80
#103=0
G0G90Z50.


IF[#501GT80.0]GOTO111
G90G0X0Y0.
G16
G98G81X[#503/2.0+4.5]Y[90.0+[180/#502]]Z-2.R2.F100
G91Y[360.0/#502]K[#502-1.0]
G80
G15
N111
G0G90Z100.M9
G91G28Z0
M1


N2(DRILL 8.6)
T3
M6
G90G0X0Y0.T9
G43Z150.H13
/M8
Z20.
/S700M3
#104=0
G98G81Z-12.0R3.F100
WHILE[#104LE[#504/2-10.0]]DO3
#104=#104+8.
Y#104
END3
IF[[[#501-#504-#505]/2]LT6.0]GOTO22
G98G81X0Y[[#501-#505]/2-3.0]Z-12.0F60
N22G80
#104=0


IF[#501GT80.0]GOTO23
G90G0X0Y0.
G16
G98G81X[#503/2.0+4.5]Y[90.0+[180/#502]]Z-11.5R5.F100
G91Y[360.0/#502]K[#502-1.0]
N23G80
G15
G0Z100.M9
G91G28Z0
M1


N3(DRILL 11)
IF[#501LE80.0]GOTO4
T9
M6
G90G0X0Y0.T1
G43Z150.H19
/M8
Z20.
/S800M3
G16
G98G81X[#503/2.0+5.7]Y[90.0+[180/#502]]Z-10.R3.F60
G91Y[360.0/#502]K[#502-1.0]
G80
G15
G0Z100.M9
G91G28Z0
M1


N4(MAGIC DRILL)
T1
M6
T8
G90G0X0Y0
G43Z150.H11/M80
/M8
Z50.
S900M3
G16
G98G81X[#501/2.0]Y90.Z-12.0R5.F40
G91Y[360.0/#502]K[#502-1.0]
G80
G15
G0G90Z100.M9
G91G28Z0
M1


N5(EMILL 20)
IF[#505EQ#506]GOTO6
T8
M6
G90G0X0.Y[#501/2.0]T4
G43Z150.H18/M8
G69
Z50.
/S600M3
M98P0005


G90G17G68X0.Y0.R[360.0/#502]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[2*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[3*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[4*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[5*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[6*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[7*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


G90G17G68X0.Y0.R[8*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


IF[#502EQ9]GOTO1010
G90G17G68X0.Y0.R[9*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0005


N1010G69
G91G28Z0.M9
M1


N6(EM 9.8)
T4
M6
G90G0X0Y[[#501-#505]/2+6.0]T5
G43Z150.H14
/M8
Z50.
S400M3
G1Z3.F1000
#101=0
WHILE[#101LT6.0]DO1
#101=#101+1.
G1Z-1.0F80
G1G90Y0.F80
G1G91Z-1.
G1G91Y[[#501-#505]/2+2.0]
END1
G0G90Z100.M9
#101=0
G91G28Z0
M1


N7(EM 10)
T5
M6
G90G0X0Y[[#501-#505]/2+6.0]T6
G43Z150.H15
/M8
Z50.
S500M3
G1Z-11.F1000
G1Y0.3F40
G1Y0.F10
G1Y0.2
G1Z10.F1000
G80M5
G0Z100.M9
G91G28Z0
M1


N8([MEDIA=youtube]AVI-CENTER[/MEDIA]-POINT 22)
T6
M6
G90G0X0Y[#501/2]T7
G43Z150.H16
/M8
Z50.
S2000M3
Z3.
G1Z-5.1F200
G1Y[#504/2+1]
G1Z-4.1
G1Y0.
G0G90Z20.
IF[#505GT21.0]GOTO88
G90G0X0Y0
G16
G98G81X[#501/2.0]Y90.Z-[#505/2+0.1]R-4.F200
G91Y[360.0/#502]K[#502-1.0]
G80
G15
N88


G90G0X0.Y[#501/2.0]
G69
/S2000M3
M98P0006


G90G17G68X0.Y0.R[360.0/#502]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[2*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[3*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[4*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[5*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[6*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[7*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


G90G17G68X0.Y0.R[8*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


IF[#502EQ9]GOTO888
G90G17G68X0.Y0.R[9*[360.0/#502]]
G0X0.Y[#501/2.0]
M98P0006


N888G69
G0Z100.M9
G91G28Z0
M1


N9(EM 6)
T7
M6
G90G0X0Y[#503/2+3.15]T2
G43Z150.H17
/M8
Z50.
Z5.
S1400M3
G0G90Z-8.
G1G90Z-10.F500
G2J-[#503/2+3.0]F70
G80M5
G0G90Z100.M9
G91G28Z0
M1


N10([MEDIA=youtube]AVI-CENTER[/MEDIA] 3*10)
T2
M6
G90G0X0Y[#503/2+3.0]T1
G43Z150.H12
/M8
Z50.
Z5.
S3000M3
G1Z-3.8F500
G2J-[#503/2+3.0]F500
G80
G0G90Z100.M9
G91G28Z0M5
G28Y0
T1
M6
M82
M30
(@@@@@@@@@@@@@@@@@@@@@@@@@)
%
O0005(EM20)
/600M3
G90G0Z-8.
G1Z-11.F70
G42G91G1X0Y[#505/2]D18
G2J-[#505/2]
G0X0Y-[#505/2]G40
G0Z20.
M99


O0006(CENTER-POINT-22)
/S1000M3
G90G0Z-8.
G1Z-10.F100
G42G91G1X0Y[#505/2+0.1]D18
G2J-[#505/2+0.1]
G0X0Y-[#505/2+0.1]G40
G0Z20.
M99
%
 
Ðề: Custom macro for cnc machine (gcode)

[ANH]BF1C_50DC1D8F[/ANH]

Hình ảnh chạy Macro đơn giản trên V6
 
P

picachiu

Ðề: Custom macro for cnc machine (gcode)

Cảm ơn anh ngocm02 ạ!

Nhưng em vẫn còn 1 số thắc mắc.
Em đã mô phỏng được một số macro cơ bản. Nhưng cái đoạn chương trình của em gửi thì vẫn chưa mô phỏng được ạ.
...
1. Nó không hiểu lệnh G16, thay vì khoan thành 1 vòng tròn thì nó lại khoan theo đường thẳng.

2. Mấy cái lệnh IF[...] GOTO... mà nó cũng không hiểu.
Đơn cử là đoạn:
N5(EMILL 20)
IF[#505EQ#506]GOTO6

Câu lệnh này nhằm mục đích, nếu khoan Magic (#506) đã đạt kích thước lỗ (#505 = #506) thì con endmill sẽ không phải làm việc. Ngược lại, nếu Magic khoan chưa đạt kích thước thì endmill 20 sẽ nội suy ra đạt kích thước lỗ (#506).
Em khai báo #505 =20. và #506 cũng = 20. Vậy mà con Endmill vẫn chạy vào ngoáy đùng đùng ^^

Cay thật!!! Bác nào cao tay xin giúp em ạ, em cảm ơn.
(picachiu)






À, còn cái câu Hình dạng giống nhau nhưng kích thước có thay đổi là do câu cú em lủng củng ^^ em xin lỗi ạ.

Có nghĩa là em làm nhiều chi tiết có hình dáng same same nhau, nhưng cục thì to, cục thì nhỏ; cục thì 9 lỗ, cục thì 10 lỗ (biến #502); cục thì lỗ đường kính 20, cục thì 50 (biến #506)... Tổng cộng em làm gần 200 cục. Nên em sử dụng chương trình này. Chỉ cần khai báo mấy cái biến # là cho ra 1 cục khác hẳn ^^.

Chương trình này em làm cách đây nửa năm ạ. Do không biết phần mềm mô phỏng nên phải ra ngoài máy chạy không phôi, cực ^^
 
Ðề: Custom macro for cnc machine (gcode)

Picachu thân
Thử coi cái này xem sao nhé
Mới viết xong nhưng chưa đem ra máy chạy thử đâu nhé. Va dao dóa
Ông siêng thật. Đem ra máy chạy thử luôn ah.
[ANH]D016_50DEB5AD[/ANH]
Chúc thành công

N01#200=100.
N02#201=0
N03#202=8.
N04#204=#200*SIN[360-#201*45]
N05#205=#200*COS[360-#201*45]
N06G98G81R5.Q5.
N07X#204Y#205
N08#201=#201+1.
N08IF[#201LT#202]GOTO4
 
Last edited:
Top