Cnc Router imalatı

Mach4’te Screen Load Script ile PLC Script Arasında Global Fonksiyon Paylaşımı Nasıl Yapılır?

8 dk okuma Mermak CNC Teknik İçerik
Mach4’te Screen Load Script ile PLC Script Arasında Global Fonksiyon Paylaşımı Nasıl Yapılır?
İçindekiler
  1. Mach4’te Screen Load Script ile PLC Script Arasında Global Fonksiyon Paylaşımı Nasıl Yapılır? Nedir?
  2. Çalışma Prensibi ve Teknik Veriler
  3. Sahada Dikkat Edilmesi Gerekenler
  4. Sık Karşılaşılan Sorunlar ve Çözümleri
  5. Uzman Tavsiyesi

Mach4’te Screen Load Script ile PLC Script arasında global fonksiyon paylaşımı, Lua’nın _G (global) tablosunu kullanarak gerçekleştirilir. Screen Load Script içinde tanımlanan bir fonksiyonu _G.fonksiyonAdı = function(...) ... end şeklinde global alana ekleyerek, ekran yüklendiğinde bu fonksiyonun PLC Script de dahil olmak üzere diğer tüm scriptlerden erişilebilir olmasını sağlayabilirsiniz.

Mach4’te Screen Load Script ile PLC Script Arasında Global Fonksiyon Paylaşımı Nasıl Yapılır? Nedir?

 

Endüstriyel otomasyon sistemlerinde, özellikle CNC kontrol yazılımları gibi karmaşık uygulamalarda, farklı scriptler arasında fonksiyon veya veri paylaşımı kritik bir gereksinimdir. Mach4, Lua tabanlı güçlü bir scriptleme motoru sunarak bu tür ihtiyaçları karşılar. Screen Load Script, belirli bir ekran yüklendiğinde çalışan özel bir scripttir. Bu script, genellikle kullanıcı arayüzü (GUI) elemanlarını başlatmak, başlangıç değerlerini ayarlamak veya ekrana özgü işlevleri tanımlamak için kullanılır. Öte yandan, PLC Script (veya Runtıme Script), Mach4 çalışırken sürekli olarak veya belirli aralıklarla arka planda çalışan, makine mantığını, güvenlik kontrollerini ve otomasyon görevlerini yöneten ana scriptlerden biridir. Bu iki farklı script türü arasında ortak bir işlevselliği paylaşmak gerektiğinde, Lua’nın global ortam mekanizması olan _G tablosu devreye girer. Bu yöntem, bir fonksiyona veya değişkene sistem genelinde erişim sağlayarak kod tekrarını önler, modülerliği artırır ve daha yönetilebilir bir otomasyon altyapısı oluşturur.

Çalışma Prensibi ve Teknik Veriler

Mach4’teki scriptler, Lua sanal makinesi (VM) içinde çalışır. Lua, varsayılan olarak her scriptin kendi lokal ortamına sahip olmasını sağlarken, aynı zamanda _G adında özel bir global tablo sunar. Bu tablo, tüm scriptler tarafından erişilebilen ve üzerinde değişiklik yapılabilen tek ortak alandır. Mach4 ortamında, bir ekran yüklendiğinde çalışan Screen Load Script, PLC Script’ten önce, ilgili ekran etkinleştirildiğinde bir kez yürütülür. Bu kritik sıralama, Screen Load Script’in global bir fonksiyonu tanımlaması ve bu fonksiyonun daha sonra sürekli çalışan PLC Script tarafından çağrılabilir hale gelmesi için temel oluşturur.

Çalışma prensibi oldukça basittir: Screen Load Script içinde, paylaşılmak istenen fonksiyonu _G tablosuna bir anahtar (fonksiyon adı) ve bir değer (fonksiyonun kendisi) olarak atarsınız. Örneğin:

-- Screen Load Script içinde
_G.MakineDurumuKontrolEt = function()
    local plcStatus = mc.mcCntlGetState(mc.MCNTL_NOERROR)
    if plcStatus == mc.MCNTL_RUN then
        mc.mcCntlSetLastError("Makine Çalışıyor")
        return true
    else
        mc.mcCntlSetLastError("Makine Durdu")
        return false
    end
