Cnc Router imalatı

Mach4’te Screen Load Script İçine Hangi Global Değişkenler ve Fonksiyonlar Yazılmalıdır?

9 dk okuma Mermak CNC Teknik İçerik
Mach4’te Screen Load Script İçine Hangi Global Değişkenler ve Fonksiyonlar Yazılmalıdır?
İçindekiler
  1. Mach4’te Screen Load Script İçine Hangi Global Değişkenler ve Fonksiyonlar Yazılmalıdır? Nedir?
  2. Çalışma Prensibi ve Teknik Veriler
  3. Global Değişkenlerin Kullanımı
  4. Fonksiyonların Kullanımı
  5. Sahada Dikkat Edilmesi Gerekenler
  6. Sık Karşılaşılan Sorunlar ve Çözümleri
  7. Uzman Tavsiyesi

Mach4’te Screen Load Script içine global değişkenler ve fonksiyonlar yazmak, kullanıcı arayüzünü başlatmak, dinamik verileri yüklemek ve ekranlar arası tutarlı bir davranış sağlamak için kritik öneme sahiptir. Özellikle mc.mcCntlSetVar() ve mc.mcCntlGetVar() gibi Mach4 API fonksiyonları, kalıcı global değişkenler oluşturmak için kullanılırken, özel Lua fonksiyonları UI elemanlarını yapılandırmak ve olayları yönetmek için vazgeçilmezdir. Bu script, ekranın her yüklendiğinde çalışarak gerekli başlangıç ayarlarını yapar.

Mach4’te Screen Load Script İçine Hangi Global Değişkenler ve Fonksiyonlar Yazılmalıdır? Nedir?

 

Mach4, endüstriyel otomasyon ve CNC kontrol sistemlerinde yaygın olarak kullanılan güçlü ve esnek bir kontrol yazılımıdır. Kullanıcı arayüzünün (UI) dinamik ve interaktif olmasını sağlamak için Lua scripting dilini kullanır. Bir ekran (screen) yüklendiğinde, Mach4 bu ekrana özel olarak tanımlanmış bir “Screen Load Script” dosyasını çalıştırır. Bu script, ekranın ilk açılış anında yapılması gereken tüm başlatma, veri yükleme ve UI yapılandırma işlemlerini gerçekleştirmek için ideal bir ortam sunar.

Screen Load Script içine yazılan global değişkenler ve fonksiyonlar, ekranın ve hatta tüm Mach4 oturumunun davranışını şekillendiren temel yapı taşlarıdır. Global değişkenler, farklı scriptler veya ekranlar arasında veri paylaşımını mümkün kılar. Örneğin, bir ayar ekranında belirlenen bir tolerans değeri, tüm diğer operasyonel ekranlarda kullanılabilir hale getirilebilir. Fonksiyonlar ise, belirli görevleri yerine getiren kod bloklarıdır. UI elemanlarının durumunu güncellemek, sensör verilerini okumak, Mach4 çekirdeği ile etkileşim kurmak veya karmaşık hesaplamalar yapmak gibi tekrarlayan veya modüler işlemleri organize etmek için kullanılırlar.

Bu scriptin temel amacı, kullanıcının ekranla etkileşime geçmeden önce her şeyin doğru bir şekilde ayarlandığından emin olmaktır. Bu, hem kullanıcı deneyimini iyileştirir hem de makine kontrolünün güvenilirliğini artırır. Script içinde tanımlanan bu elemanlar, Mach4’ün sunduğu API (Uygulama Programlama Arayüzü) ile entegre bir şekilde çalışarak, makine durumunu sorgulama, G kodu gönderme veya eksen pozisyonlarını okuma gibi çekirdek işlevlere erişim sağlar.

Çalışma Prensibi ve Teknik Veriler

Mach4’teki Screen Load Script, ilgili ekran dosyası (.set veya .mc4) yüklendiğinde otomatik olarak yürütülen bir Lua betiğidir. Bu betik, ekranın görsel bileşenleri tamamen oluşturulmadan önce çalışır, bu da ona UI elemanlarını önceden yapılandırma ve başlangıç verilerini yükleme yeteneği verir. Çalışma prensibi, bir web sayfasının JavaScript’inin DOM (Belge Nesne Modeli) yüklenmeden önce çalışmasına benzer, ancak burada kontrol edilen bir CNC makinesinin arayüzüdür.

