Mach4’te iRegs ile Özel Değerler Nasıl Oluşturulur ve Lua Macro İçinde Nasıl Okunur?

Mach4’te iRegs ile Özel Değerler Nasıl Oluşturulur ve Lua Macro İçinde Nasıl Okunur?

📅 02 Eylül 2026⏱️ 19 dk okuma
📑 İçindekiler (Tıkla Aç)

Mach4’te özel değerler oluşturmak ve Lua makroları içinde okumak için iRegs (Internal Registers) kullanılır. mc.mcCntlSetiReg(inst, regID, value) fonksiyonu ile değer kaydedilir ve mc.mcCntlGetiReg(inst, regID) ile okunur. Bu sayede CNC programları ve kullanıcı arayüzü arasında dinamik veri akışı sağlanır.

Mach4’te iRegs ile Özel Değerler Nasıl Oluşturulur ve Lua Macro İçinde Nasıl Okunur? Nedir?

 

Endüstriyel otomasyon ve CNC kontrol sistemlerinde, makinenin çalışma durumuna veya kullanıcı tarafından belirlenen özel parametrelere göre dinamik kararlar almak kritik öneme sahiptir. Mach4, bu tür ihtiyaçlar için güçlü bir esneklik sunan Lua tabanlı makro programlama yetenekleriyle öne çıkar. Bu yeteneklerin temel taşlarından biri de iRegs (Internal Registers) veya Türkçe adıyla Dahili Kayıtlar‘dır. iRegs, Mach4 kontrol yazılımı içerisinde geçici veya kalıcı olarak sayısal (tamsayı) değerler saklamak için kullanılan hafıza alanlarıdır. Basitçe ifade etmek gerekirse, iRegs, makro programlarınızın veya Mach4’ün kendisinin erişebileceği, özel bilgileri tutan küçük “depolama kutucukları” gibidir. Bu özel değerler, takım ofsetleri, iş parçası sıfır noktaları, özel sayaçlar, durum bayrakları veya kullanıcı tanımlı herhangi bir sayısal parametre olabilir. Lua makroları içinde bu değerleri oluşturmak ve okumak, Mach4 sistemlerinin dinamik, adapte edilebilir ve otomatikleştirilmiş çözümler geliştirmesini sağlar. Örneğin, bir işlem tamamlandığında bir bayrak set edebilir, belirli bir sayıda döngü tamamlandığında bir sonraki adıma geçebilir veya operatörden alınan bir girişi işleyerek makine davranışını değiştirebilirsiniz. iRegs, Mach4’ün çekirdek fonksiyonları ile Lua makroları arasında köprü kurarak, kullanıcıların kontrol sistemlerini kendi özel ihtiyaçlarına göre derinlemesine özelleştirmelerine olanak tanır.

Çalışma Prensibi ve Teknik Veriler

Mach4’teki iRegs, 0’dan 999’a kadar numaralandırılmış, toplamda 1000 adet tamsayı depolayabilen kayıt alanlarıdır. Her bir iReg, belirli bir kimlik numarasına (ID) sahiptir ve bu ID üzerinden erişilir. Bu kayıtlar, Mach4’ün çalışma zamanında (runtime) hızlı ve verimli bir şekilde veri alışverişi yapmasını sağlar. Lua makroları, Mach4 API’si aracılığıyla bu iReg’lere erişebilir ve manipüle edebilir.

iReg Oluşturma (Değer Yazma):

Bir iReg’e değer yazmak veya teknik terimle “oluşturmak” için mc.mcCntlSetiReg() Lua fonksiyonu kullanılır. Bu fonksiyonun sözdizimi şu şekildedir:

rc = mc.mcCntlSetiReg(inst, regID, value)
  • inst: Mach4 kontrolörü örneğini temsil eden bir referanstır. Genellikle mc.mcGetInstance() fonksiyonu ile elde edilir. Bu, makroya hangi Mach4 örneğiyle etkileşimde bulunacağını bildirir.
  • regID: Ayarlamak istediğiniz iReg’in benzersiz kimlik numarasıdır (0-999 arası bir tamsayı). Kendi projelerinizde hangi ID’yi ne için kullandığınızı iyi dokümante etmek, çakışmaları önlemek adına hayati önem taşır.
  • value: iReg’e yazılacak tamsayı değeridir. iRegs yalnızca tamsayı değerleri depolayabilir. Eğer ondalıklı (float) bir değer saklamak isterseniz, bu değeri önce uygun bir tamsayıya dönüştürmeniz gerekir (örn. 1.25’i 1250 olarak kaydedip okurken 1000’e bölmek gibi).
  • rc: Fonksiyonun başarı durumunu gösteren bir geri dönüş kodudur. Genellikle mc.MERROR_NOERROR (0) başarılı olduğunu gösterir, diğer değerler bir hata olduğunu belirtir.

