CHƯƠNG TRÌNH CON (Phần 2) – Chương 38 – Sổ tay lập trình CNC

CÁC HÀM CHƯƠNG TRÌNH CON

Chương trình con phải được hệ điều khiển nhận biết theo kiểu chương trình đặc thù, không phải là chương trình chính. Đặc tính này được thực hiện với hai hàm M, thường chỉ áp dụng cho chương trình con:
M98: Hàm gọi chuông trình con
M99: Hàm kết thúc chương trình con
Tiếp sau hàm M98 gọi chương trình con luôn là chỉ số chương trình con P–. Hàm M99 kết thúc chương trình con sẽ chấm dứt chương trình đó và chuyển sự xử lý cho chương trình gốc chứa chương trình con đó (chương trình chính hoặc chương trình con có mức cao hơn). Tuy M99 chủ yếu để kết thúc chương trình con, nhưng đôi khi cũng được sử dụng trong chương trình chính thay cho hàm M30. Trong trường hợp đó, chương trình sẽ “lặp lại” liên tục, cho đến khi nhấn phím Reset.

Hàm gọi chương trình con

Hàm M98 gọi chương trình con đã lưu trước đó từ chương trình khác. Nếu chỉ sử dụng một mình hàm này trong block, sẽ dẫn đến lỗi sai. M98 là hàm chưa hoàn chỉnh, đòi hỏi thèm hai tham số để có hiệu lực thực sự:
  • Địa chỉ P nhận biết chỉ số chương trinh con được chọn.
  • Địa chỉ L hoặc K xác định số lần lặp lại chương trình con (mặc định là K1 hoặc L1).
Ví dụ, block gọi chương trình con có hàm M98 và chỉ số chương trình con:
N167 M98 P3851

Trong block N167, chương trình con O3851 được gọi từ bộ nhớ CNC, lặp lại một lần – do L1 (K1) là mặc định, tùy theo bộ điều khiển. Chương trình con này phải được lưu trong bộ điều khiển, trước khi gọi từ chương trình khác.
Block M98, gọi chương trình con, còn có thể chứa các lệnh khác, chẳng hạn chuyển động chạy dao nhanh, tốc độ trục chính, tốc độ cắt, bù bán kính dao, v.v… Trên hầu hết các bộ điều khiển, nếu được gộp trong block gọi chương trình con, dữ liệu đó sẽ chuyển nội dung cho chương trình con. Block gọi chương trình con dưới đây còn có chuyến động dao theo hai trục:
N460 G00 X28.373 Y13.4193 M98 P3851
Block này trước hết sẽ thực thi chuyến động chạy dao nhanh, sau đó gọi chương trình con. Thứ tự các lệnh trong block không gây ra sự khác biệt đối với sự thực thi block:
N460 M98 P3851 G00 X28.373 Y13.4193
sẽ có cùng thứ tự gia công cũng như khi lệnh chuyển động chạy dao đứng trước lệnh gọi chương trình con, nhưng có vẻ không logic.

Hàm kết thúc chương trình con

Khi cả chương trình chính và chương trình con cùng hiện hữu trong bộ điều khiển, chúng phải có chỉ số chương trình khác nhau. Trong khi xử lý, chúng sẽ hoạt động như một chương trình liên tục, do đó phải có sự phân biệt rõ ràng đối với hàm kết thúc chương trình. Hàm kết thúc chương trình là M90, hoặc M02, nhưng ít thông dụng. Chương trình con phải được kết thúc bằng hàm khác. Fanuc sử dụng M99 cho mục đích này:
03851 (SUB-1) Khởi động chương trình con
M99 Kết thúc chương trình con
%
Khi kết thúc chương trình con, bộ điều khiển quay lại xử lý chương trình gốc – sẽ không kết thúc chương trình chính – chỉ kết thúc với hàm M30. Có thể gộp thêm vài tham số vào M99 kết thúc chương trình con, chẳng hạn mã bỏ qua block, số block trở về để thoát. Chú ý, ký hiệu mã dừng (dấu %) cũng được dùng cho chương trình con như chương trình chính. Sự kết thúc chương trình con là rất quan trọng và phải thực hiện chuẩn xác. Lệnh này gởi hai yêu cầu rất quan trọng cho bộ diều khiển:
  • Kết thúc chương trinh con.
  • Trở về block sau block gọi chương trình con.