Mach4’te Screen Load Script İçine Hangi Global Değişkenler ve Fonksiyonlar Yazılmalıdır?

Global Değişkenlerin Kullanımı

Mach4’te iki ana tür global değişken mekanizması vardır:

  1. Lua’nın Kendi Global Kapsamı (`_G`): Bir Screen Load Script içinde doğrudan tanımlanan değişkenler, o ekranın Lua ortamında globaldir. Yani, aynı ekran içindeki diğer scriptler (örneğin bir düğme scripti) bu değişkenlere erişebilir. Ancak, farklı bir ekrana geçildiğinde bu değişkenler genellikle kaybolur, çünkü her ekranın kendi Lua ortamı yeniden oluşturulabilir. Örnek: _G.myScreenSpecificVar = 100
  2. Mach4 Kontrol Değişkenleri (`mc.mcCntlSetVar`, `mc.mcCntlGetVar`): Bu API fonksiyonları, Mach4’ün çekirdeğinde kalıcı olarak saklanan ve tüm Mach4 oturumu boyunca erişilebilen global değişkenler oluşturmak için kullanılır. Bu değişkenler, ekranlar arasında veri paylaşımı yapmak ve hatta Mach4’ün yeniden başlatılmasından sonra bile değerlerini korumak için idealdir (eğer kalıcı olarak kaydedilmişse). inst parametresi, Mach4’ün aktif kontrolör örneğini temsil eden bir handle’dır ve bu fonksiyonlarla birlikte her zaman kullanılmalıdır.

Örnek Global Değişken Kullanımları:

  • Bir sensörün kalibrasyon değeri: mc.mcCntlSetVar(inst, "SensorCalibrationOffset", 0.5)
  • Aktif takım numarası: mc.mcCntlSetVar(inst, "CurrentToolNumber", 1)
  • Kullanıcı tercihiyle belirlenmiş bir hız limiti: mc.mcCntlSetVar(inst, "UserSpeedLimit", 800)
  • Ekranın başlangıç durumunu belirten bir bayrak: _G.isScreenInitialized = true
Mach4’te Screen Load Script İçine Hangi Global Değişkenler ve Fonksiyonlar Yazılmalıdır?

Fonksiyonların Kullanımı

Screen Load Script içinde tanımlanan Lua fonksiyonları, UI bileşenlerini dinamik olarak yönetmek ve Mach4’ün çekirdek işlevleriyle etkileşim kurmak için kullanılır. Bu fonksiyonlar, scriptin okunabilirliğini ve bakımını kolaylaştırır. Fonksiyonlar genellikle şu amaçlarla yazılır:

  • UI Elemanlarını Başlatma ve Güncelleme: Bir etiketin metnini ayarlamak, bir düğmenin durumunu değiştirmek veya bir ilerleme çubuğunu güncellemek gibi. Mach4’ün screen ve wx (wxWidgets entegrasyonu) API’leri bu tür işlemler için kullanılır. Örnek: screen.setLabelText("lblStatus", "Makine Hazır") veya wx.wx.FindWindowByName("btnStart"):Enable(true)
  • Veri Çekme ve Görüntüleme: Makine pozisyonlarını, hızlarını, G kodu durumunu veya diğer Mach4 parametrelerini çekip UI’da görüntülemek. Örnek: local xPos = mc.mcAxisGetPos(inst, mc.X_AXIS)
  • Olay İşleyicileri Kaydetme: Düğme tıklamaları, slider değişiklikleri veya klavye girişleri gibi kullanıcı etkileşimlerine yanıt vermek için fonksiyonları UI elemanlarına bağlamak. wx.wxButton:Connect(wx.wxEVT_COMMAND_BUTTON_CLICKED, myButtonClickHandler)
  • Karmaşık Mantık ve Hesaplamalar: Daha karmaşık iş akışlarını veya özel hesaplamaları içeren modüler kod blokları oluşturmak.

Örnek Fonksiyon Tanımlamaları:


function InitializeUI()
    local inst = mc.mcGetInstance()
    screen.setLabelText("lblStatus", "Sistem Başlatılıyor...")
    wx.wx.FindWindowByName("btnStart"):Enable(false)
    local currentTool = mc.mcCntlGetVar(inst, "CurrentToolNumber")
    screen.setLabelText("lblToolInfo", "Aktif Takım: " .. currentTool)
end

function UpdateMachineStatus()
    local inst = mc.mcGetInstance()
    local xPos = mc.mcAxisGetPos(inst, mc.X_AXIS)
    local yPos = mc.mcAxisGetPos(inst, mc.Y_AXIS)
    screen.setLabelText("lblCurrentPos", string.format("X: %.3f Y: %.3f", xPos, yPos))
end

-- Screen Load Script içinde çağrı
InitializeUI()
-- Bir timer ile düzenli güncelleme için UpdateMachineStatus() fonksiyonunu bağlayabilirsiniz.
Parametre/FonksiyonDeğer/Açıklama
mc.mcCntlSetVar(inst, "Ad", Değer)Mach4 çekirdeğinde kalıcı bir global değişken tanımlar veya günceller. Ekranlar arası ve oturumlar arası veri paylaşımı için kullanılır.
mc.mcCntlGetVar(inst, "Ad")Mach4 çekirdeğinde tanımlı bir global değişkenin değerini okur.
_G.myVar = DeğerMevcut Lua ortamında (genellikle ekran bazında) global bir değişken tanımlar. Ekran değişiminde kaybolabilir.
function MyFunction() ... endScreen Load Script içinde tanımlanan özel Lua fonksiyonu. UI başlatma, veri işleme, olay yönetimi için kullanılır.
screen.setLabelText("ID", "Metin")Belirtilen ID’ye sahip bir etiketin (label) metnini ayarlar. UI güncellemeleri için temel fonksiyondur.
wx.wx.FindWindowByName("ID"):Enable(Durum)Belirtilen ID’ye sahip UI elemanını (örn. düğme) etkinleştirir veya devre dışı bırakır.
wx.wxButton:Connect(wx.wxEVT_COMMAND_BUTTON_CLICKED, Fonksiyon)Bir UI elemanına (örn. düğme) belirli bir olay (örn. tıklama) için bir olay işleyici fonksiyonu bağlar.
Mach4’te Screen Load Script İçine Hangi Global Değişkenler ve Fonksiyonlar Yazılmalıdır?

Sahada Dikkat Edilmesi Gerekenler

  • Performans Optimizasyonu: Screen Load Script, ekranın her yüklendiğinde çalışır. Bu nedenle, scriptin içinde ağır ve zaman alıcı işlemlerden kaçınılmalıdır. Veritabanı sorguları veya karmaşık hesaplamalar gibi işlemler, ekranın yüklenmesini geciktirerek kullanıcı deneyimini olumsuz etkileyebilir. Mümkünse, bu tür işlemleri ayrı bir Lua modülüne taşıyın veya sadece gerektiğinde çağırın.
  • Hata Yönetimi ve Sağlamlık: Endüstriyel ortamlarda, script hataları makinenin durmasına veya beklenmedik davranışlara yol açabilir. Bu nedenle, script içinde potansiyel hata kaynaklarını (örn. API çağrıları, dosya okuma/yazma) pcall() ile sarmalamak ve hataları uygun şekilde yakalayıp loglamak önemlidir. Kullanıcıya net geri bildirimler sunarak sorun giderme sürecini kolaylaştırın.
  • Kapsam (Scope) Yönetimi: Lua’daki lokal ve global değişken kapsamını iyi anlamak hayati önem taşır. _G ile tanımlanan global değişkenler genellikle sadece o ekranın Lua ortamında geçerlidir. Ekranlar arası veri kalıcılığı için mc.mcCntlSetVar() ve mc.mcCntlGetVar() kullanmak en doğru yaklaşımdır. Yanlış kapsam yönetimi, beklenmedik veri kayıplarına veya hatalı makine davranışlarına neden olabilir.
  • Modüler ve Okunabilir Kod: Büyük ve karmaşık scriptleri küçük, yönetilebilir fonksiyonlara bölmek, kodun okunabilirliğini, bakımını ve hata ayıklamasını kolaylaştırır. Her fonksiyonun belirli bir görevi yerine getirmesini sağlayın. Yorum satırları ekleyerek kodunuzun ne yaptığını açıklayın.
  • Versiyon Kontrolü ve Yedekleme: Screen Load Script’ler ve diğer Mach4 yapılandırma dosyaları, kritik sistem bileşenleridir. Bu dosyaları bir versiyon kontrol sistemi (örn. Git) kullanarak yönetmek veya düzenli olarak yedeklemek, olası veri kayıplarını veya yanlışlıkla yapılan değişiklikleri geri almanıza olanak tanır.
  • UI Güncellemeleri ve Thread Güvenliği: Mach4’ün UI’si genellikle ana iş parçacığında çalışır. Arka plan iş parçacıklarından (örn. bir timer veya harici bir olay) UI elemanlarını güncellemeye çalışırken wx.wx.CallAfter() gibi fonksiyonları kullanmak, thread güvenliği sorunlarını ve UI kilitlenmelerini önler.
  • Güvenlik ve Yetkilendirme: Scriptler aracılığıyla makine parametrelerini veya hassas ayarları değiştirmeden önce, ilgili kullanıcının gerekli yetkilere sahip olup olmadığını kontrol etmek önemlidir. Yanlışlıkla veya kötü niyetli müdahaleleri önlemek için yetkilendirme mekanizmalarını kullanın.
