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.

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#1G00 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 X100Y 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 teshis 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
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.