Không được phép dùng hàm kết thúc chương trình M30 (hoặc M02) để kết thúc chương trình con – lệnh này sẽ xóa toàn bộ sự xử lý chương trình và xác lập lại bộ điều khiển. Hàm kết thúc chương trình này không cho phép thực thi block bất kỳ đứng sau block chứa lệnh đó.
Nói chung, hàm kết thúc chương trình con M99 đưa sự xử lý trở lại block ngay sau block chứa lệnh gọi chương trình con M98. Khái niệm này được minh họa trên Hình 2 (không ghi số block).
Hình 2: Lưu đồ xử lý chương trình vôi một chương trình con

Số block trở về

Trong hầu hết các chương trình, hàm M99 được lập trình là mục nhập độc lập và là lệnh cuối cùng trong chương trình con. Nói chung, thường không có các lệnh khác trong block này. Hàm M99 kết thúc chương trình con và chuyển sự thực thi sang block kế tiếp của chương trình chứa chương trình con đó. Ví dụ,
N67 M98 P3852 (SUBPROGRAM CALL)
N68 … (BLOCK TO RETURN TO FROM O3952)
N69 …
N70 …
thực thi block N67 bằng cách gọi chương trình con 03852. Sau khi xử lý chương trình con 03852, bộ điều khiển trở lại chương trình gốc và tiếp tục xử lý các lệnh từ block N68, là block trở về.
Ứng dụng đặc biệt
Đối với một số ứng dụng đặc biệt, có thể phải xác định chỉ số block khác để trở về, thay vì sử dụng mặc định block kế tiếp. Nếu nhà lập trình nhận thấy tùy chọn này là hữu ích cho một số công việc cụ thể và sử dụng kỹ thuật đó, địa chỉ P gộp vào block N99:
M99 P..
Trong định dạng này, địa chỉ P biểu thị chỉ số block trở về – từ chương trình con đã hoàn tất. Chỉ số block đó phải có trong chương trình gốc. Ví dụng, nếu chương trình chính có các block:
(CHƯƠNG TRÌNH CHÍNH)
N67 M98 P3852
N68 …
N69 …
N70 …
và chương trình con 03852 kết thúc như sau:
3852 (SUB)
M99 P70
%
Sự xử lý chương trình gọi sẽ tiếp tục từ block N70 (của chương trình chính trong ví dụ nêu trên), bỏ qua các block N68 và N69. Dạng ứng dụng này, nói chung, ít được dùng trong thực tế, do đòi hài kiểu công việc thích hợp, được nêu ở đây để hiểu sâu hơn các nguyên tấc sử dụng chương trình con.
Địa chỉ P có ý nghĩa khác khi được dùng với hàm M98 và M99
Nói chung, kỹ thuật lập trình này ít được sử dụng trong thực tiễn, nhưng nhà lập trình cần nắm vững. Các ứng dụng liên quan sẽ gồm các công cụ lập trình khác, chẳng hạn kết hợp với hàm bỏ quan block, sử dụng mã gạch nghiêng (/).

Số lân lặp lại chương trinh con

Tính năng gọi chương trình con rất quan trọng là địa chỉ L hoặc K, tùy theo kiểu loại bộ điều khiển. Địa chỉ này xác định số lần lặp lại chương trình con – số lần chương trình con được lặp lại trước khi quay trở lại xử lý chương trình gốc. Trong hầu hết các chương trình, chương trình con chỉ được gọi một lần, sau đó sẽ tiếp tục xử lý chương trình gốc.
Các chương trình đòi hỏi lặp lại chương trình con nhiều lẩn trước khi chuyển sang phần còn lại của chương trình gốc, là khá phổ biến. Để so sánh, sử dụng chương trình con O3852 một lẩn, có thể gọi từ chương trình gốc như sau: N167 M98 P3852 L1 (K1)
Đây là block chương trình đúng, nhưng hoàn toàn không cần lập trình L1/K1. Có thể bỏ qua địa chỉ đó một cách an toàn, mặc định của bộ điều khiển là xử lý chương trình con một lần.
Nếu không chuyên biệt L/K, giá trị mặc định luôn luôn là L1/K1
N167 M98 P3852 L1 (K1) đồng nhất với 
N167 M98 P3852

