FANUC Custom Macro B Rehberi: Değişkenler, IF/WHILE, G65 ve G66 Makro Çağırma

27 Ağustos 2026

Mentor CNC Editör Ekibi

Custom Macro nedir? Alt programdan farkı ne?

Alt program (M98) aynı hareketleri tekrar eder. Custom Macro ise programa hesap yaptırmayı, karar verdirmeyi ve döngü kurdurmayı sağlar. Aradaki fark şudur: alt program hep aynı parçayı yapar; makro, verdiğiniz ölçüye göre farklı parça yapar.

Somut örnek: 12 delikli bir delik dairesi. Alt programla 12 ayrı koordinat yazarsınız. Makroyla çapı ve delik sayısını verirsiniz, koordinatları kontrol hesaplar. Çap değiştiğinde tek bir sayıyı değiştirirsiniz.

Ne zaman makro yazmalı?Aynı geometri farklı ölçülerde tekrarlanıyorsa · Bir çevrim tezgâhta yoksa ve kendiniz yazmak istiyorsanız · Prob ölçümü sonucuna göre karar verilecekse · Takım ömrü, parça sayacı gibi değerler programdan okunacaksa.

Değişkenler: FANUC’ta dört farklı tür

FANUC’ta değişken # işaretiyle yazılır. Hangi numarayı kullandığınız, değişkenin nerede geçerli olduğunu ve tezgâh kapanınca silinip silinmediğini belirler. Sahada en çok yapılan hata bu ayrımı bilmemektir.

NumaraTürNerede geçerli?Kapanınca ne olur?
#0Boş (null)Her yerdeHer zaman boştur, yazılamaz, sadece okunur
#1 – #33Lokal değişkenSadece o makronun içindeSilinir. Başka bir makro aynı #1’i kullansa bile sizinkini bozamaz.
#100 – #199Ortak değişken (uçucu)Ana program, alt programlar ve tüm makrolarSilinir — güç kesilince sıfırlanır
#500 – #999Ortak değişken (kalıcı)Ana program, alt programlar ve tüm makrolarKorunur — tezgâh kapanıp açılsa da değer durur
#1000 ve üzeriSistem değişkeniHer yerdeKontrolün kendi verisi: ofsetler, konum, alarm, saat, parametreler
En kritik ayrımTakım ömrü sayacı, parça adedi gibi vardiya sonrası da durması gereken değerleri #500–#999 aralığına yazın. #100–#199‘a yazarsanız tezgâh kapanınca sayı sıfırlanır ve bunu genellikle ertesi sabah fark edersiniz.

Kaynak kılavuzun ek notu: parametre 8135 bit 6 (NCV) ayarına göre #150–#199 ve #550–#999 aralıkları kullanılabilir hale gelir. Ayrıca #500–#999 arasındaki değişkenler parametreyle yazma korumalı (salt okunur) yapılabilir.

Sık kullanılan sistem değişkenleri

Sistem değişkenleri, makronun kontrolün kendi verisine eriştiği değişkenlerdir. Bunlarla makro alarm verebilir, süre ölçebilir, o anki G kodunu ve eksen konumunu okuyabilir, iş parçası ofsetini değiştirebilir. Aşağıdaki numaralar FANUC 0i-F kılavuzuna (B-64604EN) ve işleme merkezine (M serisi) göredir. Eski serilerde ve tornada bazı numaralar farklıdır; kendi tezgâhınızın kılavuzundan kontrol edin.

