CoDeSys'deki yapısal metin (Structured Text) programlama nasıl yapılır?

CODESYS Structured Text programında değişkenler, koşullar ve çevrimsel çalışma mantığı

CODESYS’te Structured Text programlama nasıl yapılır?

Structured Text (ST), kontrol mantığını metinle yazmanıza olanak veren bir PLC programlama dilidir. IEC 61131-3 kapsamında tanımlanır ve CODESYS platformunda kullanılır. Koşullar, hesaplamalar ve blok çağrıları satırlar halinde yazılır. ST öğrenirken asıl mesele yalnızca komutların yazımı değil, bu satırların görev tarafından tekrar tekrar yürütülmesini anlamaktır.

ST, CODESYS programlama dillerinden biridir. Bu rehber CODESYS Development System V3 düzenini esas alır; üretici paketine ve sürüme göre menü adları değişebilir. CODESYS’i indirirken cihaz üreticisinin desteklediği sürümü kontrol edin. Aşağıdaki örnekler simülasyonda öğrenme amacıyla hazırlanmıştır; değişkenler fiziksel çıkışlara eşlenmez.

1. Projeyi ve ST programını hazırlayın

File → New Project üzerinden uygun bir proje şablonu seçin. Standart proje kullanıyorsanız hedef cihazı ve programlama dilini belirleyin. Proje oluşturma aşamasında, gerçek uygulama için uyumlu denetleyici ve cihaz paketleri gerekir. İlk mantık denemesi için simülasyon kullanılabilir.

Application altında Add Object → POU yoluyla bir program organizasyon birimi ekleyin; türünü Program, dilini Structured Text (ST) seçin. Projede zaten ST türünde PLC_PRG varsa onu kullanabilirsiniz. PLC programlama açısından önemli ayrım şudur: Program nesnesinin bulunması, onun çağrıldığı anlamına gelmez. Görev bağlantısını ayrıca kontrol edeceğiz.

2. Değişken tanımları ile uygulama kodunu ayırın

ST editörünün tanım bölümünde değişkenler, uygulama bölümünde yürütülecek ifadeler bulunur. Editörün oluşturduğu PROGRAM satırını koruyun. Aşağıdaki VAR bloğunu tanım alanına yerleştirin; mevcut boş VAR bloğu varsa onu değiştirin. Veri tipleri arasında BOOL, TRUE veya FALSE değerini temsil eder.

Tanım alanı:

VAR
    xSwitch : BOOL := FALSE;
    xPermit : BOOL := FALSE;
    xLight  : BOOL := FALSE;
END_VAR

Uygulama alanı:

IF xSwitch AND xPermit THEN
    xLight := TRUE;
ELSE
    xLight := FALSE;
END_IF;

xSwitch anahtar talebini, xPermit yazılımsal izni, xLight ise sonuç değişkenini temsil eder. İki giriş de TRUE olduğunda sonuç TRUE olur. xPermit burada yalnızca bir eğitim değişkenidir; güvenlik devresi değildir. Programı okumak için “Hangi koşulda hangi değer atanıyor?” sorusunu sorun.

İlk örneğin beklenen sonuçları
xSwitch xPermit xLight
FALSE FALSE FALSE
TRUE FALSE FALSE
FALSE TRUE FALSE
TRUE TRUE TRUE

3. “:=” atama, “=” karşılaştırmadır

xLight := TRUE; değişkene değer atar. xSwitch = TRUE ise bir eşitlik karşılaştırmasıdır. AND iki koşulun birlikte sağlanmasını, OR en az birinin sağlanmasını, NOT mantıksal tersini ifade eder. ST komutları ve operatörlerini öğrenirken bu ayrım, başka bir dildeki alışkanlıkları olduğu gibi taşımaktan daha önemlidir.

İlk örneğin aynı davranışı üreten kısa biçimi şöyledir. IF bloğunun yerine yazılabilir:

xLight := xSwitch AND xPermit;

ELSE bölümünün önceki örnekteki görevi, koşul sağlanmadığında sonucu açıkça FALSE yapmaktır. ELSE kaldırılır ve başka bir atama bulunmazsa, xLight önceki TRUE değerini koruyabilir. Koşulun artık doğru olmaması, değişkeni kendiliğinden sıfırlamaz.

4. Programı çevrimsel göreve bağlayın

Task Configuration altında bir Cyclic görev bulunmalı ve programınız bu görevin Program Calls listesinde yer almalıdır. Gerekirse Add Call ile seçin; mevcut çağrıyı ikinci kez eklemeyin. Görev zamanlaması programın ne zaman çağrılacağını belirler.