Chú ý – Trong các ví dụ kế tiếp, bạn hãy thay L bằng K, nếu bộ điểu khiển yêu cầu.
Số lần lặp lại đối với một số kiểu bộ điều khiển trong khoảng L0 – L9999, và phải lập trình khi địa chỉ L khác với L1. Một số nhà lập trình viết block đầy dù, kế cả khi chương trình con chỉ thực thi một lần, thay vì dựa vào điều kiện mặc định của bộ điều khiển. Lựa chọn này chỉ là sở thích cá nhân.
Biến thể địa chỉ số lần lập lại
Một số bộ điều khiến Fanuc không chấp nhận địa chỉ L/K là số lần lặp lại, chúng sử dụng định dạng khác. Trên các bộ điều khiển này, lệnh gọi chương trình con một lần là không đổi: 
N342 M98 P3852
Block này chỉ gọi chương trình con một lần, không sử dụng yêu cầu đặc biệt. Để lặp lại chương trình con, chẳng hạn 4 lần, thay vì lập trình.
N342 M98 P3852 L4 (K4)

sẽ viết số lần lặp lại cần thiết trực tiếp ngay sau địa chỉ P, trong một câu lệnh:
N342 M98 P43852 hoàn toàn tương tự với N342 M98 P00043842
Kết quả là đồng nhất, chương trình con sẽ lặp lại 4 lần. Bốn chữ số đầu được dùng cho số lần lặp lại, bốn chữ số cuối là chỉ số chương trình. Ví dụ

M98 P3850 hoàn toàn tương tự với M98 P00013850
Kết quả là chương trình con O3850 chỉ thực thi một lần. Để lặp lại chương trình O0050, ví dụ 39 lần, bạn cần viết:
M98 P380050 hoặc M98 P00380050
Đối với các bộ điều khiển 0T/16T/18T/20T/ 21T, số lần lặp tối đa được biểu thị bằng bốn chữ số đầu trong địa chỉ P là 9999.
M98 P99993852
Sẽ lặp lại sự thực thi chương trình O3852 là 9999 lần (một số bộ điều khiển cũ có số lần lặp lại tối đa là 999 lần).

LO/KO trong lệnh gọi chương trình con

Nói chung, bạn dễ dàng sử dụng L/K lớn hơn 1 để lặp lại chương trình con. Fanuc còn cung cấp số lần lặp lại zero, dạng KO/LO. Khi nào thì có thể lập trình LO/KO? Có ai đó muốn lặp lại chương trình con zero lẩn?
Có một số lý do. Bạn hãy xem Hình 3 sơ đồ 5 lỗ cần được khoan miệng, và tarô ren.
Đối với mũi khoan miệng (Ø0.750) sẽ dùng chu kỳ G82 với khoảng tạm dừng 0.2 giây ở chiều sâu Z-0.3275. Đối với khoan để tarô ren, sử dụng chu kỳ G81, và tarô ren, với mũi tarô 5/8-12, sẽ dùng chu kỳ G84. Mũi khoan miệng chuẩn bị lỗ để khoan và tạo ra sự lả miệng 0.015 inch. Mũi khoan đế tarô ren là loại 35/64 (00.5469), tạo lỗ cho mũi tarô 5/8-12:
O3801
(TOOL 1 – 90-DEG SPOT DRILL – ¾ DIA)
N1 G20
N2 G17 G40 G80 T01
N3 M06
N4 G90 G00 G54 X2.0 Y2.0 S900 M03 T02
N5 G43 H01 Z1.0 M08
N6 G99 G82 R0.1 Z-0.3275 P200 F3.0 (LL HOLE)
N7 X8.0 (LR HOLE)
N8 Y8.0 (UR HOLE)
N9 X2.0 (UL HOLE)
N10 X5.0 Y5.0 (MIDDLE HOLE)
N11 G80 Z1.0 M09
N12 G28 Z1.0 M05
N13 M01

