CoDeSys yazılımında zamanlama ve çizelgeleme nasıl yapılır?

CoDeSys yazılımında zamanlama ve çizelgeleme nasıl yapılır?

Bekleme süresini ve programın çalışma ritmini doğru ayırın

Herkese selamlar, CODESYS içinde zamanlama iki temel ihtiyacı karşılar: bir işlemi belirli süre geciktirmek ve programların ne zaman çalışacağını düzenlemek. TON, TOF ve TP ilk ihtiyaca; Task Configuration ikinci ihtiyaca hizmet eder. IEC 61131-3 programlama yaklaşımında zamanlayıcı, görevi durdurup bekletmek yerine her çağrıda durumunu günceller. Aşağıdaki anlatım CODESYS V3 içindir.

1. Görev çevrimini yapılandırın

Projenizde Application altındaki Task Configuration nesnesini açın. MainTask veya eklediğiniz görevde Type: Cyclic seçip Interval alanına örneğin T#10ms yazın. Add Call ile çalışacak PROGRAM nesnesini ekleyin. Birden fazla program çağrısı varsa listede yukarıdan aşağıya yürütülür; fonksiyon blokları bu programların içinden çağrılır.

10 ms, görevin hedef tekrar aralığıdır; programın mutlaka 10 ms boyunca çalışacağı anlamına gelmez. PLC programının yürütme süresi, bu aralık içinde tamamlanabilecek şekilde değerlendirilmelidir. Kontrolör kapasitesi, I/O güncellemesi ve haberleşme yükü de hesaba katılır. Yazılımın görev araçları donanımın fiziksel sınırlarını ortadan kaldırmaz.

2. Görev türünü uygulamaya göre seçin

Cyclic, belirlenmiş aralıklarla tekrarlanır. Event, tanımlı BOOL olay değişkeninin FALSE’tan TRUE’ya geçişiyle tetiklenir. Status, koşul TRUE olduğu sürece çalışmaya uygundur; tek işlem isteniyorsa görev içinden bayrak sıfırlanabilir. Freewheeling için sabit çevrim aralığı tanımlanmaz. Event ve Status aynı davranış değildir. Çok kısa olay darbesi görev zamanlayıcısının denetimleri arasında kaçabilir; Freewheeling, sabit çevrim isteyen saha veri yolu görevi için uygun değildir.

3. Önceliği ve işlem yükünü dengeli belirleyin

CODESYS görev ayarında 0 en yüksek önceliktir; daha büyük sayı daha düşük önceliği gösterir. Aynı işlemci çekirdeğinde yüksek öncelikli görev, düşük öncelikliyi kesebilir. Çok çekirdekli sistemlerde yürütme ayrıca görevlerin çekirdeklere dağıtımına ve işletim sistemine bağlıdır. Her görevi en yüksek önceliğe almak çözüm değildir.

Farklı otomasyon işlerini aynı hızda çalıştırmak zorunda değilsiniz. Örneğin makine sıralaması için 10 ms, yavaş proses değerlendirmesi için 100 ms, istatistik toplama için 1 s ayrı görevler düşünülebilir. Bunlar başlangıç örnekleridir; sahaya uygulanacak değerler ölçülerek seçilir. Aynı çıkışı birden fazla görevden yazmayın; paylaşılan verilerin tutarlılığını düzenleyin.

4. TON, TOF ve TP hangi işi yapar?

Kullandığınız programlama dili ST, LD veya FBD olsa da bu blokların temel davranışı aynıdır. Standart zamanlayıcıları Library Manager içindeki uygun Standard kütüphanesinden kullanın. Her bağımsız işlem için ayrı bir fonksiyon bloğu örneği tanımlayın. IN koşul, PT ayarlanan süre, Q sonuç ve ET geçen süredir; PT ve ET için TIME veri tipi kullanılır.

TON, açma gecikmesi: IN sürekli TRUE kaldığında süre dolunca Q TRUE olur. IN FALSE olursa zamanlama ve çıkış sıfırlanır. Örneğin çalışma isteğinin 3 saniye boyunca devam ettiğini doğrulamak için kullanılabilir.

TOF, kapama gecikmesi: IN TRUE iken Q TRUE’dur. IN FALSE olduğunda gecikme başlar; süre sonunda Q FALSE olur. Süre dolmadan IN yeniden TRUE olursa kapama gecikmesi sıfırlanır. Örneğin işlem bittikten sonra fanın bir süre daha çalışması için uygundur.

TP, darbe zamanlayıcısı: IN’in yükselen kenarıyla Q, PT süresi boyunca TRUE olur. IN’in TRUE kalması kendiliğinden sürekli darbe üretmez. TP tek başına periyodik çizelge değildir. Tekrarlayan iş için görev veya ayrıca düzenlenmiş tetikleme mantığı gerekir.