end

_G.HataKoduGoster = function(errorCode)
    mc.mcCntlSetLastError("Hata: " .. tostring(errorCode))
    util.Notify("Hata", "Sistem Hatası: " .. tostring(errorCode), mc.MCNTL_ERROR)
end

Yukarıdaki örnekte, MakineDurumuKontrolEt ve HataKoduGoster adında iki fonksiyon _G tablosuna eklenmiştir. Bu ekran yüklendiğinde, bu fonksiyonlar Mach4’ün global ortamında bulunur. Artık, PLC Script’inizde veya başka herhangi bir Mach4 scriptinde bu fonksiyonları doğrudan çağırabilirsiniz:

-- PLC Script içinde
local isRunning = _G.MakineDurumuKontrolEt() -- Global fonksiyonu çağır
if not isRunning then
    _G.HataKoduGoster(101) -- Global hata fonksiyonunu çağır
    -- Makine durmuşsa ek işlemler yap
end

-- Veya doğrudan _G ön eki olmadan da çağrılabilir, çünkü _G varsayılan global ortamdır.
local isRunning = MakineDurumuKontrolEt()
if not isRunning then
    HataKoduGoster(101)
end

Bu yaklaşım, özellikle karmaşık makine durumlarını izleyen, belirli arayüz etkileşimlerine dayalı kararlar alan veya kullanıcıdan gelen girdilere göre özel işlemler gerçekleştiren sistemlerde büyük avantaj sağlar. Örneğin, bir kullanıcı arayüzü düğmesine basıldığında (Screen Load Script ile ilişkili bir olay), bir global fonksiyonu tetikleyebilir ve bu fonksiyon PLC Script’in döngüsünde anında işlenebilir.

ParametreDeğer/Açıklama
Script Türü (Tanımlayıcı)Screen Load Script
Script Türü (Çağırıcı)PLC Script, M-Kod Script, G-Kod Script, Button Script vb.
Paylaşım MekanizmasıLua’nın _G (Global Environment) tablosu
Fonksiyon Tanımlama Şekli_G.fonksiyonAdı = function(parametreler) ... end
Fonksiyon Çağırma Şekli_G.fonksiyonAdı(argümanlar) veya fonksiyonAdı(argümanlar)
Yürütme SırasıScreen Load Script, ilgili ekran yüklendiğinde bir kez çalışır; PLC Script ise sürekli döngüde çalışır.
AmaçKod tekrarını önleme, modülerlik, merkezi işlevsellik, karmaşık otomasyon mantığı yönetimi.
Mach4’te Screen Load Script ile PLC Script Arasında Global Fonksiyon Paylaşımı Nasıl Yapılır?