iReg Okuma:

Bir iReg’de depolanan değeri okumak için mc.mcCntlGetiReg() Lua fonksiyonu kullanılır. Bu fonksiyonun sözdizimi şöyledir:

value = mc.mcCntlGetiReg(inst, regID)
  • inst: Yine mc.mcGetInstance() ile elde edilen Mach4 kontrolörü örneği referansıdır.
  • regID: Okumak istediğiniz iReg’in kimlik numarasıdır (0-999 arası bir tamsayı).
  • value: Belirtilen iReg’de depolanan tamsayı değeridir. Eğer iReg’e daha önce bir değer yazılmamışsa, genellikle 0 değeri döner.

Çalışma Prensibi ve Kullanım Alanları:

Bu fonksiyonlar sayesinde, bir Lua makrosunda karmaşık mantıklar oluşturulabilir. Örneğin:

  1. Bir takım değiştirme makrosu, kullanılan takımın numarasını bir iReg’e kaydedebilir. Başka bir makro bu iReg’i okuyarak bir sonraki takımın hangi ofsetleri kullanacağını belirleyebilir.
  2. Bir iş parçasının belirli bir aşamasını tamamladığınızı belirtmek için bir iReg’i “1” olarak ayarlayabilir, ve bir sonraki G kodu satırında bu iReg’in değerini kontrol ederek koşullu dallanma yapabilirsiniz.
  3. Kullanıcı arayüzünde (Screen Set) bir düğmeye basıldığında, bu olay bir iReg’e özel bir değer yazarak bir makronun tetiklenmesini sağlayabilir.
  4. Özel bir sayaç oluşturarak, bir işlemi kaç kez tekrarladığınızı takip edebilir ve belirli bir sayıya ulaşıldığında farklı bir eylem başlatabilirsiniz.

Kalıcılık (Persistence): iRegs varsayılan olarak Mach4 yeniden başlatıldığında değerlerini kaybederler. Yani, Mach4 kapatılıp açıldığında tüm iReg’ler sıfırlanır. Eğer iReg değerlerinin kalıcı olmasını istiyorsanız, bu değerleri Mach4 profiline (XML dosyası) kaydetmek veya harici bir dosyaya yazmak ve Mach4 başlangıcında tekrar yüklemek için ek Lua kodları yazmanız gerekir. Bu, genellikle mc.mcCntlSaveConfig() ve mc.mcCntlLoadConfig() gibi fonksiyonlar veya direkt dosya okuma/yazma işlemleri ile yapılabilir.

Parametre/ÖzellikDeğer/Açıklama
Fonksiyon (Değer Yazma)mc.mcCntlSetiReg(inst, regID, value)
Fonksiyon (Değer Okuma)mc.mcCntlGetiReg(inst, regID)
inst ParametresiMach4 kontrolörü örneği, mc.mcGetInstance() ile elde edilir.
regID Parametresi0’dan 999’a kadar (dahil) benzersiz iReg kimlik numarası.
value ParametresiiReg’e yazılacak veya okunan tamsayı değeri.
iReg SayısıToplam 1000 adet (iReg 0’dan iReg 999’a kadar).
Depolanan Veri TipiYalnızca tamsayı (Integer) değerler. Ondalıklı sayılar için dönüştürme gereklidir.
Varsayılan KalıcılıkMach4 yeniden başlatıldığında değerler sıfırlanır (kalıcı değildir).
Kalıcılık StratejisiDeğerleri profile kaydetme veya harici dosyaya yazma/okuma ile sağlanır.