Bu küçük simülasyon denemesinde örneğin T#20ms aralık kullanılabilir. Her çağrıda koşul yeniden değerlendirilir. Bu, gerçek makine için önerilen evrensel bir süre değildir. Sensör gelene kadar WHILE içinde beklemek de çevrimsel çalışma değildir; uzun veya sonlanmayan döngüler görevi meşgul eder ve süre denetimini tetikleyebilir.

5. Simülasyonda çalıştırın ve sonucu gözleyin

Build → Generate Code ile kod üretimini başlatın; kısayolu F11’dir. Mesajlar panelindeki hataları giderin. Ardından Online → Simulation seçeneğini etkinleştirin, Online → Login ile simülasyona giriş yapın ve gerekirse simüle edilen uygulamanın oluşturulmasını onaylayın. Debug → Start veya F5 uygulamayı RUN durumuna geçirir.

Hata ayıklama sırasında tanım alanındaki Prepared Value sütununda xSwitch ve xPermit değerlerini hazırlayın; Debug → Write Values veya Ctrl+F7 ile yazın. Önce yalnızca xSwitch’i TRUE yapın, sonra xPermit’i de TRUE yapın. xLight’ın tabloyla aynı sonucu verdiğini gözleyin; ardından izin değerini FALSE yapın.

Write Values bir defalık yazmadır; programın atadığı bir değişken sonraki çağrıda yeniden değişebilir. Bu yüzden denemede giriş değişkenlerini değiştirin, sonucu programın üretmesine izin verin. Simülasyon gerçek I/O kanallarını veya saha veri yolu telegramlarını çalıştırmaz; mantık denemesi ile donanım doğrulaması farklı aşamalardır.

6. İkinci örnek: Sensörün durumunu değil, geçişini sayın

Parça sayma gibi projelerde sensör TRUE kaldığı sürece her görev çağrısında sayacı artırmak, tek parçayı defalarca sayabilir. CTU bloğu, CU girişindeki FALSE → TRUE geçişinde sayar. Fonksiyon blokları kendi durumunu koruyan örneklerle kullanılır.

Ayrı bir Program POU oluşturun, örneğin PRG_CountDemo; dilini ST seçip çevrimsel göreve ekleyin. Library Manager içinde Standard kütüphanesinin bulunduğunu kontrol edin. Bu programın tanım ve uygulama alanlarına aşağıdaki bölümleri yerleştirin.

Sayaç programının tanım alanı:

VAR
    xSensor        : BOOL := FALSE;
    xReset         : BOOL := FALSE;
    xBatchComplete : BOOL := FALSE;
    fbCounter      : CTU;
END_VAR

Sayaç programının uygulama alanı:

fbCounter(CU := xSensor, RESET := xReset, PV := WORD#5);
xBatchComplete := fbCounter.Q;

fbCounter.CV sayım değeridir; Q, CV hedefe eşit veya büyük olduğunda TRUE olur. PV hedefi, RESET sayımı sıfırlama girişini belirtir. Bu örnekte xReset FALSE iken xSensor’u TRUE yapın ve orada bırakın: ilk geçiş bir sayım üretir, TRUE kalması yeni parça değildir. Sonra FALSE yazıp bir sonraki denemede yeniden TRUE yapın. Beş geçişte xBatchComplete TRUE olur.

7. Gerçek PLC’ye geçerken ne değişir?

Giriş ve çıkış modüllerinde değişkenlerin fiziksel kanallara eşlenmesi gerekir. Sensörün elektriksel sinyali, örnekleme süresi ve darbe uzunluğu ayrıca incelenir; bu basit program, görev çağrıları arasında kaçırılan kısa darbeleri geri getirmez. Ağ bağlantıları ve veri aktarımı için cihaz desteği, adresler ve veri tipleri kontrol edilir.

Gerçek hedefte iletişim ayarlarını yapılandırın ve Login sırasında gösterilen download veya online change seçeneklerinin mevcut uygulamaya etkisini değerlendirin. CODESYS güvenliğinde erişim yetkileri ve proje yedekleri de önemlidir. Fiziksel çıkış bağlanmadan önce beklenen davranışı, görev çağrısını ve I/O eşlemesini ayrı ayrı doğrulayın.

Resmî teknik başvurular: Program nesnesi, IF ifadesi, simülasyon ve CTU sayaç bloğu.