Sahada Dikkat Edilmesi Gerekenler

  • Yürütme Sırası ve Bağımlılıklar: En kritik nokta, global fonksiyonu tanımlayan Screen Load Script’in, fonksiyonu kullanmaya çalışan PLC Script veya diğer scriptlerden *önce* çalışmış olması gerektiğidir. Eğer bir PLC Script, ilgili ekran yüklenmeden önce global bir fonksiyonu çağırmaya kalkarsa, “attempt to call nil value” (nil değeri çağırma girişimi) hatası alacaktır. Bu durumu yönetmek için, PLC Script içinde fonksiyon çağrısından önce bir kontrol mekanizması eklemek (if _G.fonksiyonAdı then ... end) iyi bir pratiktir.
  • Hata Yönetimi ve Sağlamlık: Global fonksiyonlar aracılığıyla paylaşılan kod parçacıklarında kapsamlı hata kontrolü ve istisna yönetimi uygulamak önemlidir. Fonksiyonun beklenen parametreleri alıp almadığını, döndürdüğü değerlerin geçerli olup olmadığını kontrol etmek, sistemin genel sağlamlığını artırır. Ayrıca, fonksiyon içinde meydana gelen hataları Mach4’ün log sistemine kaydetmek veya kullanıcıya bildirim olarak göstermek, sorun giderme süreçlerini kolaylaştırır.
  • İsimlendirme Standartları ve Çakışmalar: Global ortamda tanımlanan tüm fonksiyon ve değişkenler, Mach4’ün kendi dahili fonksiyonları veya diğer yüklü eklentilerin fonksiyonlarıyla potansiyel olarak çakışabilir. Benzersiz ve açıklayıcı isimlendirme standartları (örneğin, şirket_modül_fonksiyonAdı) kullanarak bu tür çakışmaları önlemek esastır. Global alanda gereksiz yere çok fazla öğe tanımlamaktan kaçınmak da performansı ve yönetilebilirliği olumlu etkiler.
  • Performans Etkisi: Global fonksiyonlar, genellikle lokal fonksiyonlara kıyasla çok küçük bir performans farkına sahip olsa da, özellikle PLC Script gibi yüksek frekansta çalışan scriptlerde, çok karmaşık veya döngüsel global fonksiyonların aşırı kullanımı sistemin genel performansını etkileyebilir. Fonksiyonların verimli bir şekilde yazıldığından ve gereksiz hesaplamalar içermediğinden emin olunmalıdır.
  • Modülerlik ve Bakım Kolaylığı: Global fonksiyon paylaşımı, kodun modülerliğini artırır. Ortak kullanılan işlevleri tek bir yerde (örneğin, belirli bir ekranın Screen Load Script’inde) tanımlayarak, bu işlevlerde yapılacak değişikliklerin sistem genelinde kolayca uygulanabilmesini sağlar. Bu, büyük ve karmaşık otomasyon projelerinde bakım ve güncelleme süreçlerini basitleştirir.
  • Güvenlik Hususları: Global ortamda tanımlanan fonksiyonlar, sistemin her yerinden erişilebilir olduğundan, güvenlik açısından kritik işlemleri (örneğin, makine hareketini doğrudan tetikleme, kritik parametreleri değiştirme) içeren fonksiyonları global olarak tanımlarken dikkatli olunmalıdır. Bu tür fonksiyonların yetkisiz erişimini veya yanlış kullanımını önlemek için ek kontrol mekanizmaları veya kullanıcı yetkilendirme doğrulama adımları eklemek gerekebilir.
Mach4’te Screen Load Script ile PLC Script Arasında Global Fonksiyon Paylaşımı Nasıl Yapılır?

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