5. Üç saniyelik gecikmeye ait ST örneği

Aşağıdaki Structured Text örneğinde PLC_PRG, örneğin 10 ms’lik çevrimsel görevden çağrılır. Standard kütüphanesi projede bulunmalıdır. xStartRequest çalışma isteğini, xEnable izin koşulunu temsil eder. fbStartDelay her çevrimde çağrılır; bekleme sırasında programın kalan kısmı yürümeye devam eder.

PROGRAM PLC_PRG
VAR
    xStartRequest   : BOOL;
    xEnable         : BOOL := TRUE;
    xDelayedCommand : BOOL;
    tElapsed        : TIME;
    fbStartDelay    : TON;
END_VAR

fbStartDelay(
    IN := xStartRequest AND xEnable,
    PT := T#3s
);

xDelayedCommand := fbStartDelay.Q AND xEnable;
tElapsed := fbStartDelay.ET;

xStartRequest ve xEnable kesintisiz TRUE kaldığında, 3 saniye dolduktan sonraki uygun çağrıda xDelayedCommand TRUE olur. Koşullardan biri FALSE olursa TON sıfırlanır. Anlık buton darbesi 3 saniyelik sürekli isteğin yerine geçmez. Buton bırakılınca da istek sürsün istiyorsanız başlatma ve durdurma koşullarına sahip ayrı bir durum mantığı kurun.

Editörün notu: SLEEP, DELAY ve WAIT, ST’nin her CODESYS hedefinde bulunan yerleşik standart gecikme komutları değildir. Bazı sistem kütüphanelerinde bekleme fonksiyonları bulunabilir; bunların görev üzerindeki etkisi ayrıca değerlendirilir. PLC’yi bekleme döngüsünde tutmak yerine zamanlayıcı ve durum mantığı kullanın. TON’u yalnızca koşul TRUE iken çağırmak, FALSE olduğunda sıfırlama çağrısını atlayabilir.

6. Ayarlanan süre ile fiziksel tepkiyi karıştırmayın

T#10ms görev aralığı, her fiziksel olayın 10 ms’de yakalanacağı garantisi değildir. Girişin donanım filtresi, veri yolu çevrimi, görevin başlama zamanı ve çıkış aktarımı toplam tepkiyi etkiler. Ağ ayarları ve cihazlar arası veri aktarımı da bu zincirin parçasıdır. 10 ms’lik görevde T#1ms süre yazmak, 1 ms hassasiyetli fiziksel darbe üretmez.

Görev aralığındaki sapma jitter olarak değerlendirilir. Çok kısa darbeler için uygun donanım yakalama veya hızlı sayaç gerekebilir. Gecikmeyi her çevrimde sabit bir sayı ekleyerek hesaplamak, çevrim uzadığında zaman hatası oluşturabilir; uygulamanın süre ölçümü ile işlem sayımını ayrı tasarlayın.

7. Watchdog ile proses zaman aşımını ayırın

Görev watchdog’u, görevin izin verilen çalışma süresini aşmasını veya hedefin desteklediği çevrim kaçırma durumlarını izler. Proses zaman aşımı ise örneğin bir valfin 2 saniyede geri bildirim vermemesidir; uygulama mantığında ayrı izlenir. Birinin ayarı diğerinin yerine geçmez. Uzun işlem gerekiyorsa işi birkaç çevrime bölüp durumunu sonraki çağrıda sürdürün.

Watchdog süresi, hassasiyeti ve hata hâlindeki çıkış davranışı hedefe göre kontrol edilmelidir. Hata oluştuğunda süreyi rastgele büyütmek yerine yükü ve uzun süren kodu inceleyin. Çevrim süresi aşımı her zaman watchdog hatası oluşturmaz; bu, watchdog eşiğine ve cihazın kaçırılan çevrim davranışına bağlıdır.

8. Süreleri sahada ölçerek doğrulayın

Hata ayıklama sırasında Task Configuration izleme ekranındaki çalışma sürelerini ve jitter değerlerini inceleyin. Zamanlayıcının IN, PT, Q ve ET değerlerini izleyin; kısa olaylar için uygun örneklemeli Trace kullanın. Eğitim örneklerini gerçek donanıma taşırken en yüksek işlem yükünde, haberleşme yoğunken ve hata koşullarında tekrar deneyin. Doğru ayar, yalnızca süre yazmak değil, beklenen tepkiyi ölçerek doğrulamaktır.

İlgili konular

Proje oluşturma | PLC programlama | Structured Text | Fonksiyon blokları | Veri tipleri | Komut seti | Hata ayıklama | Ağ özellikleri