Sahada Dikkat Edilmesi Gerekenler

  • iReg ID Yönetimi ve Çakışmaların Önlenmesi:

    iReg’ler 0’dan 999’a kadar numaralandırılmıştır. Büyük projelerde veya birden fazla makro geliştiricisinin çalıştığı ortamlarda, aynı iReg ID’sinin farklı amaçlar için kullanılması ciddi sorunlara yol açabilir. Örneğin, bir makro iReg 10’u takım numarası için kullanırken, başka bir makro iReg 10’u iş parçası sayacı olarak kullanırsa, değerler sürekli olarak birbirini ezecek ve beklenmedik makine davranışlarına neden olacaktır. Bu tür çakışmaları önlemek için, kullanılan iReg ID’lerini ve amaçlarını detaylı bir şekilde belgeleyen merkezi bir liste veya tablo tutmak esastır. Hatta bazı uzmanlar, belirli iReg aralıklarını farklı fonksiyonel gruplara ayırmayı (örn. 0-99 Genel Makine Durumu, 100-199 Takım Yönetimi, 200-299 İş Parçası Bilgileri vb.) önermektedir. Bu, hem okunabilirliği artırır hem de yeni geliştirmelerde ID seçimini kolaylaştırır.

  • Veri Tipi Dönüşümleri ve Hassasiyet Kaybı:

    Mach4 iReg’leri sadece tamsayı (integer) değerleri depolayabilir. Ancak birçok CNC uygulaması ondalıklı sayılarla (float/double) çalışmayı gerektirir (örn. takım ofsetleri 1.25 mm, besleme hızı 500.5 mm/dk). Ondalıklı bir değeri iReg’e kaydetmek için, değeri bir tamsayıya dönüştürmek gerekir. Bu genellikle değeri belirli bir çarpanla çarparak (örn. 1000 ile çarparak 1.25 -> 1250) yapılır. Değer okunurken ise aynı çarpanla geri bölünerek orijinal ondalıklı değer elde edilir. Bu işlem sırasında hassasiyet kaybı yaşanmaması için yeterince büyük bir çarpan seçmek önemlidir. Örneğin, 0.001 mm hassasiyet gerekiyorsa, 1000 çarpanı yeterli olabilir. Ancak bu dönüşüm mantığını her yazma ve okuma işleminde tutarlı bir şekilde uygulamak ve dokümante etmek zorunludur.

  • Kalıcılık Stratejileri ve Veri Bütünlüğü:

    Yukarıda bahsedildiği gibi, iReg’ler Mach4 yeniden başlatıldığında değerlerini kaybeder. Eğer bir iReg’in değeri (örn. bir iş parçasının toplam üretim adedi veya bir takımın kalan ömrü) Mach4 kapatılıp açıldıktan sonra da korunması gerekiyorsa, kalıcılık mekanizmaları uygulanmalıdır. En yaygın yöntem, Mach4’ün kapanış olayında (OEM_END makrosu gibi) ilgili iReg değerlerini Mach4 profilinin XML dosyasına kaydetmek (mc.mcCntlSaveConfig() veya doğrudan XML manipülasyonu ile) ve başlangıç olayında (OEM_START makrosu gibi) bu değerleri geri yüklemektir. Alternatif olarak, iReg değerlerini harici bir metin dosyasına yazıp okuyabilirsiniz. Hangi yöntemi seçerseniz seçin, veri kaybını önlemek için kaydetme ve yükleme işlemlerini hatasız bir şekilde uygulamak ve test etmek kritik öneme sahiptir. Elektrik kesintisi gibi durumlarda veri bütünlüğünü sağlamak için periyodik kaydetme işlemleri de düşünülebilir.

  • Hata Yönetimi ve Sağlamlık:

    Lua makroları içinde iReg işlemlerini yaparken, fonksiyonların geri dönüş değerlerini kontrol etmek iyi bir programlama pratiğidir. mc.mcCntlSetiReg() fonksiyonu, işlemin başarılı olup olmadığını belirten bir durum kodu döndürür. Bu kodları kontrol ederek, bir iReg’e yazma işleminin gerçekten başarılı olup olmadığını anlayabilir ve olası hatalara karşı önlemler alabilirsiniz. Örneğin, geçersiz bir iReg ID’si kullanıldığında veya başka bir sistem hatası oluştuğunda makronun düzgün bir şekilde tepki vermesini sağlamak, makinenin beklenmedik davranışlarını önler. Hata mesajlarını konsola yazdırmak veya kullanıcı arayüzünde göstermek, sorun giderme sürecini hızlandırır.

  • Performans ve Aşırı Kullanım:

    iReg’lere erişim genellikle çok hızlıdır, ancak aşırı sayıda iReg’in çok sık döngüler içinde okunması veya yazılması, özellikle karmaşık makrolarda veya yüksek hızlı uygulamalarda hafif bir performans düşüşüne neden olabilir. Çoğu CNC uygulamasında bu bir sorun teşkil etmezken, çok kritik zamanlamalara sahip veya binlerce iReg işlemi içeren senaryolarda dikkatli olunmalıdır. Gerekirse, verileri yerel Lua değişkenlerinde önbelleğe alıp yalnızca gerektiğinde iReg’lere yazmak gibi optimizasyonlar düşünülebilir.

  • Güvenlik ve Kritik Parametreler:

    iReg’ler esnek bir veri depolama mekanizması sunsa da, makine güvenliği ile ilgili kritik parametreleri doğrudan iReg’ler aracılığıyla kontrol etmekten kaçınılmalıdır. Acil durdurma (E-Stop) durumları, güvenlik kapısı kilitleri veya hız limitleri gibi hayati fonksiyonlar, Mach4’ün dahili güvenlik mekanizmaları ve donanımsal güvenlik sistemleri üzerinden yönetilmelidir. iReg’ler daha çok programatik kontrol akışı, kullanıcı tercihleri veya operasyonel veriler için kullanılmalıdır.

  • Dokümantasyon ve Açıklayıcı Yorumlar:

    Her bir iReg’in ne amaçla kullanıldığını, hangi değer aralıklarını kabul ettiğini ve kalıcılık durumunu (kalıcı mı, geçici mi) kod içinde ve harici belgelerde detaylı bir şekilde açıklamak, uzun vadeli sürdürülebilirlik ve ekip çalışması için hayati öneme sahiptir. Makrolar içinde bolca açıklayıcı yorum kullanmak, kodun daha sonra anlaşılmasını ve hata ayıklamasını kolaylaştırır.