Mach4’te Screen Load Script İçine Hangi Global Değişkenler ve Fonksiyonlar Yazılmalıdır?

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

Endüstriyel otomasyon ortamlarında Mach4 Screen Load Script’leri ile çalışırken karşılaşılabilecek bazı yaygın sorunlar ve bu sorunlara yönelik çözüm önerileri aşağıda listelenmiştir:

  • Sorun: Ekranlar Arasında Değişken Değerlerinin Kaybolması.

    Açıklama: Bir ekranda ayarlanan bir değişkenin, başka bir ekrana geçildiğinde veya aynı ekran yeniden yüklendiğinde değerini kaybetmesi. Bu genellikle _G.myVar gibi Lua’nın yerel global kapsamındaki değişkenlerin kullanılması durumunda meydana gelir.

    Çözüm: Ekranlar arası kalıcılık gerektiren tüm değişkenler için mc.mcCntlSetVar(inst, "DeğişkenAdı", Değer) ve mc.mcCntlGetVar(inst, "DeğişkenAdı") fonksiyonlarını kullanın. Bu fonksiyonlar, Mach4’ün çekirdeğinde depolanan ve tüm oturum boyunca erişilebilen global kontrol değişkenleri oluşturur.

  • Sorun: Script Hataları Nedeniyle Ekranın Yüklenememesi veya Makinenin Donması.

    Açıklama: Screen Load Script içinde bir sözdizimi hatası veya çalışma zamanı hatası bulunması, ekranın düzgün yüklenememesine veya tüm Mach4 uygulamasının yanıt vermemesine neden olabilir.

    Çözüm: Scripti küçük parçalara ayırarak ve her bir parçayı ayrı ayrı test ederek başlayın. Potansiyel hata olabilecek kritik kod bloklarını pcall() ile sarmalayarak hataları yakalayın ve mc.mcCntlLog() veya mc.mcCntlLogInfo() gibi Mach4 loglama fonksiyonlarıyla hata mesajlarını kaydedin. Mach4’ün “Diagnostics” ekranındaki “Lua Output” veya “Scripting” sekmesini kontrol ederek hata mesajlarını inceleyin. Geliştirme sürecinde “Mach4 Developer” modunu etkinleştirmek de faydalı olabilir.

  • Sorun: UI Elemanlarının Beklendiği Gibi Güncellenmemesi veya Etkileşim Kurmaması.

    Açıklama: Script çalışmasına rağmen bir etiketin metninin değişmemesi, bir düğmenin etkinleşmemesi veya bir olayın tetiklenmemesi.

    Çözüm: Öncelikle, UI elemanının doğru ID’ye (Name) sahip olduğundan ve script içinde doğru şekilde referans verildiğinden emin olun (örn. screen.setLabelText("lblDurum", "Hazır")). Eğer UI elemanı dinamik olarak oluşturuluyorsa veya farklı bir Lua ortamından erişiliyorsa, wx.wx.FindWindowByName("ID") kullanarak doğru referansı alın. Olay işleyiciler için :Connect() metodunun doğru parametrelerle çağrıldığından ve olay türünün doğru olduğundan emin olun.

  • Sorun: Screen Load Script’in Performans Yavaşlığı ve Ekranın Gecikmeli Yüklenmesi.

    Açıklama: Screen Load Script içinde çok fazla hesaplama, dosya okuma/yazma veya ağ işlemi yapılması nedeniyle ekranın yüklenmesinin uzun sürmesi.

    Çözüm: Scripti optimize edin. Yalnızca ekranın ilk gösterimi için kesinlikle gerekli olan işlemleri Screen Load Script’e dahil edin. Daha uzun süreli işlemleri, ekran yüklendikten sonra bir mc.mcCntlSetTimer() ile periyodik olarak veya bir düğme tıklaması gibi kullanıcı etkileşimiyle tetiklenen ayrı fonksiyonlara taşıyın. Gereksiz döngülerden ve tekrar eden API çağrılarından kaçının.

  • Sorun: Global Değişken Adı Çakışmaları.

    Açıklama: Farklı scriptler veya ekranlar arasında aynı global değişken adının kullanılması, beklenmedik değerlerin üzerine yazılmasına veya yanlış verilerin kullanılmasına neden olabilir.

    Çözüm: Global değişken adlandırma konusunda tutarlı ve benzersiz bir strateji benimseyin. Örneğin, değişken adlarının önüne ilgili modül veya ekran adını ekleyerek (örn. “EkranAdi_DegiskenAdi”) çakışmaları önleyebilirsiniz. Karmaşık sistemlerde, değişkenleri mantıksal gruplara ayırmak ve her grubun kendi ön ekini kullanmak da iyi bir yaklaşımdır.