Mach4’te global fonksiyon paylaşımı yaparken karşılaşılabilecek bazı yaygın sorunlar ve bunların çözümleri şunlardır:

  • Sorun: “attempt to call a nil value” Hatası

    Açıklama: PLC Script, global bir fonksiyonu çağırmaya çalışıyor ancak bu fonksiyon henüz _G tablosunda tanımlanmamış. Bu genellikle ilgili Screen Load Script’in henüz çalışmadığı (yani ekranın yüklenmediği) durumlarda meydana gelir.

    Çözüm: PLC Script içinde fonksiyon çağrısından önce bir kontrol mekanizması ekleyin. Örneğin:

    if _G.MakineDurumuKontrolEt then
        local isRunning = _G.MakineDurumuKontrolEt()
        -- İşlemler...
    else
        mc.mcCntlSetLastError("Hata: MakineDurumuKontrolEt fonksiyonu yüklenmedi.")
    end

    Bu, fonksiyonun varlığını doğrulayarak hatanın önüne geçer. Ayrıca, sistem başlatıldığında her zaman erişilebilir olması gereken kritik global fonksiyonları, Mach4’ün ana başlangıç scriptinde (Initialisation Script) tanımlamayı düşünebilirsiniz.

  • Sorun: Fonksiyon Beklendiği Gibi Çalışmıyor veya Yanlış Sonuçlar Veriyor

    Açıklama: Fonksiyon tanımlı ancak yanlış parametrelerle çağrılıyor, iç mantığında bir hata var veya global değişkenlerle çakışma yaşıyor.

    Çözüm:

    1. Parametre Kontrolü: Fonksiyonun beklediği parametreleri doğru tip ve sayıda alıp almadığını kontrol edin. Fonksiyon içinde parametrelerin geçerliliğini doğrulamak için kontroller ekleyin.
    2. Hata Ayıklama (Debugging): Fonksiyon içine print() ifadeleri ekleyerek veya Mach4’ün kendi hata ayıklama araçlarını kullanarak fonksiyonun adım adım nasıl çalıştığını izleyin.
    3. Global Değişken Çakışmaları: Fonksiyon içinde kullanılan lokal değişkenlerin, global değişkenlerle aynı isimde olmamasına dikkat edin. Gerektiğinde local anahtar kelimesini kullanarak değişkenleri lokal olarak tanımlayın.
  • Sorun: Performans Düşüşü

    Açıklama: PLC Script’te çağrılan global fonksiyonun çok sık çalışması veya içinde karmaşık, zaman alıcı işlemler barındırması nedeniyle Mach4’ün genel performansı düşüyor.

    Çözüm:

    1. Optimizasyon: Global fonksiyonun içindeki kodu optimize edin. Gereksiz döngülerden, ağır matematiksel işlemlerden veya dosya/ağ erişimlerinden kaçının.
    2. Sıklık Kontrolü: PLC Script içinde global fonksiyonu her döngüde çağırmak yerine, yalnızca belirli koşullar karşılandığında veya belirli bir zaman aralığı geçtiğinde çağıracak mantıklar ekleyin. Örneğin, bir sayaç kullanarak her 100 milisaniyede bir çalıştırma gibi.
    3. Asenkron İşlem: Mümkünse, uzun süren işlemleri doğrudan global fonksiyonda yapmak yerine, Mach4’ün sağladığı olay tabanlı mekanizmaları veya düşük öncelikli ayrı bir scripti kullanarak asenkron olarak çalıştırmayı değerlendirin.

Uzman Tavsiyesi

Mach4’te Screen Load Script ile PLC Script arasında global fonksiyon paylaşımı, endüstriyel otomasyon sistemlerinde kod modülerliğini, yeniden kullanılabilirliği ve genel sistem yönetilebilirliğini önemli ölçüde artıran güçlü bir yöntemdir. Lua’nın _G tablosunu kullanarak, bir ekran yüklendiğinde tanımlanan kritik işlevleri, sürekli çalışan PLC Script’in kullanımına sunabiliriz. Bu, özellikle karmaşık makine durumlarının izlenmesi, kullanıcı arayüzü etkileşimlerine dayalı dinamik makine davranışları veya merkezi hata yönetimi gibi senaryolarda vazgeçilmez bir yaklaşımdır. Uzmanlar olarak, bu tekniği uygularken dikkatli bir planlama ve sağlam mühendislik prensiplerinin benimsenmesini tavsiye ediyoruz. Öncelikle, fonksiyonların amacını ve beklenen davranışlarını açıkça belgelemek, olası çakışmaları önlemek için tutarlı isimlendirme standartları kullanmak hayati öneme sahiptir. Ayrıca, PLC Script gibi sürekli çalışan scriptlerde global fonksiyonları çağırırken, fonksiyonun varlığını her zaman kontrol etmek (if _G.myFunction then ... end) ve olası hata durumlarını yönetmek, sistemin sağlamlığını artıracaktır. Performans üzerindeki potansiyel etkileri göz önünde bulundurarak, global fonksiyonların içinde karmaşık veya zaman alıcı işlemlerden kaçınmak, veya bu tür işlemleri yalnızca gerektiğinde ve kontrollü bir şekilde tetiklemek önemlidir. Son olarak, bu mekanizmanın sağladığı esnekliği kullanarak, Mach4 tabanlı otomasyon projelerinizde daha temiz, daha sürdürülebilir ve daha ölçeklenebilir bir kod yapısı oluşturabilirsiniz. Bu sayede, makine kontrolünüz daha dinamik, arıza tespiti daha kolay ve sisteminiz daha güvenilir hale gelecektir.

⚙ Araçlar