Sık Karşılaşılan Sorunlar ve Çözümleri

Mach4 ve iRegs ile çalışırken karşılaşılan bazı yaygın sorunlar ve bunların çözüm yolları, saha tecrübelerinden edinilen bilgilerle aşağıda sıralanmıştır:

  • Sorun 1: Mach4 yeniden başlatıldığında iReg değerleri sıfırlanıyor veya kayboluyor.

    Açıklama: Bu, iReg’lerin varsayılan olarak kalıcı olmamasından kaynaklanır. Mach4 kapatıldığında RAM’deki tüm iReg değerleri silinir.

    Çözüm: Kalıcılık mekanizmalarını uygulayın. En yaygın yöntem, Mach4’ün başlangıç (OEM_START) ve kapanış (OEM_END) makrolarını kullanarak iReg değerlerini profilinize kaydetmek ve yüklemektir. Örneğin, OEM_END makrosunda önemli iReg değerlerini bir dosyaya yazabilir (io.open ile) veya Mach4’ün dahili konfigürasyon kaydetme fonksiyonlarını kullanabilirsiniz. OEM_START makrosunda ise bu değerleri dosyadan okuyarak veya konfigürasyondan yükleyerek ilgili iReg’lere geri yazmalısınız. Basit bir örnekle, mc.mcCntlSetiReg(inst, 100, mc.mcCntlGetiReg(inst, 100)) gibi bir işlem Mach4’ün dahili kaydetme mekanizmasını tetikleyebilir, ancak daha kontrollü bir yaklaşım için dosya işlemleri tercih edilir.

  • Sorun 2: iReg’den okunan değer beklenenden farklı veya yanlış.

    Açıklama: Bu durum genellikle iReg ID çakışmaları, yanlış veri tipi dönüşümleri veya makro çalışma sırası hatalarından kaynaklanır.

    Çözüm:

    • iReg ID Çakışması: Tüm iReg ID’lerinizin benzersiz olduğundan ve farklı makrolar veya Mach4 özellikleri tarafından aynı ID’nin farklı amaçlar için kullanılmadığından emin olun. Detaylı bir iReg kullanım tablosu tutun.
    • Veri Tipi Dönüşümü: Eğer ondalıklı bir değeri tamsayı olarak kaydettiyseniz (örn. 1.25’i 1250 olarak), okurken doğru çarpanla (örn. 1000’e bölerek) geri dönüştürdüğünüzden emin olun. Yanlış çarpan veya bölme işlemi, hatalı sonuçlar verir.
    • Makro Çalışma Sırası: Bir iReg’i okumadan önce, o iReg’e doğru değerin yazıldığından emin olun. Bazı durumlarda makroların çalışma sırası, bir değerin okunmasından önce güncellenmemesine neden olabilir. Makro tetikleme zamanlamalarını kontrol edin.
  • Sorun 3: Ondalıklı (float) bir değeri iReg’e kaydetmeye çalışıyorum ama sadece tamsayı kısmı kaydediliyor veya hata veriyor.

    Açıklama: iReg’ler yalnızca tamsayı değerleri depolayabilir. Doğrudan ondalıklı bir değer atamaya çalışmak, değeri kesebilir veya bir hata döndürebilir.

    Çözüm: Ondalıklı değeri, istenen hassasiyeti koruyacak şekilde bir tamsayıya dönüştürün. Örneğin, 1.2345 değerini 0.0001 hassasiyetle kaydetmek istiyorsanız, değeri 10000 ile çarpıp tamsayıya yuvarlayın (1.2345 * 10000 = 12345). Okurken ise bu tamsayıyı tekrar 10000’e bölün.

    -- Yazma
    local floatValue = 123.456
    local scaleFactor = 1000
    local intValue = math.floor(floatValue * scaleFactor + 0.5) -- Yuvarlama için 0.5 ekle
    mc.mcCntlSetiReg(inst, 50, intValue)
    
    -- Okuma
    local readIntValue = mc.mcCntlGetiReg(inst, 50)
    local readFloatValue = readIntValue / scaleFactor
  • Sorun 4: Lua makrom çalışmıyor veya mc.mcCntlSetiReg/mc.mcCntlGetiReg fonksiyon çağrısı bir hata döndürüyor.

    Açıklama: Bu genellikle Lua sözdizimi hataları, inst parametresinin doğru alınmaması veya Mach4 API çağrılarının yanlış kullanımından kaynaklanır.

    Çözüm:

    • Sözdizimi Kontrolü: Lua kodunuzda yazım hataları, eksik parantezler veya yanlış değişken adları olup olmadığını kontrol edin. Mach4’ün Lua konsolunda (Debug Console) hata mesajlarını dikkatlice inceleyin.
    • inst Parametresi: Her zaman local inst = mc.mcGetInstance() ile geçerli bir Mach4 örneği aldığınızdan emin olun. Bu olmadan API çağrıları başarısız olur.
    • API Parametreleri: regID‘nin 0-999 aralığında bir tamsayı, value‘nun ise bir tamsayı olduğundan emin olun. Yanlış veri tipleri veya aralık dışı ID’ler hatalara yol açar.
    • Makro Yolu ve İzinler: Makronuzun Mach4’ün doğru makro dizininde (genellikle Mach4Hobby/Macros) olduğundan ve Mach4’ün bu dosyaya erişim izinlerinin olduğundan emin olun.
  • Sorun 5: Makro çalışıyor gibi görünüyor ancak iReg değeri güncellenmiyor veya okunmuyor.

    Açıklama: Makronun gerçekten tetiklenip tetiklenmediği, doğru iReg ID’sinin kullanılıp kullanılmadığı veya değerin hemen ardından başka bir işlem tarafından ezilip ezilmediği gibi durumlar bu soruna yol açabilir.

    Çözüm:

    • Makro Tetikleyicisini Kontrol Edin: Makronuzun bir tuşa basıldığında, G kodu çağrısı ile (M kodu), döngüsel olarak veya bir ekran düğmesiyle doğru şekilde tetiklendiğinden emin olun.
    • Hata Ayıklama (Debug): Makronuzun içine mc.mcCntlLog("Makro çalıştı ve iReg'i ayarladı: " .. value) gibi log mesajları ekleyerek, kodun hangi noktalarına ulaşıldığını ve hangi değerlerin ayarlandığını Mach4’ün debug konsolundan takip edin.
    • iReg ID Doğrulaması: Yazma ve okuma işlemlerinde aynı iReg ID’sini kullandığınızdan emin olun. Küçük bir yazım hatası bile farklı bir iReg’e erişmenize neden olabilir.
    • Diğer Makroları Kontrol Edin: Aynı iReg ID’sini kullanan başka makroların olup olmadığını ve bunların değerleri ne zaman değiştirdiğini kontrol edin. Bir “yarış durumu” (race condition) olabilir.

Uzman Tavsiyesi

Mach4’te iRegs (Internal Registers) kullanımı, CNC otomasyon projelerinizi dinamik ve esnek hale getirmenin anahtarlarından biridir. Bu dahili kayıtlar, Mach4 kontrol yazılımı ile Lua makrolarınız arasında hızlı ve etkili bir veri köprüsü kurarak, makinenizin davranışını anlık olarak adapte etmenize, özel durumları takip etmenize ve karmaşık otomasyon senaryolarını hayata geçirmenize olanak tanır. Saha tecrübelerimiz, iReg’lerin doğru ve dikkatli kullanıldığında, operasyonel verimliliği artırdığını, hata oranlarını azalttığını ve operatörlerin iş akışını kolaylaştırdığını göstermektedir.

Uzman tavsiyesi olarak, iReg kullanımına başlarken öncelikle bir strateji belirlemeniz kritik öneme sahiptir. Hangi iReg ID’sini ne amaçla kullanacağınızı net bir şekilde tanımlayan, merkezi ve kolay erişilebilir bir dokümantasyon oluşturun. Bu dokümantasyon, iReg’in adı, amacı, beklenen değer aralığı, veri tipi dönüşüm mantığı (eğer ondalıklı sayılar kullanılıyorsa) ve kalıcılık durumu gibi bilgileri içermelidir. Bu sayede, gelecekteki geliştirmelerde veya sorun giderme süreçlerinde zaman kaybını minimize edersiniz ve olası ID çakışmalarının önüne geçersiniz.