NumaraOkuma / yazmaNe işe yarar?
#3000YazmaMakro alarmı. #3000=1 (MESAJ) yazılınca program alarmla durur. 6008#1 (MCA) = 0 iken alarm ekranında MC3001 MESAJ görünür; alarm numarası 3000 + yazılan değerdir.
#3001Okuma / yazmaSaat 1: milisaniye cinsinden. Tezgâh açıldığında 0’dan başlar ve sürekli sayar.
#3002Okuma / yazmaSaat 2: saat cinsinden. Yalnız çevrim başlatma lambası (STL) yanarken sayar; tezgâh kapanınca değeri korunur.
#3006YazmaMesajla durdurma. #3006=1 (MESAJ) yazılınca program bir önceki satıra kadar çalışır, durur ve mesaj operatör mesajı ekranında görünür.
#3901 / #3902Okuma / yazmaİşlenen toplam parça sayısı / gereken parça sayısı.
#4001 – #4030OkumaKontrolün en son okuduğu satırdaki G kodu modları. Numaranın son iki hanesi G kodu grubudur: #4003 grup 03’tür ve 90 (G90) ya da 91 (G91) verir.
#4201 – #4230OkumaO an çalışan satırdaki G kodu modları.
#4107, #4109, #4111, #4119, #4120OkumaEn son okunan satırdaki D, F, H, S ve T değerleri.
#5001 – #5020OkumaÖnceki satırın bitiş noktası (iş koordinatında, telafi hariç). Hareket sırasında da okunabilir.
#5021 – #5040OkumaMakine koordinatında anlık konum.
#5041 – #5060Okumaİş koordinatında anlık konum.
#5061 – #5080OkumaG31 atlama sinyalinin geldiği konum. Prob ölçüm makrolarının temelidir.
#5081 – #5100OkumaÇalışan satırdaki takım boy telafisi değeri.
#5201 – #5220Okuma / yazmaHarici (EXT) iş ofseti.
#5221 – #5240Okuma / yazmaG54 ofseti: #5221 1. eksen, #5222 2. eksen, #5223 3. eksen. G55 #5241’den başlar; her sistem 20 numara ileridedir.
#7001 ve sonrasıOkuma / yazmaG54.1 P1 ve sonraki ek iş koordinatları (opsiyon).
#2001 ve sonrasıOkuma / yazmaTakım ofsetleri. Numara düzeni ofset hafıza tipine ve ofset sayısına göre değişir.

Eksen numarası tezgâhtaki eksen sırasıdır; çoğu dik işleme merkezinde 1 = X, 2 = Y, 3 = Z’dir.

Örnek: modu kaydedip geri yüklemek ve parça sayısını kontrol etmek

#1=#4003 ; 90 veya 91: mevcut modu sakla G91 G01 Z-1. F100 ; makro içinde artışlı çalış … G#1 ; eski modu (G90 veya G91) geri yükle#5223=#5223+0.05 ; G54 Z ofsetini 0.05 mm artırIF[#3901 LT #3902] GOTO 100 #3006=1 (PARCA SAYISI TAMAM) ; mesajla dur N100 M99
Dikkat#5021 ve #5041 eksen hareket ederken doğru okunmayabilir; kılavuz hareket sırasında okunan değeri garanti etmez. Okumadan önce hareketin bittiğinden emin olun. #4001 serisi kontrolün ileriden okuduğu satırı gösterir; o an çalışan satırın modu gerekiyorsa #4201 serisini kullanın. Ofset değişkenlerine yazmak gerçek iş sıfırını ve takım ofsetini değiştirir; yeni makroyu önce boşta ve tek satır modunda deneyin.

Değişkeni adres yerine kullanmak

Bir adresin değerini değişkenle verebilirsiniz:

#33=1.5 F#33 ; F1.5 ile aynı şey#18=20.0 Z-#18 ; Z-20.0 ile aynı şey#130=3.0 G#130 ; G3 ile aynı şey

