Siemens SINUMERIK Değişkenler ve R Parametreleri: DEF, Sistem Değişkenleri ve Hesap İşlemleri (840D sl / 828D)

3 Ağustos 2026

Mentor CNC Editör Ekibi

Değişken ne işe yarar? Önce bunu netleştirelim

Klasik bir CNC programında her şey sabittir. Delik derinliği Z-20 yazılmıştır, o programda hep 20 mm’dir. Aynı parçanın 25 mm’lik hâlini işleyeceksen programı açıp elle değiştirirsin.

Değişken kullanınca bu iş tersine döner: derinliği programın başında bir kere yazarsın, program da onu kullanır. Ölçü değişince tek satır değiştirirsin, gerisi kendiliğinden uyar. Aynı program 10 farklı ölçüde parçayı işler.

Fanuc’tan geliyorsan bu sana yabancı değil — orada makro değişkenleri (#100, #500) var. Siemens’te aynı iş yapılır ama sistem daha geniş: değişkene tip verirsin, isim verirsin, hatta geçerlilik alanını belirlersin.

Fanuc’taSINUMERIK’teNot
#100 (yerel makro değişkeni)R10 ya da kendi tanımladığın değişkenR parametreleri numaralıdır, kendi değişkenlerine isim verirsin
#500 (kalıcı ortak değişken)GUD (global kullanıcı değişkeni)SINUMERIK’te ayrı bir tanım dosyasında tanımlanır
#1000 serisi (sistem)$ ile başlayan sistem değişkenleriSINUMERIK tarafında çok daha ayrıntılı
Tip yok, hepsi sayıINT, REAL, BOOL, CHAR, STRING, AXIS, FRAMEYanlış tip yazarsan kontrol alarm verir
Bu sayfa neyi anlatıyor?SINUMERIK’te değişkenlerin üç türü, R parametrelerinin doğru kullanımı, kendi değişkenini DEF ile tanımlama, veri tipleri ve sınırları, sistem değişkenlerinin $ önek mantığı, hesap ve karşılaştırma işlemleri. Bilgiler Siemens’in güncel Job Planning programlama kılavuzundan alınmıştır.

SINUMERIK’te üç tür değişken vardır

Kılavuz değişkenleri net biçimde üçe ayırıyor. Karışıklığın çoğu bu ayrımı bilmemekten çıkıyor.

1. Sistem değişkenleri

Anlamı kontrol tarafından sabitlenmiş, hazır gelen değişkenlerdir. Makine dataları, ayar dataları, takım verileri, o anki eksen konumu… Hepsinin adı $ ile başlar. Sen tanımlamazsın, sadece okur — yetkin varsa yazarsın.

2. Önceden tanımlı kullanıcı değişkenleri

Sistemde zaten vardır, ama kaç tane olacağını makine datası belirler. En bilineni R parametreleridir. Ayrıca link değişkenleri de bu gruptadır.

3. Kendi tanımladığın değişkenler

Adını, tipini, boyutunu, görünürlüğünü tamamen sen belirlersin. DEF komutuyla tanımlanır ve program çalışırken oluşturulur.

Pratik karşılık.Basit bir hesap yapacaksan R parametresi yeter. Program okunabilir olsun, “bu değişkenin adı DERINLIK olsun” diyorsan DEF kullanırsın. Makinenin o anki durumunu okuyacaksan sistem değişkenine bakarsın.

R parametreleri — en çok kullanacağın şey

R parametreleri kanala özel, önceden tanımlı kullanıcı değişkenleridir. Kılavuzun tanımıyla: REAL veri tipinde bir dizidir. Yani her R parametresi ondalıklı sayı tutabilir.

İki farklı yazım, aynı şey

Tarihsel sebeplerle iki yazım da geçerlidir:

R10=25.5 ; dizin olmadan — klasik yazım R[10]=25.5 ; dizin ile — aynı parametre

Dizinli yazımın avantajı şudur: köşeli parantezin içine ifade yazabilirsin.

R[R2]=R10 ; R2 kaçsa, o numaralı R parametresine R10’u yaz R[(R1+R2)*R3]=5 ; hesaplanan numaraya yaz

Buna dolaylı programlama denir ve döngülerle birlikte çok güçlüdür — 20 farklı deliğin derinliğini R20…R39 arasına koyup döngüde tek satırla dolaşabilirsin.

Kaç tane R parametresi var?

Burada 2010’lu yılların Türkçe eğitim notlarında sık geçen bir yanlış var: “100 adettir, R1’den R99’a kadar” denir. Doğrusu şu:

  • Numaralandırma R0‘dan başlar, R1’den değil.
  • Sayı sabit değildir. Üst sınır makine datasıyla belirlenir: MAX_INDEX = (MD28050 $MN_MM_NUM_R_PARAM) − 1

Yani kendi tezgâhında kaç R parametresi olduğunu bilmek istiyorsan MD28050’ye bakacaksın. 100 tanımlıysa geçerli aralık R0…R99’dur.

Değer aralığı

YazımAralıkSınır
Normal (üstel olmayan)± (0,0000001 … 9999999)En fazla 8 ondalık basamak
Üstel± (1×10−300 … 1×10+300)Yazım: 8.2EX-3 · işaret ve nokta dahil en fazla 10 karakter
Senkron eylemlerde başına $ gelir.Parça programında R10 yazarsın. Aynı parametreyi bir senkron eylem içinde kullanacaksan $R10 yazman gerekir. Sebebi teknik: R10 program hazırlanırken (ön işleme), $R10 ise hareket gerçekleşirken (ana çalışma) okunur. Karıştırırsan değer beklediğinden farklı çıkar.

Kendi değişkenini tanımlamak: DEF

R10, R11, R12… ile yazılmış uzun bir program altı ay sonra okunmaz. DEF ile değişkene isim verirsin ve program kendi kendini açıklar.

En sade hâli

DEF INT DELIK_SAYISI DEF INT DELIK_SAYISI=8 ; tanımla ve değer ver DEF REAL DERINLIK, CAP, PAY ; aynı tipten birden fazla DEF BOOL SOGUTMA=TRUE DEF STRING[16] PARCA_ADI=”GOVDE” DEF AXIS EKSEN=(X)

İsimlendirme kuralları — kılavuzun kendi ifadesi

  • En fazla 31 karakter. (Türkçe kaynaklarda sık geçen “32 karakter” yanlıştır.)
  • İlk iki karakter harf ve/veya alt çizgi olmalıdır. _DERINLIK olur, D1ERINLIK olur, 1DERINLIK olmaz.
  • $ işareti sistem değişkenlerine ayrılmıştır, kullanılamaz.

Tanım nereye yazılır?

Kılavuzun kuralları şöyle:

  • Veriler kendine ait bir blokta tanımlanmalıdır — hareket satırının içine sıkıştırılamaz.
  • Her tanım satırında tek bir veri tipi kullanılır.
  • Aynı tipten birden fazla değişken tek satırda tanımlanabilir.

İleri seviye: DEF’in tam sözdizimi

Günlük işte gerekmez, ama sınır ve birim atamak isteyenler için kılavuz şu yapıyı veriyor:

DEF <tip> <fiziksel birim> <sınır değerler> <isim>[<boyut>]=<ilk değer>

Buradaki PHU fiziksel birimi, LLI alt sınırı, ULI üst sınırı belirler. Örnek:

DEF CHAN REAL PHU 24 LLI 0 ULI 10 AKIM_1, AKIM_2 ; Kanal genelinde geçerli, REAL tipinde ; Birim 24 = Amper, alt sınır 0,0 · üst sınır 10,0

Sınır koymanın faydası: değişkene aralık dışında bir değer atanırsa kontrol uyarır. Program yanlış değerle sessizce çalışmaz.

Veri tipleri ve gerçek sınırları

Yanlış tip seçmek programın alarm vermesinin en sık sebeplerinden biridir. Aşağıdaki tablo kılavuzun kendi tablosudur:

TipNe tutar?Değer aralığı
INTİşaretli tam sayı−2.147.483.648 … +2.147.483.647
REALGerçek (ondalıklı) sayı, IEEE LONG REAL±(~2,2×10−308 … ~1,8×10+308)
BOOLDoğru / yanlışTRUE (1), FALSE (0)
CHARTek ASCII karakteriASCII kodu 0 … 255
STRINGBelirli uzunlukta karakter dizisiEn fazla 200 karakter (özel karakter yok)
AXISEksen / iş mili tanımlayıcısıKanal eksen adı
FRAMEKoordinat dönüşümü verisi (taşıma, döndürme, ölçekleme, aynalama)

Tip dönüşümünde dikkat edilecek nokta

REAL bir değeri INT değişkene atarsan kontrol yuvarlar: ondalık kısım 0,5 ve üzeriyse yukarı, altındaysa aşağı. Yani DEF INT A yapıp A=7.6 yazarsan A içinde 8 olur — 7 değil. Bunu bilmeden ölçü hesabı yapmak parçayı bozar.

Aralık dışına taşarsa program durur.Dönüşüm sonucu hedef tipin aralığını aşarsa kontrol hata mesajı verir. INT bir değişkene milyarlarca değer atamaya kalkarsan program orada durur.

Sistem değişkenleri ve $ önek sistemi

Sistem değişkenlerinin adı rastgele değildir. $ işaretinden sonraki harfler hangi veri olduğunu, ondan sonraki harf ise nerede geçerli olduğunu söyler.

İlk harf — hangi veri?

ÖnekAnlamıNe zaman okunur?
$MMakine datasıÖn işleme sırasında
$SAyar datası (setting data), koruma bölgeleri
$TTakım yönetimi verileri
$PProgramlanan değerler
$CISO çevrim kabuğunun çevrim değişkenleri
$OOpsiyon datası
RR parametreleri
$$M / $$SMakine / ayar datasıAna çalışma sırasında
$AO anki ana çalışma verisi
$VServo verisi
$RR parametreleri (senkron eylemde)
Türkçe kaynaklarda iki yaygın çeviri hatası.$S için “sistem datası” yazılır — doğrusu ayar datasıdır (setting data), sistem datası değil. $V için “servis datası” yazılır — doğrusu servo datasıdır. İkisi de anlamı tamamen değiştiriyor.

İkinci harf — nerede geçerli?

  • N — NCK geneli (tüm kontrol)
  • C — kanala özel
  • A — eksene özel

Örnek: $AA_IM[X]$A ana çalışma verisi, ikinci A eksene özel, yani X ekseninin o anki makine koordinatındaki konumu.

Kuralın iki istisnası var.$TC_... içindeki C harfi kanalı değil, takım taşıyıcısını (tool carrier) gösterir. $P_... ise kanala özel değişkenleri ifade eder. Türkçe notlarda $TC_DP3[8,2] için “o anki kanala ait takım parametresi” açıklaması bu yüzden yanlıştır.

Ön işleme mi, ana çalışma mı?

Bu ayrım pratikte şu anlama gelir: ön işleme değişkenleri kontrol satırı okuyup yorumlarken değerlenir ve ön işleme durdurma tetiklemezler. Ana çalışma değişkenleri ise hareket fiilen gerçekleşirken değerlenir. Eksenin o anki gerçek konumunu okumak istiyorsan ana çalışma değişkenine bakman gerekir; ön işleme değişkeni sana kontrolün önden hesapladığı değeri verir.

Değişken nerede geçerli? LUD, PUD, GUD

Bu konu Türkçe eğitim notlarının çoğunda hiç geçmez, ama “değişkenim alt programda niye boş geliyor?” sorusunun cevabı tam olarak burada.

TürNerede tanımlanır?Nereden erişilir?Ne zaman silinir?
LUD
Yerel kullanıcı değişkeni
Ana program olmayan bir parça programında (yani alt programda)Sadece tanımlandığı programın içindenProgram bitince veya NC Reset’te
PUD
Program geneli değişken
Ana program olarak çalışan parça programındaAna programdan ve bütün alt programlarındanProgram bitince veya NC Reset’te
GUD
Global kullanıcı değişkeni
Ayrı bir tanım dosyasında (SGUD, MGUD, UGUD, GUD4…GUD9)Bütün parça programlarındanSilinmez — kapatıp açsan da durur

Kural şudur: alt programda tanımladığın değişken ana programa geri dönmez. Değeri her iki tarafta da kullanmak istiyorsan değişkeni ana programda tanımlarsın (PUD olur) ya da GUD yaparsın.

GUD’lar bir tanım dosyasına yazılır, örneğin _N_DEF_DIR/_N_MGUD_DEF. Bunlar makine kapatılıp açıldığında da korunur — Fanuc’taki #500 serisinin karşılığı gibi düşünebilirsin.

Değişkenlerle hesap yapmak

Kılavuzun aritmetik fonksiyon tablosu:

KomutAnlamıÖrnek / not
+ − * /Toplama, çıkarma, çarpma, bölme3 / 4 = 0.75
DIVTam sayı bölme7 DIV 4.1 = 1
MODModülo — bölmeden kalan7 MOD 4.1 = 2.9
:FRAME değişkenleri için zincir operatörüSadece frame’lerde
SIN() COS() TAN()Sinüs, kosinüs, tanjantAçı derece cinsindendir (dik açı = 90°)
ASIN() ACOS()Ters sinüs, ters kosinüs
ATAN2(,)Ters tanjant 2Birbirine dik iki vektörden bileşke açıyı verir, sonuç −180° … +180°
SQRT()Karekök
POT()Kare alma (2. kuvvet)Kare alma POT()‘tur
ABS()Mutlak değer
TRUNC()Tam sayı kısmını alırKarşılaştırma hassasiyeti için de kullanılır
ROUND()Tam sayıya yuvarlar
LN() EXP()Doğal logaritma, üstel fonksiyon
MINVAL() MAXVAL()İki değişkenin küçüğü / büyüğü
BOUND()Değeri tanımlı aralık içinde tutar
CTRANS() CROT()Öteleme, döndürmeFrame işlemleri
CSCALE() CMIRROR()Ölçekleme, aynalamaFrame işlemleri
Bu satırı özellikle yazıyorum.Türkçe eğitim notlarında “ROT() → kare alma işlemi” diye geçen bir satır dolaşıyor. Yanlıştır. Kılavuzda kare alma POT(), döndürme ise CROT() olarak tanımlanmıştır. ROT zaten frame döndürme komutudur — kare almakla hiçbir ilgisi yoktur. Bu hatayla yazılmış bir hesap yanlış ölçü üretir.

Pratik örnek — hipotenüs

R15=SQRT(POT(R1)+POT(R2)) ; R15 = kök( R1² + R2² ) ; İçteki parantezler önce çözülür.

Konik hesabı, pah hesabı, delik dairesi koordinatı — hepsi bu iki fonksiyonla çıkar.

Karşılaştırma ve mantık işlemleri

Bunlar IF ve döngü koşullarının temelidir.

Karşılaştırma operatörleri

OperatörAnlamı
==Eşittir
<>Eşit değildir
>Büyüktür
<Küçüktür
>=Büyük veya eşittir
<=Küçük veya eşittir
Eşitlik = değil == ile yazılır.Tek eşittir atamadır: R1=5 demek “R1’e 5 yaz” demektir. Karşılaştırma için çift eşittir gerekir: IF R1==5. Bazı Türkçe kaynaklarda IF X=-50 şeklinde örnekler var; bu yazım koşulu değil atamayı ifade eder ve beklediğin gibi çalışmaz.

Karşılaştırma CHAR, INT, REAL ve BOOL tiplerinde çalışır. STRING, AXIS ve FRAME tiplerinde ise yalnızca == ve <> kullanılabilir. Sonuç her zaman BOOL tipindedir.

Mantık operatörleri

AND (ve), OR (veya), NOT (değil), XOR (dışlayan veya).

Bit düzeyinde çalışanlar: B_AND, B_OR, B_NOT, B_XOR. Bunlar CHAR ve INT tiplerinin tek tek bitlerine uygulanır — makine datası bitlerini sorgulamak için kullanılır.

Mantık işlemlerinde 0 = FALSE, 0’dan farklı her değer = TRUE sayılır.

Boşluk kuralı.Kılavuzun açık uyarısı: mantıksal işlenenlerle operatörler arasında boşluk bırakılmalıdır. R10ANDR11 yazamazsın, R10 AND R11 yazarsın. Ayrıca B_NOT tek işlenene uygulanır ve işlenen operatörden sonra gelir.

İşlem öncelik sırası

Yüksekten düşüğe:

  1. NOT, B_NOT
  2. *, /, DIV, MOD
  3. +,
  4. B_AND
  5. B_XOR
  6. B_OR
  7. AND
  8. XOR
  9. OR
  10. << (karakter dizisi birleştirme)
  11. ==, <>, >, <, >=, <=

Aynı öncelikteki işlemler soldan sağa hesaplanır. Parantez kullanarak sırayı istediğin gibi değiştirebilirsin — kılavuz da bunu öneriyor.

Frame’lerin zincir operatörü : ise bu listeye girmez; başka operatörlerle aynı ifadede kullanılmamalıdır.

Ondalıklı sayı karşılaştırmanın tuzağı ve TRUNC

Şu programı yazsan ne olur?

N40 R1=61.01 R2=61.02 R3=0.01 N41 IF ABS(R2-R1) > R3 GOTOF HATA N42 M30 N43 HATA: SETAL(66000)

Kâğıt üzerinde 61.02 − 61.01 = 0.01, yani 0.01 > 0.01 yanlış; program alarm vermemeli. Ama REAL veriler kontrol içinde 64 bit IEEE biçiminde tutulur ve ondalık sayılar tam olarak temsil edilemez. Sonuç 0,0099999… veya 0,0100000…1 çıkabilir.

SINUMERIK bu yüzden karşılaştırmalarda mutlak eşitliğe değil, göreli eşitliğe bakar. Göreli hassasiyet 10−12 mertebesindedir ve ==, <>, >=, <=, >, < için geçerlidir.

Yine de sapma kabul edilemezse çözüm TRUNC ile tam sayıya taşımaktır:

R11=TRUNC(R1*1000) R12=TRUNC(R2*1000) R13=TRUNC(R3*1000) ; artık karşılaştırma tam sayılar üzerinden yapılır
Ne zaman önemli olur?Ölçü karşılaştırması, tolerans kontrolü, döngü sayacı gibi yerlerde. “Program bazen o dala giriyor bazen girmiyor” tarzı açıklanamayan davranışların sebebi çoğu zaman budur.

Sık yapılan hatalar

Değişkeni hareket satırının içinde tanımlamak

Tanımlar kendi bloklarında olmalıdır. DEF REAL DERINLIK G1 X50 gibi bir satır çalışmaz.

Alt programda tanımlayıp ana programda aramak

Alt programda tanımlanan değişken LUD’dur, alt program bitince silinir. Değeri dışarı taşımak istiyorsan ana programda tanımla veya GUD kullan.

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

IF R1=5 yerine IF R1==5. Bu, en çok zaman kaybettiren yazım hatasıdır.

Boşluksuz mantık ifadesi yazmak

IF (R10<50)AND(R11>20) yerine operatörün iki yanına boşluk koy.

INT değişkene ondalıklı değer atamak

Kontrol yuvarlar ve sana haber vermez. Ölçü tutmayınca sebebini burada ara.

R parametresini “sıfırlanır” sanmak

R parametreleri program bitince silinmez. Önceki işten kalan değerle çalışmamak için kullanacağın parametreleri programın başında kendin sıfırla.

MD28050’yi bilmeden yüksek numaralı R parametresi kullanmak

Tezgâhında 100 parametre tanımlıysa R150 yazdığın an alarm alırsın. Üst sınırı bir kez öğren, not et.

Sık sorulan sorular

R parametresi ile DEF ile tanımlanan değişken arasında pratikte ne fark var?

R parametresi hazırdır, tanımlamana gerek yoktur, REAL tipindedir ve program bitince silinmez. DEF ile tanımladığın değişkene istediğin ismi ve tipi verirsin, ama tanımlaman gerekir ve geçerlilik alanı sınırlıdır. Kısa hesaplar için R, okunabilir program için DEF.

Fanuc’taki #500 serisinin karşılığı nedir?

Kapatıp açınca korunması bakımından en yakın karşılık GUD‘dur. Ancak GUD ayrı bir tanım dosyasında tanımlanır; parça programının içinden oluşturulamaz.

Değişkenle takım ofsetini programdan değiştirebilir miyim?

Sistem değişkenleri üzerinden mümkündür, ancak bu doğrudan makinenin kesme davranışını değiştirir. Yetki seviyesi ve yazma zamanlaması da işin içine girer. Bu sayfada bilinçli olarak örnek vermiyoruz; ofset yazma işlemi kendi başına ayrı bir konudur ve makine üreticisinin kılavuzuyla birlikte ele alınmalıdır.

Kaç R parametrem olduğunu nereden görürüm?

MD28050 $MN_MM_NUM_R_PARAM makine datasına bakılır. Geçerli en yüksek numara bu değerin bir eksiğidir.

Değişken adında Türkçe karakter kullanabilir miyim?

Kullanma. Kılavuz harf ve alt çizgi şartı koyuyor; Ç, Ğ, İ, Ö, Ş, Ü gibi karakterler kontrol sürümüne göre sorun çıkarabilir. DERINLIK yaz, DERİNLİK yazma.

Bu bilgiler 828D’de de geçerli mi?

Bu sayfadaki değişken yapısı, veri tipleri, operatörler ve öncelik sırası NC dilinin parçasıdır; 840D sl ve 828D için ortak kılavuzda tanımlanmıştır. Panel ve menü konuları gibi sürümle değişmez. Yalnızca veri sınıfı (DCM/DCI/DCU) 828D’ye özeldir ve R parametresi sayısı gibi makine datasına bağlı değerler tezgâhtan tezgâha farklıdır.

Mentor CNC notu: Değişken kullanan programlar, ölçüyü tek satırdan yönettikleri için hata yaptığında bütün program boyunca yanlış çalışır. Yeni yazdığın veya değiştirdiğin bir değişkenli programı ilk kez çalıştırırken grafik simülasyonda dene, sonra tek blok ve düşük ilerlemede izle. Makine datalarına (örneğin MD28050) bakmak ve özellikle yazmak yetki gerektirir; değer değiştirmeden önce yedek alınmalıdır. Bu sayfa eğitim amaçlıdır ve makine üreticisinin kılavuzunun yerini tutmaz.

Kaynaklar

  • Siemens AG — SINUMERIK 840D sl / 828D Job Planning, Programming Manual, 01/2015, doküman no 6FC5398-2BP40-5BA2: Bölüm 2.1 Değişkenler (s.19), 2.1.2.1 Kanala özel aritmetik parametreler R (s.22), 2.1.4 Kullanıcı değişkenlerinin tanımı DEF (s.27), 2.1.14 Veri tipleri (s.55), 2.2 Dolaylı programlama (s.62), 2.3 Aritmetik fonksiyonlar (s.69), 2.4 Karşılaştırma ve mantık işlemleri (s.71), 2.5 TRUNC ile hassasiyet düzeltmesi (s.73), 2.7 İşlem öncelikleri (s.76), 2.8 Tip dönüşümleri (s.76)
  • Siemens AG — SINUMERIK 840D sl / 828D Fundamentals, Programming Manual (temel NC dili tanımları)

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.