İkinci olarak, veri kalıcılığı konusunu asla göz ardı etmeyin. Eğer bir iReg değeri Mach4 yeniden başlatıldığında korunması gereken kritik bir bilgi taşıyorsa, OEM_START ve OEM_END makrolarını kullanarak bu değerleri profilinize güvenli bir şekilde kaydetme ve geri yükleme mekanizmalarını titizlikle uygulayın. Bu, özellikle üretim adetleri, takım ömürleri veya makine ayar parametreleri gibi veriler için hayati öneme sahiptir. Ayrıca, bu kaydetme ve yükleme işlemlerini sadece teoride değil, gerçek dünya senaryolarında (örn. elektrik kesintisi simülasyonu) kapsamlı bir şekilde test edin.

Üçüncü olarak, hata yönetimi ve hata ayıklama pratiklerini benimseyin. Lua makrolarınızda mc.mcCntlLog() fonksiyonunu kullanarak önemli noktalara log mesajları ekleyin. Bu sayede, makronuzun hangi adımları izlediğini, iReg değerlerinin nasıl değiştiğini ve olası hataların nerede meydana geldiğini kolayca takip edebilirsiniz. Her zaman mc.mcCntlSetiReg() gibi fonksiyonların geri dönüş değerlerini kontrol ederek, bir işlemin başarılı olup olmadığını doğrulayın ve başarısızlık durumunda uygun hata mesajları veya alternatif eylemler tanımlayın.

Son olarak, iReg’ler karmaşık otomasyon görevleri için güçlü bir araç olsa da, makine güvenliği ile ilgili kritik fonksiyonları doğrudan iReg’ler aracılığıyla yönetmekten kaçının. Güvenlik, her zaman Mach4’ün dahili güvenlik mekanizmaları ve donanımsal güvenlik sistemleri tarafından sağlanmalıdır. iReg’leri program akışı, kullanıcı etkileşimi ve operasyonel veri yönetimi için akıllıca kullanarak, Mach4 tabanlı CNC sistemlerinizin potansiyelini tam olarak ortaya çıkarabilir ve endüstriyel otomasyon çözümlerinizi bir sonraki seviyeye taşıyabilirsiniz. Unutmayın, iyi yapılandırılmış, iyi dokümante edilmiş ve sağlam bir iReg stratejisi, başarılı bir Mach4 entegrasyonunun temelidir.

Yorum bırakın

Alışveriş Sepeti
⚙ Araçlar
Scroll to Top