Uzman Tavsiyesi

Mach4’teki Screen Load Script’ler, endüstriyel otomasyon ve CNC kontrol sistemlerinin kullanıcı arayüzlerini dinamik, etkileşimli ve işlevsel hale getiren temel bileşenlerdir. Bu scriptler aracılığıyla tanımlanan global değişkenler ve fonksiyonlar, ekranların başlangıç durumunu yapılandırmak, makine verilerini yüklemek ve kullanıcı etkileşimlerine yanıt vermek için güçlü bir mekanizma sunar. Özellikle mc.mcCntlSetVar() ve mc.mcCntlGetVar() gibi Mach4 API fonksiyonları, farklı ekranlar ve oturumlar arasında kalıcı veri paylaşımını mümkün kılarak sistemin bütünlüğünü ve tutarlılığını sağlar. Öte yandan, özel Lua fonksiyonları, UI elemanlarını başlatma, olayları yönetme ve karmaşık iş mantığını uygulama konusunda esneklik sunar.

Bir uzman olarak tavsiyem, Screen Load Script’leri tasarlarken daima modülerlik, okunabilirlik ve performans odaklı bir yaklaşım benimsemektir. Her scriptin belirli, iyi tanımlanmış görevleri yerine getirmesini sağlayın ve ağır işlemleri mümkün olduğunca erteleyin veya arka plan süreçlerine taşıyın. Hata yönetimi, endüstriyel ortamlarda kritik öneme sahiptir; bu nedenle, potansiyel sorunları önlemek ve hızlı bir şekilde çözmek için kapsamlı hata yakalama mekanizmaları kullanın. Ayrıca, tüm script ve yapılandırma dosyalarını düzenli olarak yedeklemek ve versiyon kontrolü altında tutmak, uzun vadeli bakım ve güvenilirlik açısından vazgeçilmezdir. Mach4’ün geniş API dokümantasyonunu düzenli olarak incelemek ve topluluk kaynaklarından faydalanmak, karşılaşılan zorlukların üstesinden gelmek ve sisteminizi sürekli geliştirmek için size rehberlik edecektir. Doğru tasarlanmış ve optimize edilmiş Screen Load Script’ler, Mach4 tabanlı CNC makinelerinizin verimliliğini, güvenliğini ve kullanıcı dostluğunu önemli ölçüde artıracaktır.

⚙ Araçlar