(TOOL 2 – 35/64 DRILL)
N14 T02
N15 M06
N16 G90 G00 G54 X2.0 Y2.0 S840 M03 T03
N17 G43 H02 Z1.0 M08
N18 G99 G81 R0.1 Z-1.214 F11.0
N19 X8.0
N20 Y8.0
N21 X2.0
N22 X5.0 Y5.0
N23 G80 Z1.0 M09
N24 G28 Z1.0 M05
N25 M01
(TOOL 3 – 5/8-12 TAP)
N26 T03
N27 M06
N28 G90 G00 G54 X2.0 Y2.0 S500 M03 T01
N29 G43 H03 Z1.0 M08
N30 G99 G84 R0.4 Z-1.4 F41.0
N31 X8.0
N32 Y8.0
N33 X2.0
N34 X5.0 Y5.0
N35 G80 Z1.0 M09
N36 G28 Z1.0 M05
N37 G28 X5.0 Y5.0
N38 M30
%

Kiểu chương trình này sử dụng các toa độ XY lặp lại cho từng dụng cụ cắt (mũi khoan lả miệng, khoan lỗ, và tarô ren). Để chương trình hiệu quả hơn, tất cả các block lặp lại trong chương trình sẽ được tập hợp vào chương trình con. Dưới đây là sơ đồ các lỗ được tách ra từ chương trình dài, có thêm G80Z1.0M09, là phần kết thúc tiêu chuẩn của chu kỳ cố định bất kỳ:
X2.0 Y2.0
X8.0
Y8.0
X2.0
X5.0 Y5.0
G80 Z1.0 M09

Chỉ cần nỗ lực đôi chút để tái định dạng chương trình hiện hữu, tách chương trình chính và chương trình con, lưu sơ đổ gia công lặp lại. Các tọa độ XY riêng của cả năm lỗ trong sơ đồ gộp lại:
O3953 (SUBPROGRAM)
(FIVE HOLE PATTERN)
N1 X2.0 Y2.0
N2 X8.0
N3 Y8.0
N4 X2.0
N5 X5.0 Y5.0
N6 G80 Z1.0 M09
N7 M99
%

Chương trình con này được gọi từ chương trình, trong ví dụ sẽ là từ chương trình mới O3802. Địa chi LO sẽ ngăn chặn sự gia công hai lần cho lỗ thứ nhất:
O3902 (MAIN PROGRAM)
(TOOL 1 – 90-DEG SPOT DRILL – ¾ DIA)
N1 G20
N2 G17 G40 G80 T01
N3 M06
N4 G90 G00 G54 X2.0 Y2.0 S900 M03 T02
N5 G43 H01 Z1.0 M08
N6 G99 G82 R0.1 Z-0.3275 P200 F3.0 L0
N7 M98 P3953
N8 G28 Z1.0 M05
N9 M01
(TOOL 2 – 35/64 DRILL)
N10 M06
N11 T02
N12 G90 G00 G54 X2.0 Y2.0 S840 M03 T03
N13 G43 H02 Z1.0 M08
N14 G99 G81 R0.1 Z-1.214 F11.0 L0
N15 M98 P3953
N16 G28 Z1.0 M05
N17 M01
(TOOL 3 – 5/8-12 TAP)
N18 M06
N19 T03
N20 G90 G00 G54 X2.0 Y2.0 S500 M03 T01
N21 G43 H03 Z1.0 M08
N22 G99 G84 R0.4 Z-1.4 F41.0 L0
N23 M98 P3953
N24 G28 Z1.0 M05
N25 G28 X5.0 Y5.0
N26 M30
%

Trong chương trình này, chuyển động dao XY ban đầu cho từng dao sẽ định vị dụng cụ cắt ớ lỗ thứ nhất của sơ đồ gia công. Tất cả các chu kỳ cố định trong chương trình đều khởi động từ lỗ thứ nhất trong sơ đồ. Do định nghĩa lỗ thứ nhất được gộp trong chương trình con, và trong chương trình chính, bạn phải lập trình LO trong block gọi chu kỳ cố định, nếu không dùng LO, lỗ thứ nhất sẽ được gia công hai lần. Đây là ứng dụng điển hình của LO liên quan đến các chu kỳ cô định, nhưng không liên quan với chương trình con. Ngoài ra, block G82Z1.0M05 trả về zero máy tiêu chuẩn có thế gộp trong chương trình con O3853, do block này lặp lại sau từng lần gọi M98 trong chương trình chính 03802. Điều này tuy đúng nhưng không nên lạm đụng.
Trích chương 38, sổ tay lập trình CNC – Trần Thế San (còn tiếp)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *