CNC Makrolarında Mantıksal Operatörler: IF, WHILE ve GOTO Rehberi
Fanuc, Siemens ve Mitsubishi CNC makrolarında mantıksal operatörleri güvenle kodlayın. Doğru parametre ve loop ayarıyla hurda riskini ve plansız duruşu önleyin.
Giriş
Bir makro programında unutulan tek bir sayaç artış değişkeni (örneğin #1 = #1 + 1) veya look-ahead tampon belleğindeki senkronizasyon hatası, ağır bir kesici takımı veya tareti doğrudan bir mengene çenesine (vise jaw), sabitlenmiş bir clamp'e veya dönen bir aynaya (chuck) tam ilerleme hızında (feedrate) bindirebilir. Makine, eksik bir sayaç nedeniyle sonsuz bir döngüye girdiğinde, kontrolör bir sonraki bloğa geçmeden sürekli aynı hareket bloğunu işler. Bu durum, sadece iş milini (spindle) durdurmakla kalmaz; işlenen parçayı anında hurdaya ayırır ve tüm döngü süresinin (cycle time) boşa gitmesine neden olur. Benzer şekilde, koşullu dallanma mantığının erken değerlendirilmesi, takımın kritik geri çekilme yollarını atlamasına yol açar. Bu tür mantık hataları; şiddetli sert çarpışmalara (hard collision), tahrip olmuş iş parçalarına, hasarlı iş millerine ve çok yüksek maliyetli duruş sürelerine (downtime) doğrudan zemin hazırlar. Hassas koşullu mantık ve döngü kontrollerinin uygulanması, bu tür felaket niteliğindeki program hatalarına karşı en güçlü savunmadır.
Teknik Özet
| Teknik Özellik | Detaylar |
|---|---|
| Komut Kodu | IF, WHILE, GOTO, DO, END, ELSE, ENDIF, GOTOF, GOTOB, GOTOC, REPEAT, UNTIL, FOR, LOOP, CASE |
| Modal Grubu / Modallik | Makro Kontrol İfadeleri (non-modal) |
| Markalar | Fanuc, Siemens, Mitsubishi |
| Kritik Parametreler | Fanuc: 6000#1 (MGO), 6000#4 (HGO), 6006#0 (MLG); Siemens: $MC_EXTERN_FUNCTION_MASK bit 3; Mitsubishi: #8101 (MACRO SINGLE), #6452 bit 6 |
| Temel Kısıtlama | Fanuc: Seviye başına maks 3 DO loop, 5 seviyeli parantez nesting sınırı; Siemens: 808D 11 nesting seviyesi ile sınırlandırılmıştır; Mitsubishi: Maks 10 IF ve 27 WHILE nesting seviyesi, Tape modu atlamaları yasaktır |
Hızlı Okuma
- Döngü Artışlarını Doğrulayın: Sonsuz çalışmayı ve sert çarpışmaları (hard collision) önlemek için
WHILEloop'larının içinde matematiksel sayaçları (örn.#1 = #1 + 1) her zaman yazın ve iki kez kontrol edin. - Look-Ahead Senkronizasyonunu Sağlayın: Dinamik değişkenlerin erken değerlendirilmesini önlemek için Siemens programlarındaki koşullu
IFdallanmalarından önce bir ön işlem durdurması (STOPRE) ekleyin. - Ondalıklı Sayı (Float) Eşitlik Kontrollerinden Kaçının: Kayan nokta (floating-point) hesaplama hatalarını önlemek için ondalıklı değişkenleri kesin eşitlik (
EQ) kontrolleri yerine mutlak toleranslar kullanarak (örn.[ABS[#10 - #20] LT 0.01]) değerlendirin. - Nesting Sınırlarına Uyun: Nesting'i kontrol ünitesi sınırları dahilinde tutun (Fanuc'ta maks 3 loop seviyesi, Siemens 808D'de 11 alt program ve Mitsubishi'de 10 IF / 27 DO seviyesi).
- Doğru Çalıştırma Modunu Seçin: Anında P295 alarmını ve program sonlandırılmasını önlemek için Mitsubishi sistemlerinde Tape/DNC modunda makro loop veya dallanma ifadelerini çalıştırmaktan kaçının.
- Yüksek Hızlı GOTO Önbelleğe Almayı Kullanın: Dallanma performansını optimize etmek ve loop yürütme gecikmesini azaltmak için Fanuc 6000#1 (MGO) ve 6000#4 (HGO) parametrelerini etkinleştirin.
Temel Kavramlar
Mantıksal makro operatörlerinin pratik programlama etkisi, katı ve doğrusal G-code yapısını dinamik, karar verebilen bir yazılıma tamamen dönüştürmektir. Programcılar, WHILE/DO loop'larını kullanarak, binlerce satırlık G-code yerine sadece birkaç blokta derin delik gagalama (pecking), ızgara delik delme veya spiral frezeleme gibi tekrarlayan fiziksel görevleri yürütecek son derece sıkıştırılmış matematiksel rutinler yazabilirler. Sabit geometrik hareketleri değişken yineleme (iteration) yapılarıyla değiştirerek, tek bir ana program farklı boyutlara, yollara ve desenlere uyum sağlayabilir.
Aynı zamanda, koşullu dallanma ifadeleri CNC makinesinin atölye zeminindeki fiziksel koşulları otonom olarak değerlendirmesine olanak tanır. Örneğin, bir makro programı, bir parçanın tolerans dahilinde olup olmadığını kontrol etmek için bir temas probunun skip sinyali konumunu okuyabilir veya bir takım aşınma ofseti (tool wear offset) sistem değişkenini sorgulayabilir. Kontrol ünitesi daha sonra bu verileri mantıksal olarak değerlendirebilir ve finiş pasolarını atlamak, telafi edici koordinat kaymalarını tetiklemek veya bir takım kırıldığında döngüyü (cycle) iptal etmek için kendi toolpath'ini anında değiştirebilir.
Bu mantıksal yapıların güvenli ve güvenilir bir şekilde çalışmasını sağlamak için, programcılar loop sınırlarının asla aşılmadığını ve koşullu parametrelerin doğru şekilde biçimlendirildiğini doğrulamalıdır. Yanlış sözdizimi (syntax), kontrol ünitesi sınırlarını aşan iç içe geçmiş (nested) parantezler veya eşleşmemiş loop işaretçileri, CNC'nin dahili ayrıştırıcısı (parser) tarafından yakalanacaktır. Bu durum meydana geldiğinde, kontrol ünitesi otomatik yürütmeyi durdurur ve bir alarm mesajı görüntüleyerek fiziksel hareket başlamadan önce makine takımını korur.
Komut Yapısı
Makro programları yürütme akışını üç ana yapıyla kontrol eder: koşulsuz atlamalar (unconditional jumps), koşullu dallanmalar (conditional branches) ve yinelemeli döngüler (iterative loops). Koşulsuz atlamalar, yorumlayıcıyı (interpreter) aradaki tüm kod satırlarını atlayarak doğrudan belirli bir blok numarasına atlamaya zorlamak için GOTO komutunu kullanır. Koşullu dallanmalar, parantez içindeki mantıksal bir karşılaştırmayı bir GOTO atlaması veya bir THEN ifadesi ile birleştirerek, yönlendirmeyi yalnızca değerlendirilen ilişki doğru olduğunda gerçekleştirir. Yinelemeli döngüler, koşul kriterleri karşılandığı sürece DO ve END işaretçileri arasındaki bir alt kod bloğunu tekrar tekrar çalıştırmak için WHILE ifadelerini kullanır.
Her kontrol ünitesi markası, bu komutlar için belirli sözdizimi (syntax) biçimlerini uygular. Fanuc ve Mitsubishi, değişkenlerin ve operatörlerin köşeli parantezler içine alındığı Custom Macro B standardını takip eder. Siemens, yerleşik IF-ELSE-ENDIF, FOR ve REPEAT-UNTIL loop'ları dahil olmak üzere modern bilgisayar programlama dillerine benzer yapılandırılmış, üst düzey komutlar kullanır. Kontrol seviyesinden bağımsız olarak, yorumlayıcının programı durmadan derlemesini sağlamak için uygun sözdizimi boşlukları, parantez eşleştirmeleri ve loop tanımlayıcıları gereklidir.
; Fanuc Custom Macro B Sözdizimi
GOTO 100;
IF [#100 GT 5.0] GOTO 200;
IF [#101 EQ 1.0] THEN #102 = 1.5;
WHILE [#1 LT 10.0] DO 1;
...
END 1;
; Siemens SINUMERIK Üst Düzey Sözdizimi
GOTO LABEL1
IF R10 > 5 GOTOF LABEL2
IF R10 == 1.0 ELSE ... ENDIF
WHILE R1 < 10.0
...
ENDWHILE
; Mitsubishi Mantık Sözdizimi
GOTO 100;
IF [#100 GT 5.0] GOTO 200;
IF [#101 EQ 1.0] THEN;
...
ELSE;
...
ENDIF;
WHILE [#1 LT 10.0] DO1;
...
END1;
| Parametre / Değişken | Marka | Açıklama |
|---|---|---|
6000#1 (MGO) | Fanuc | Yüksek hızlı GOTO dallanma davranışı. 0: standart; 1: yüksek hızlı önbellek araması (20 bloğa kadar). |
6000#4 (HGO) | Fanuc | Yerelleştirilmiş dallanma önbelleğe alma. 1: atlamadan önceki 30 bloğu veya önceki arama tarafından kaydedilen 10 bloğu önbelleğe alır. |
6006#0 (MLG) | Fanuc | Koşullu ifadelerin içinde boolean mantıksal işlemlerini (AND, OR, vb.) etkinleştirir. |
$MC_EXTERN_FUNCTION_MASK | Siemens | Bit 3, Siemens'e özgü kontrol yapılarının ISO dialect modunda yerel olarak işlenip işlenmeyeceğini belirler. |
#8101 (MACRO SINGLE) | Mitsubishi | Makro işleme modu. 0: arka plan toplu işleme; 1: eşzamanlı olarak blok blok yürütme. |
#6452 (bit 6) | Mitsubishi | Dallanma hedefi doğrulaması. 1: etiketleri kontrol eder; 0: eksik etiketler veriyolu (bus) hatasına neden olur. |
Marka Uygulamaları
Fanuc
Fanuc Custom Macro B, koşullu dallanma ve yinelemeyi yürütmek için mantıksal operatörleri ve kontrol ifadelerini kullanır. EQ, NE, GT, LT, GE ve LE gibi ilişkisel operatörler parantez içinde değerlendirilir. 6000#1 ve 6000#4 parametreleri, GOTO aramalarını optimize etmek için look-ahead önbelleğe alma davranışını belirler.
Aşağıda, Fanuc sistemlerindeki koşullu dallanma ve loop kontrolleri için tipik bir G-code yapısı verilmiştir:
IF [#100 GT 10.0] GOTO 500;
WHILE [#1 LT 5.0] DO 1;
...
END 1;
| Özellik Türü | Detaylar |
|---|---|
| Parametreler | GOTO hız önbelleği için 6000#1 (MGO), yerel önbelleğe alma için 6000#4 (HGO) ve boolean işlemleri için 6006#0 (MLG). |
| Alarmlar | Alarm 124 (Eksik END ifadesi), Alarm 126 (1-3 dışında geçersiz loop numarası) ve Alarm 128 (Eksik sıra numarası). |
| Versiyonlar | Custom Macro B tek satırlı THEN ifadelerine izin verir. Modern seriler iç içe geçmiş (nested) IF-THEN-ELSE-ENDIF ve CASE ifadelerini destekler. |
Uyarı: Loop kontrol değişkenini artırmayı unutmak, kontrol ünitesini sonsuz bir yürütme döngüsüne kilitleyecek, bu da komut dışı harekete ve iş bağlama aparatlarına (clamps) sert bir şekilde çarpılmasına (hard collision) neden olacaktır.
Siemens
Siemens Sinumerik kontrol üniteleri, PC tarzı yapılandırılmış dil öğelerini doğrudan standart G-code'un içine yerleştirir. GOTOF ve GOTOB gibi koşullu atlama ifadeleri program akışını yönlendirir. Senkronizasyon, look-ahead işlemini kontrol etmek için STOPRE komutu kullanılarak sağlanır.
Aşağıda, üst düzey Siemens G-code kontrol yapılarının bir temsili verilmiştir:
IF (R10 < 50) AND ($AA_IM[X] >= 17.5) GOTOF LABEL_A
WHILE $AA_IW[DRILL_AXIS] > -10
...
ENDWHILE
| Özellik Türü | Detaylar |
|---|---|
| Parametreler | ISO dialect işleme çeviri ayarları için $MC_EXTERN_FUNCTION_MASK bit 3. |
| Alarmlar | Alarm 14080 (Atlama hedef etiketi bulunamadı) ve Alarm 14000 (Dış atlama hedefi tampon bellek sınırlarının dışında). |
| Versiyonlar | 808D ailesi nesting'i 11 seviye ile sınırlandırırken, 840D sl ve SINUMERIK ONE 16 nesting seviyesine kadar destekler. |
Uyarı: Gerçek zamanlı makine durumlarını kontrol etmeden önce bir STOPRE ön işlem durdurması (preprocessing stop) yerleştirmemek, erken look-ahead değerlendirmelerine yol açabilir ve bu da takımların clamp'lere veya vise jaw'lara (mengene çeneleri) saplanmasıyla sonuçlanabilir.
Mitsubishi
Mitsubishi CNC'leri, iç içe geçmiş (nested) IF-THEN-ELSE yapıları ve WHILE loop'ları ile gelişmiş mantıksal dallanma sunar. #8101 parametresi, makroların arka planda toplu olarak mı yoksa blok blok mu çalışacağını yapılandırır. #6452 parametresi hedef etiketleri doğrular.
İşte Mitsubishi kontrol ünitelerinde koşullu dallanma ve mutlak değer karşılaştırmalarına bir örnek:
IF [ABS [#10 - #20] LT 0.01] THEN #120 = 10;
WHILE [#101 LT #2] DO1;
...
END1;
| Özellik Türü | Detaylar |
|---|---|
| Parametreler | #8101 (MACRO SINGLE) kontrol modu, #1754 (işleme hızı), #1259 (yürütme optimizasyonu) ve #6452 bit 6 (etiket kontrolü). |
| Alarmlar | P288 (10 seviyenin üzerinde aşırı IF nesting'i), P293 (27 seviyenin üzerinde loop nesting'i) ve P295 (Tape modunda yürütülen WHILE/GOTO). |
| Versiyonlar | M800VW/M80VW Serisi, VW olmayan modellerin aksine, ekran ünitesinin dahili diskinde saklanan makroların G65/G66 kullanılarak çağrılmasına izin verir. |
Uyarı: Tape modunda GOTO veya WHILE ifadelerini çalıştırmak anında bir P295 alarmını tetikleyecek ve talaş kaldırma (cut) ortasında makine işlemlerini durduracaktır.
Marka Karşılaştırmaları
| Özellik / Konu | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| Loop Nesting Sınırı | Makro seviyesi başına maks 3 DO-END loop'u (DO 1, DO 2, DO 3). | 808D makro nesting'ini 11 seviye ile sınırlandırır. 840D sl / ONE 16 seviyeye kadar izin verir (ASUB'lar ile 18 seviyeye genişletilebilir). | WHILE-DO loop'ları 27 seviye derinliğe kadar iç içe geçebilir. Loop tanımlayıcıları 1 ila 127 arasında değişir. |
| Yapılandırılmış Sözdizimi | Eski tarz (archaic) IF-GOTO ve IF-THEN. Daha yeni seriler, ayrılmış kelimeler aracılığıyla iç içe geçmiş (nested) IF-THEN-ELSE-ENDIF yapılarını destekler. | Yerleşik PC tarzı kontrol yapıları (IF-ELSE-ENDIF, WHILE, FOR, LOOP). | G-code içinde doğrudan, 10 seviye derinliğe kadar nested IF-THEN-ELSE-ENDIF yapılarını yerel olarak destekler. |
| Arama Önbelleğe Alma | Look-ahead parametreleri 6000#1 (MGO) ve 6000#4 (HGO), atlamalar için doğrusal program taramasını önler. | Alarmı bastırılmış atlama komutu GOTOC, etiket eksikse Alarm 14080'i bastırır. | #8101 (MACRO SINGLE) parametresi, arka plan mantık işlemeyi AÇAR/KAPATIR. |
| Özel Alarm Entegrasyonu | Mantığı #3000 değişkeni ile ilişkilendirir; görüntüleme formatı küresel olarak 6008#1 (MCA) parametresi tarafından belirlenir. | SETAL komutu kullanıcı alarmlarını (60000 ila 69999) tetikler. | Program hatası alarm kodları (P288, P289, P293, P294, P295), mantık sözdizimi/nesting hatalarında makineyi durdurur. |
| Koşul Değerlendirme Kuralları | Custom Macro B'de gerçekleştirilir; look-ahead tampon mleği (buffer), değişkenleri fiziksel hareketten önce yürütebilir. | Programcılar, dinamik koşul kontrollerinden önceki bir satırda STOPRE ön işlem durdurma (preprocessing stop) komutunu kullanmalıdır. | Programcılar, kayan nokta (floating-point) uyumsuzluğunu önlemek için ABS fonksiyonunu kullanarak ondalıklı sayıları güvenlik toleransları ile değerlendirmelidir. |
Teknik Analiz
Bu üç CNC platformunun analitik karşılaştırması; mantık yürütme, sözdizimi güvenliği ve işleme verimliliği konularında belirgin felsefeleri ortaya koymaktadır. Fanuc, son derece optimize edilmiş ancak yapısal olarak katı bir yaklaşım benimser. GOTO arama performansı belirli donanım look-ahead önbelleğe alma yöntemiyle korunurken, loop nesting'i tampon bellek aşırılıklarını önlemek amacıyla kesin olarak üç seviye ile sınırlandırılmıştır. Ancak bu katı yapı, derin sayısal değişken indekslemesine başvurmadan karmaşık ve okunabilir programlar yazmayı zorlaştırır.
Buna karşılık Siemens, okunabilir, PC tarzı üst düzey programlamaya odaklanır. Nested IF-ELSE-ENDIF, FOR ve REPEAT-UNTIL yapılarını yerel olarak entegre ederek karmaşık değişken eşlemelerine olan ihtiyacı ortadan kaldırır. Siemens also provides specialized jump commands like GOTOC that suppress destination alarms, allowing programs to skip missing optional blocks safely. Ana risk, programcının mantığı değerlendirmeden önce gerçek zamanlı değişkenleri senkronize etmek için açıkça STOPRE blokları yazmasını gerektiren yorumlayıcı (interpreter) look-ahead yürütmesidir.
Mitsubishi, ISO Custom Macro B sözdizimini modern üst düzey yürütme ile harmanlayarak bir orta yol temsil eder. Programcılara geniş bir alan sağlayarak, 27 loop seviyesine ve 10 IF seviyesine kadar muazzam bir nesting derinliğine izin verir. Mitsubishi ayrıca, operatörlerin kuru çalıştırma (dry run) için makroları blok blok veya üretim hızı için arka planda çalıştırmasına olanak tanıyan #8101 (MACRO SINGLE) parametresi aracılığıyla benzersiz bir tanı esnekliği sunar. Bununla birlikte, takım çarpmalarına neden olan kayan nokta (floating-point) eşitsizliklerini aşmak için ABS fonksiyonunu kullanarak dikkatli ondalık karşılaştırmaları yapılmasını gerektirir.
Program Örnekleri
Fanuc Program Örneği: Izgara Delik Delme Çevrimi
; Fanuc Custom Macro B Izgara Delik Delme
#100 = 0 (SÜTUN SAYAÇ)
#101 = 3 (TOPLAM SÜTUN)
#102 = 50.0 (MM CİNSİNDEN SÜTUN ARALIĞI)
WHILE [#100 LT #101] DO 1;
#103 = 0 (SATIR SAYAÇ)
#104 = 4 (TOPLAM SATIR)
#105 = 40.0 (MM CİNSİNDEN SATIR ARALIĞI)
WHILE [#103 LT #104] DO 2;
G90 G00 X[#100 * #102] Y[#103 * #105];
G81 Z-15.0 R2.0 F150.0;
G80;
#103 = #103 + 1 (SATIRI ARTIR);
END 2;
#100 = #100 + 1 (SÜTUNU ARTIR);
END 1;
M30;
kuru çalıştırma
Bir kuru çalıştırma sırasında, kontrol ünitesi #100 = 0 ve #101 = 3 ile başlar. Dış loop koşulu olan #100 LT #101 doğru (true) olarak değerlendirilir ve Loop 1'e girilir. İçeride, #103 sıfırlanır (0). İç loop koşulu olan #103 LT #104 (0 < 4) doğru olarak değerlendirilir ve Loop 2'ye girilir. Makine X0.0 Y0.0 konumuna hareket eder ve Z-15.0 derinliğe bir G81 delik delme çevrimi (drilling cycle) yürütür. Loop değişkeni #103 değeri 1 artırılır. İç loop Y40.0, Y80.0 ve Y120.0 için tekrarlanır. #103 değeri 4'e ulaştığında Loop 2 sonlanır. #100 değeri 1 artırılarak makine X50.0 konumuna hareket ettirilir. İşlem sütun 1 ve 2 için tekrarlanır. #100 değeri 3 olduğunda, Loop 1 yanlış (false) olarak değerlendirilir ve program M30 ile sonlanır.
Siemens Program Örneği: Takım Kontrolü ve Güvenli Yol Rotasyonu
; Siemens Sinumerik Takım Kontrolü ve Güvenli Geri Çekme
R10 = $TC_MPPC1[1] ; Aktif takım aşınma değerini oku
STOPRE ; Look-ahead senkronizasyonu için ön işlem durdurmaya zorla
IF R10 > 0.25 GOTOF ALARM_RETRCT
; Standart Yol
G00 X100.0 Z50.0
M30
ALARM_RETRCT:
GOTOC SAFE_HOME
SAFE_HOME:
G00 G53 Z0.0 D0 ; Güvenli Z geri çekme
SETAL(60100) ; Özel takım aşınma alarmını tetikle
M30
kuru çalıştırma
Yorumlayıcı (interpreter), aktif takım aşınma değerini R10 değişkenine okur. STOPRE bloğu, LookAhead tampon belleğini (buffer) durdurarak koşul kontrol edilmeden önce aşınma değerinin tamamen okunmasını sağlar. R10 değeri 0.25 mm'yi aşarsa, IF koşulu doğru (true) olarak değerlendirilir ve program ALARM_RETRCT etiketine doğru ileriye atlar (GOTOF). Kod daha sonra SAFE_HOME etiketine bir GOTOC atlaması başlatır. Eğer SAFE_HOME etiketi mevcutsa, makine referansına güvenli Z ekseni geri çekmesini (G53 Z0.0) yürütür ve takım ofsetlerini (D0) devre dışı bırakır. SETAL(60100) komutu yürütülerek makine hareketini durdurur ve ekranda 60100 numaralı kullanıcı alarmını görüntüler.
Mitsubishi Program Örneği: Güvenli Parametrik Gagalama Döngüsü
; ABS Toleranslı Güvenli Mitsubishi Gagalama Çevrimi
#100 = -50.0 (HEDEF DERİNLİK Z)
#101 = 0.0 (MEVCUT Z DERİNLİĞİ)
#102 = -10.0 (PECK INCREMENT)
#103 = 0.01 (SAFETY TOLERANCE)
WHILE [ABS[#101 - #100] GT #103] DO1;
#101 = #101 + #102;
IF [#101 LT #100] THEN #101 = #100;
G00 Z[#101 + 2.0];
G01 Z#101 F100.0;
G00 Z2.0; (EMNİYET MESAFESİNE GERİ ÇEKİLME)
END1;
M30;
kuru çalıştırma
Program, hedef derinliği #100 = -50.0 ve mevcut derinliği #101 = 0.0 olarak ayarlar. Gagalama boyutu #102 = -10.0'dır. WHILE loop'u, #101 ile #100 arasındaki mutlak farkın tolerans #103'ten büyük olup olmadığını kontrol eder. İlk kontrol ABS[0.0 - (-50.0)] işlemini değerlendirir ve sonuç 50.0 çıkar. 50.0 > 0.01 olduğundan loop'a girilir. #101 değeri -10.0 olarak güncellenir. IF-THEN, #101'in #100'ü aşmadığını doğrular. Takım Z-8.0 konumuna hareket eder, Z-10.0 derinliğe ilerleme (feed) yapar ve Z2.0 emniyet mesafesine geri çekilir. Loop tekrarlanarak Z-20.0, Z-30.0, Z-40.0 ve Z-50.0 derinliklerine gagalama yapar. Son yinelemede fark 0.0 olur, bu da #103'ten büyük olmadığından loop sonlandırılır ve program M30 ile sonlanır.
Hata Analizi
| Marka | Alarm Kodu | Tetiklenme Koşulu | Operatör Belirtisi | Kök Neden / Çözüm |
|---|---|---|---|---|
| Fanuc | 124 / PS1124 | DO - END nesting'i 1:1 eşleşmiyor. | Döngü (cycle) loop yürütülmeden hemen önce durur. Ekranda "MISSING END STATEMENT" görünür. | Programdaki her DO ifadesinin aynı tanımlayıcıya sahip eşleşen bir END ifadesine sahip olduğundan emin olun. |
| Fanuc | 126 | DO tanımlayıcısı m 1 ila 3 aralığının dışındadır. | CNC, blok yürütülürken alarm durumuna geçer. Ekranda "ILLEGAL LOOP NUMBER" görünür. | Loop bloğunu, kesinlikle DO 1, DO 2 veya DO 3 ile sınırlı DO tanımlayıcıları kullanacak şekilde değiştirin. |
| Fanuc | 128 / PS1128 | GOTO hedef sıra numarası bulunamadı veya aralık dışında. | Yürütme GOTO komutunda durur. Ekranda "SEQUENCE NUMBER OUT OF RANGE" görünür. | Hedef N sıra numarasının mevcut olduğundan ve 1 ila 99999999 aralığında bulunduğundan emin olun. |
| Siemens | 14080 | Aktif program seviyesinde atlama hedef etiketi veya blok numarası eksik. | Yorumlayıcı (interpreter) durması anında gerçekleşir. Ekranda "Jump destination not found" görünür. | Etiketin veya blok numarasının yazımını kontrol edin. Hedefin aktif program seviyesinde mevcut olduğundan emin olun. |
| Siemens | 14000 | Bir GOTOB atlamasının veya REPEAT loop'unun hedefi yeniden yükleme tampon belleğinin (reload buffer) dışına düşüyor. | Yürütme, harici dosya okunurken programın ortasında durur. Ekran, bellek tampon hatası gösterir. | Atlama hedefinin (GOTOB veya REPEAT etiketi gibi) sonradan yükleme tampon sınırları içinde bulunduğundan emin olun. |
| Mitsubishi | P288 | IF ifadesi nesting derinliği maksimum 10 seviye sınırını aşıyor. | Yürütme, program yükleme veya makro çağrısı sırasında durur. Ekranda "IF EXCESS" alarmı görünür. | Nesting'li koşul ağacını 10 seviye veya altına düzleştirmek için makro mantığını yeniden yapılandırın. |
| Mitsubishi | P293 | WHILE-DO loop nesting seviyesi 27 seviyeyi aşıyor. | Yorumlayıcı yürütmeyi anında durdurur. Ekranda "DO-END nesting over" görünür. | Nesting derinliğinin 27 seviyeli donanım sınırını aşmamasını sağlamak için program loop'larını yeniden tasarlayın. |
| Mitsubishi | P295 | Tape çalıştırma modunda yürütülen WHILE veya GOTO komutu. | CNC, tape ilerlemesi sırasında talaş kaldırma ortasında durur. Ekranda "WHILE/GOTO in tape" alarmı görünür. | Makro programını CNC'nin dahili belleğine yükleyin ve DNC/Tape modu yerine Memory modunda çalıştırın. |
Uygulama Notu
Üretim hatlarında plansız duruş sürelerini (downtime) ortadan kaldırmak ve pahalı iş parçalarının hurda oranını en aza indirmek, doğrudan doğruya kontrol ünitelerinin mantıksal işleme ve parametre ayarlarının doğru yapılandırılmasına bağlıdır. Mitsubishi kontrol sistemlerinde ondalıklı sayıların EQ (eşittir) operatörü kullanılarak doğrudan karşılaştırılması, kayan nokta (floating-point) hesaplama hataları nedeniyle kritik güvenlik koşullarının değerlendirilmeden geçilmesine yol açar. Bu durum, taretin aynaya veya clamp'e çarpmasıyla sonuçlanan kaçınılmaz hasarlara sebep olur. Bu riski bertaraf etmek için, koşulların her zaman [ABS[#10 - #20] LT 0.01] gibi mutlak bir tolerans değeri ile formüle edilmesi gerekir. Siemens kontrol ünitelerinde ise, gerçek zamanlı makine durumlarını sorgulayan bir dallanma öncesinde STOPRE ön işlem durdurma (preprocessing stop) komutunun kullanılmaması, look-ahead tamponunun eski verilerle kararlar almasına yol açar. Sonuç olarak taret, 700011 clamping timeout veya 700013 unclamped chuck alarmını tetikleyerek parçaya dalar ve anında hurdaya ayırır. Fanuc sistemlerinde ise, 6000#1 (MGO) ve 6000#4 (HGO) parametrelerinin aktif hale getirilmesi, GOTO aramalarının tüm programı baştan sona taramasını önleyerek önbellek üzerinden dallanmasını sağlar ve milisaniyelik gecikmelerden biriken büyük döngü süresi (cycle time) kayıplarını engeller. Bu kritik parametrelerin ve mantık sınırlarının üretim öncesinde doğrulanması, tezgahın ve aparatların korunmasını sağlayan en önemli proaktif adımdır.
İlişkili Komut Ağı
- g65-custom-macro-b: Yerel değişkenlere aktarılan argümanlarla koşullu loop mantığı içeren özel makroları çağırır.
- writing-and-calling-subprograms: Mantıksal sayaç artışları kullanılarak tekrar tekrar yürütülebilen iç içe geçmiş (nested) alt programları uygular.
- r-parameter-programming: Koordinatları ve ilerleme hızlarını (feedrate) yapılandırılmış loop'lara aktarmak için Siemens sistemlerindeki aritmetik değişkenleri kullanır.
- STOPRE: Koşullu atlamalar yürütülmeden önce dinamik makine durumlarının tamamen değerlendirilmesini sağlamak için Siemens kontrol ünitelerindeki look-ahead yorumlayıcı tampon belleğini (interpreter buffer) durdurur.
Sonuç
Mantıksal makro operatörlerinin doğru uygulanması, statik G-code programlarını kendi kendini düzeltebilen ve tezgah donanımını koruyan akıllı sistemlere dönüştürür. Üretim süreçlerinde plansız duruş sürelerinden ve parça hurdalarından kaçınmak için, look-ahead tampon belleklerinin senkronize edilmesi, ondalıklı sayı kontrollerinde emniyet toleranslarının kullanılması ve loop sınırlarının titizlikle izlenmesi gerekir. Düzenli olarak makro sözdizimini (syntax) denetlemek ve atlama önbellek parametrelerini optimize etmek, atölye genelinde çarpışmasız, yüksek hızlı ve maksimum verimli bir üretimin sürdürülebilmesini garanti eder.
Sıkça Sorulan Sorular
Fanuc makrolarında plansız çevrim süresi (cycle time) uzamalarını ve duraklamaları nasıl önleyebilirim?
Büyük makro programlarında GOTO atlamaları, kontrolörün program satırlarını yukarıdan aşağıya tek tek taramasına neden olarak milisaniyelik gecikmelere yol açar. Bu plansız duraksamaları engellemek için Fanuc 6000#1 (MGO) parametresini 1 yaparak 20 bloğa kadar yüksek hızlı önbellek aramasını aktif hale getirin ve atlama yaptığınız N satır numaralarını birbirine yakın bloklar halinde düzenleyin.
Mitsubishi CNC tezgahlarında makro çalıştırırken P295 alarmı alıyorum, çözümü nedir?
P295 alarmı, kontrolörün WHILE veya GOTO gibi mantık yönlendirme komutlarını DNC/Tape modunda çalıştırırken tüm veri yolunu önceden tampona alamamasından kaynaklanır. Bu hatayı gidermek için makro dosyasını harici bir bilgisayardan akıtmak yerine doğrudan tezgahın dahili katı hal (solid-state) belleğine yükleyin ve programı Memory modunda çalıştırın.
Siemens tezgahımda takım aşınma değerine göre dallanma yaparken takımın clamp'e çarpmasını nasıl engellerim?
Siemens interpreter'ı LookAhead fonksiyonu ile kodları önceden okuduğundan, takım aşınması veya prob ölçümü gibi dinamik parametreleri fiziksel hareket tamamlanmadan değerlendirebilir. Takımın yanlış yola saparak clamp'e çarpmasını önlemek için koşullu IF bloğunun hemen üstündeki satıra tek başına STOPRE yazarak look-ahead tamponunu sıfırlayın.
Hala çözülmedi mi?
Bu makaledeki konuyu AI asistana doğal dilde sorabilirsin. Doğrulanmış kaynaklardan, halüsinasyon yok.

- CNC CARE Co-Founder (May 2025 - Present)
- Mitsubishi Electric NC Sales & Service Section Manager (2008 - 2025)
- Reis CNC Service Engineer (2003 - 2005)
- Ören Kalıp CNC Mold Line Team Leader (1999 - 2002)
25 yılı aşkın CNC makine sektörü deneyimimle, marka-bağımsız danışmanlık, mühendislik ve orijinal yedek parça hizmetleri sunduğumuz CNC CARE'in kurucu ortağı olarak faaliyetlerime devam ediyorum.
İlgili Makaleler
Bu konuyla ilgili diğer makaleler
Fanuc 3D Girişim Önleme Kılavuzu: 10930 Parametre Kurulumu
Fanuc CNC 3D Girişim Önleme sistemini kurun. 10930 parametre ayarlarını öğrenin, PS0492 alarmını giderin ve iş parçası hurda oranını kalıcı olarak düşürün.
Fanuc Custom Macro Parametreleri 0932 & 8135 Ayar Kılavuzu
Fanuc CNC'de custom macro etkinleştirme parametreleri 0932 ve 8135 ayarlarını öğrenin. Alarm 113, 114 ve 123 hatalarını önleyerek hurda oranını düşürün.
Fanuc CNC Takım Ömrü Yönetimi Parametreleri Ayar Kılavuzu
Fanuc CNC'de 6800, 6805 ve 6810 takım ömrü parametrelerini ayarlamayı öğrenin. Alarm 156 ve 159 hatalarını önleyerek insansız ve güvenli üretimi etkinleştirin.
Fanuc Rijit Kılavuz Çekme İvmelenme Parametreleri Ayar Kılavuzu
Fanuc CNC kontrolörlerinde 11420#0 parametresi ile rijit kılavuz çekme ivmelenmesini optimize edin, duruş sürelerini azaltın ve SP0741 alarmını kalıcı olarak çözün.