Kurallar — kaynaktan birebir

  • O ve N adresleri değişkenle yazılamaz. O#27 veya N#1 geçersizdir.
  • Opsiyonel blok atlama /n içindeki n değişken olamaz.
  • Değişken numarası doğrudan değişkenle verilemez. ##30 yanlıştır; doğrusu #[#30]‘dur.
  • Adresin izin verdiği maksimum değeri aşan bir değer yazılamaz. #140=10000 iken G#140 geçersizdir.
  • Değişken adres verisi olarak kullanıldığında otomatik yuvarlanır. IS-B (1/1000 mm) bir tezgâhta #1=12.3456 iken G00 X#1 → G00 X12.346 olur.
  • Ondalık nokta atlanabilir: #1=123 yazarsanız değer 123.000 olur.
  • İfade kullanabilirsiniz: X[#24+#18*COS[#1]] veya Z-[#18+#26].

Boş (null) değişken tuzağı

Bu, makro yazarken en çok baş ağrıtan konudur ve çoğu Türkçe kaynakta hiç anlatılmaz. Değeri tanımlanmamış bir değişkene boş (null) denir. #0 ve #3100 her zaman boştur.

1. Boş değişken kullanılırsa adres komple yok sayılır

Yazılan#1 boş ise çalışan komut#1 = 0 ise çalışan komut
G90 X100 Y#1G90 X100 — Y hiç yokG90 X100 Y0

Yani boş bir değişken sıfır demek değildir. Y ekseni hareket etmez, hata da vermez — sessizce atlanır. Bir makroya argüman geçirmeyi unuttuğunuzda tam olarak bu olur.

2. Atama ve işlemde davranış

İfade#1 boş iken sonuç#1 = 0 iken sonuç
#2 = #1 (lokal)boş0
#2 = #1 * 500
#2 = #1 + #100
#2001 = #1 (sistem değişkeni)00

Dikkat: boş bir değer doğrudan atanırsa boş kalır, ama içinde işlem varsa 0 olur. Sistem değişkenine atandığında ise her durumda 0 olur.

3. Karşılaştırmada boş değişken

Kaynak kılavuzun ifadesi: boş değer, sıfırdan yalnızca EQ ve NE için farklıdır. GE, GT, LE ve LT için boş değer sıfıra eşit sayılır.

; #1 boş iken: #1 EQ #0 → doğru #1 NE 0 → doğru (dikkat! boş, 0’a eşit değil sayılıyor) #1 GE #0 → doğru #1 GT 0 → yanlış #1 LE #0 → doğru #1 LT 0 → yanlış
Pratik sonuçBir argümanın verilip verilmediğini kontrol etmek için IF [#1 EQ #0] GOTO 99 yazın — IF [#1 EQ 0] değil. İkincisi, kullanıcı gerçekten 0 girdiğinde de tetiklenir.

Hesap işlemleri ve fonksiyonlar

İşlemYazımAçıklama
Toplama / çıkarma#i = #j + #k · #i = #j - #k 
Çarpma / bölme#i = #j * #k · #i = #j / #kSıfıra bölme PS0112 alarmı verir
Sinüs / kosinüs / tanjantSIN[] · COS[] · TAN[]Açı derece cinsindendir, radyan değil
Ark tanjantATAN[]/[]İki değerin oranından açı verir
KarekökSQRT[] 
Mutlak değerABS[] 
YuvarlamaROUND[]En yakın tam sayıya
Aşağı / yukarı yuvarlamaFIX[] · FUP[]Ondalık kısmı atar / bir üst tam sayıya çıkarır
Logaritma / üstelLN[] · EXP[] 
Parametre okuma#i = PRM[#j]Makine parametresini programdan okur
Trigonometride en sık hataFANUC makroda açılar derece cinsindendir. SIN[30] yazdığınızda sonuç 0.5’tir. Radyan dönüşümü yapmayın.

Karşılaştırma ve mantık operatörleri

FANUC makroda >, <, = işaretleri kullanılmaz. Yerlerine iki harfli kısaltmalar vardır:

OperatörAnlamıMatematik karşılığı
EQEşittir=
NEEşit değildir≠
GTBüyüktür>
GEBüyük veya eşittir≥
LTKüçüktür<
LEKüçük veya eşittir≤

Birden fazla koşulu AND ve OR ile birleştirebilirsiniz:

IF[[#1 EQ #2] AND [#3 EQ #4]] THEN#5=0 ; IF[[#1 EQ #2] OR [#3 EQ #4]] THEN#5=0 ;

Dallanma ve döngü: GOTO, IF, WHILE

Koşulsuz atlama — GOTO

GOTO 1 ; ; N1 satırına atla

Koşullu dallanma — IF … GOTO

IF [#1 GT 10] GOTO 2 ; ; #1 > 10 ise N2 satırına atla

Koşullu atama — IF … THEN

Atlama yerine doğrudan bir değer atamak isterseniz:

IF [#1 EQ #2] THEN#3=0 ; ; #1 ile #2 eşitse #3’e 0 yaz

Döngü — WHILE … DO … END

WHILE [koşul] DO m ; ; m = 1, 2 veya 3 ; işlemler END m ;

Koşul doğru olduğu sürece DO ile END arası tekrarı sürer. m yalnızca 1, 2 veya 3 olabilir.

İç içe döngü kuralı — çok önemli

İç içe döngülerde aynı numara tekrar kullanılabilir, ama döngüler birbirinin içine tam yerleşmelidir. Çakışan (overlapped) DO aralıkları PS0124 alarmı verir.

; DOGRU — tam iç içe WHILE […] DO 2 ; WHILE […] DO 1 ; END 1 ; END 2 ;; DOGRU — ardışık, aynı numara tekrar kullanılabilir WHILE […] DO 1 ; END 1 ; WHILE […] DO 1 ; END 1 ;; YANLIS — çakışan aralık, PS0124 alarmı WHILE […] DO 1 ; WHILE […] DO 2 ; END 1 ; END 2 ;

Makro çağırma: G65, G66 ve G67

G65 — basit çağırma

Makroyu bir kez çağırır ve argümanları aktarır.

G65 P9100 X100.0 Y50.0 R30.0 Z-50.0 F500 ; ; P : çağrılacak program numarası ; X, Y, R, Z, F : makroya geçirilen argümanlar
KuralG65 her argümandan önce yazılmalıdır. Satırın ortasına yazılamaz.

Argüman tablosu (Argüman Belirtme I)

Hangi harfin hangi değişkene gittiğini ezberlemek yerine bu tabloyu kullanın:

AdresDeğişkenAdresDeğişkenAdresDeğişken
A#1I#4T#20
B#2J#5U#21
C#3K#6V#22
D#7M#13W#23
E#8Q#17X#24
F#9R#18Y#25
H#11S#19Z#26

Yani yukarıdaki örnekte makronun içinde #24 = 100.0, #25 = 50.0, #18 = 30.0, #26 = −50.0, #9 = 500 olur.

Argüman Belirtme II

A, B ve C birer kez; I, J ve K ise en fazla onar kez kullanılır. Çok sayıda nokta geçirmek gerektiğinde (örneğin serbest bir kontur) bu yöntem kullanılır. İki yöntem aynı blokta karıştırılırsa sonra yazılanın türü geçerli olur.

G66 / G67 — modal çağırma

G66 verildikten sonra makro, her eksen hareketi bloğundan sonra çağrılır. G67 ile iptal edilene kadar bu sürer.

G66 P9100 L2 A1.0 B2.0 ; G00 X10. Y10. ; ; hareket bitince makro çalışır G00 X20. Y20. ; ; yine çalışır G67 ; ; modal çağırmayı iptal et ; P : çağrılacak program numarası ; L : tekrar sayısı

Bu, delik dizisi işlerinde çok kullanışlıdır: bir kez G66 ile delme makrosunu tanımlarsınız, sonra sadece koordinatları yazarsınız.

İç içe geçme sınırları

  • Makro çağrıları (G65 ve G66/G66.1 dahil) en fazla 5 seviye iç içe geçebilir.
  • Alt program çağrıları makro çağrıları dahil en fazla 15 seviye.
  • Her makro çağrısında lokal değişken seviyesi bir artar — yani içteki makronun #1‘i dıştakinden farklıdır.

Sahada en sık yapılan hatalar

#100 serisine kalıcı veri yazmak

Parça sayacı veya takım ömrü #100–#199‘a yazılırsa tezgâh kapanınca sıfırlanır. Kalıcı olması gereken her şey #500–#999 aralığına yazılmalıdır.

Boş değişkeni sıfır sanmak

Argüman verilmediğinde değişken boş kalır, sıfır olmaz. Y#1 yazılmış bir satırda #1 boşsa Y ekseni hiç hareket etmez ve alarm da gelmez.

##30 yazmak

Değişken numarasını değişkenle vermek için #[#30] yazılır. ##30 geçersizdir.

Karşılaştırmada tek eşittir kullanmak

IF [#1 = 10] yazılmaz. Doğrusu IF [#1 EQ 10]‘dur.

Çakışan WHILE döngüleri

DO ve END aralıkları iç içe tam yerleşmelidir. Yarım çakışan aralık PS0124 alarmı verir.

Bir blokta hem NC hem makro komutu yazmak

Aynı satırda hareket komutu ve makro ifadesi bulunursa PS0127 alarmı gelir. Makro ifadesini ayrı satıra alın.

Trigonometride radyan kullanmak

FANUC makroda açılar derecedir. SIN[30] = 0.5’tir.

Makro çağrısını 5 seviyeden derine indirmek

Makro iç içe geçme sınırı 5’tir. Aşıldığında PS0122 alarmı gelir.

G65’i satırın ortasına yazmak

G65 tüm argümanlardan önce gelmelidir.

Sık sorulan sorular

Custom Macro her FANUC tezgâhında var mı?

Hayır, opsiyoneldir. Custom Macro A ve Custom Macro B olmak üzere iki seviyesi vardır; bugün yaygın olanı Macro B’dir. Tezgâhınızda olup olmadığını anlamanın en hızlı yolu MDI’dan #100=1 yazıp çalıştırmaktır; makro yoksa alarm gelir.

#100 ile #500 arasındaki fark pratikte ne?

#100–#199 geçici hesap içindir; tezgâh kapanınca silinir. #500–#999 kalıcıdır; güç kesilse de değer durur. Vardiyalar arasında taşınması gereken sayıları (parça adedi, takım ömrü) her zaman #500 serisine yazın.

Programdan takım ofsetini değiştirebilir miyim?

Evet. Takım ofsetleri sistem değişkenleri üzerinden okunup yazılabilir. Numaralandırma kontrol serisine ve ofset sayısına göre değiştiği için tezgâhınızın kılavuzundaki sistem değişken tablosunu kontrol edin. Prob ölçümü sonucunu otomatik ofsete yazdırma işlemi tam olarak bu şekilde yapılır.

Alt program mı kullanmalıyım, makro mu?

Aynı hareketler birebir tekrar ediyorsa alt program (M98) yeterlidir ve daha basittir. Ölçü değiştikçe koordinatların hesaplanması gerekiyorsa veya bir karar verilecekse makro gerekir.

WHILE döngüsünde neden sadece 1, 2, 3 kullanabiliyorum?

FANUC’ta DO numarası 1–3 ile sınırlıdır; yani en fazla üç seviye iç içe döngü kurabilirsiniz. Ardışık (iç içe olmayan) döngülerde aynı numarayı tekrar kullanabilirsiniz.

Makro programını nasıl koruma altına alırım?

Makro programları genellikle 9000 serisi program numaralarına (O9000–O9999) kaydedilir; bu programlar parametreyle görüntülenmeye ve düzenlenmeye karşı korunabilir. Ayrıca #500–#999 ortak değişkenleri parametreyle salt okunur yapılabilir.

Siemens’teki R parametrelerinin karşılığı nedir?

Kabaca FANUC’un #100 ve #500 serisi ortak değişkenlerine karşılık gelir. Ancak Siemens’te ayrıca DEF ile isimli değişken tanımlanabilir; FANUC’ta değişkenlerin adı olmaz, sadece numarası vardır.

Makro çalışırken ekranda ne görürüm?

Makro ifadeleri hareket üretmediği için blok göstergesinde ilerleme görünmeyebilir. Değişken değerlerini izlemek için kontrolün makro değişken ekranını kullanın; devreye alma sırasında en pratik teşhis yöntemi budur.

Güvenlik uyarısıMakrolar hareketi programdan hesapladığı için hatalı bir değişken, takımı beklenmedik bir yere götürebilir. Yeni yazılan her makro önce grafik/dry run ile, sonra parça bağlanmadan, tek blok modunda ve düşük ilerleme override’ı ile denenmelidir. Özellikle sonsuz döngü riski taşıyan WHILE yapıları ve sistem değişkenine yazan makrolar ilk çalıştırmada gözetim altında tutulmalıdır.
Mentor CNC notu: Bu sayfadaki değişken aralıkları, sözdizimi ve sınır değerler FANUC’un resmî Series 0i-MODEL F Operator’s Manual (B-64604EN/01) dokümanının 16. bölümüne dayanır. Custom Macro opsiyonel bir fonksiyondur; tezgâhınızda bulunup bulunmadığı, kullanılabilir değişken aralıkları ve sistem değişken numaraları kontrol serisine, satın alınan opsiyonlara ve parametre ayarlarına göre değişir. Makine üreticisinin kılavuzu her zaman önceliklidir. Bu sayfa eğitim amaçlıdır ve resmî kılavuzun yerini tutmaz.

Kaynaklar

  • FANUC — Series 0i-MODEL F, Common to Lathe System / Machining Center System, OPERATOR’S MANUAL, doküman no B-64604EN/01: Bölüm 16.1 Değişkenler, 16.2 Sistem değişkenleri, 16.5 Aritmetik ve mantık işlemleri, 16.7 Parametre okuma, 16.8 Makro ve NC deyimleri, 16.9 Dallanma ve tekrar (IF, GOTO, WHILE), 16.10 Makro çağırma (G65, G66, G67), 16.13 Makro programlarının kaydedilmesi, 16.16 Kısıtlamalar
  • FANUC — Series 0i-MODEL F MAINTENANCE MANUAL, B-64605EN/01, Ek A (makro ile ilgili PS alarmları için)
Mentor CNC logosu

MENTOR CNC
Sahadan gelen cnc bilgisi

Mentor CNC; CNC torna, CNC freze, kontrol üniteleri, kesici takımlar ve teknik hesaplamalar konusunda üretim sahasında edinilen tecrübeyi anlaşılır ve uygulanabilir teknik içeriklere dönüştürür.

Amacımız; operatörlerin, öğrencilerin, mühendislerin ve atölye sahiplerinin doğru bilgiye daha hızlı ulaşmasını ve üretimde daha güvenli, verimli kararlar almasını sağlamaktır.