PLC (ST) Structured text nedir?

PLC Structured Text (ST) nedir?

Structured Text (ST — Yapılandırılmış Metin), PLC ve diğer programlanabilir kontrolörler için kullanılan metin tabanlı bir programlama dilidir. IEC 61131-3 kapsamında tanımlanır. Koşullar, matematik işlemleri, döngüler ve blok çağrıları kodla ifade edilir. ST, programın yalnızca yapısını göstermez; yürütülecek işlemleri tanımlar.

ST hangi işlerde kullanışlıdır? Hesaplamalar, veri dizileri, reçeteler ve çok sayıda koşul içeren işlemler ST ile okunabilir biçimde yazılabilir. Ladder Diagram kontak mantığını, FBD ise bloklar arasındaki bağlantıları görsel olarak anlatır. Dil seçimi uygulamaya ve bakım ekibinin alışkanlıklarına bağlıdır. ST kullanmak tek başına daha hızlı veya hatasız program garantisi vermez.

ST programı ne zaman çalışır? PLC CPU, programı yapılandırılmış görev veya program çağrısı üzerinden yürütür. Görev zamanlaması, çevrim aralığı ve öncelikler çalışma zamanını belirler. IF gibi komutlar, çağrı sırasında hangi kodun yürütüleceğini seçer. Bir koşul yazmak, kendi başına yeni bir görev veya zamanlayıcı oluşturmaz.

Değişkenler ve veri tipleri: Veri tipleri içinde BOOL doğru/yanlış durumunu, INT tam sayıyı, REAL ondalıklı sayıyı, TIME süreyi temsil eder. Değişkenin adı, türü ve anlamı birlikte açık olmalıdır. Aşağıdaki üç örnek bağımsızdır; editörde bildirim ve çalışan kod ayrı alanlara yerleştirilebilir. Örnek değişkenlere fiziksel I/O adresi atanmamıştır.

Örnek 1 — Mantık ve koşul: Request istek, Permitted işlevsel izin, PressureBar ise bar cinsinden örnek basınç değeridir. Ready iki BOOL koşulundan, HighAlarm basınç karşılaştırmasından hesaplanır. Gerçek sensör verisi kullanılacaksa girişin ölçeği ve değişken bağlantısı yapılandırılır. İki sonuç, bu örnekte birbirinden bağımsızdır.

VAR
    Request     : BOOL := FALSE;
    Permitted   : BOOL := FALSE;
    PressureBar : REAL := 0.0;
    Ready       : BOOL := FALSE;
    HighAlarm   : BOOL := FALSE;
END_VAR

Ready := Request AND Permitted;

IF PressureBar >= 6.0 THEN
    HighAlarm := TRUE;
ELSE
    HighAlarm := FALSE;
END_IF;

Atama ve karşılaştırma: := bir değişkene değer atar; = eşitliği karşılaştırır. AND, iki mantıksal koşulun birlikte doğru olmasını ister. Örnekte 6,0 bar ve üzerindeki değerlerde HighAlarm TRUE, daha düşük değerlerde FALSE olur. ELSE dalı, koşul sağlanmadığında alarm değişkenine yazılacak değeri açıkça belirler.

Eksik atama ve eski değer: Bir değişkene bazı dallarda değer yazılmazsa, uygun saklama süresine sahip değişken önceki değerini taşıyabilir. Bellek davranışı; yerel geçici değişken, program değişkeni ve kalıcı veri için aynı değildir. Çevrimler arasında değer tutmak ile enerji kesildikten sonra değeri korumak farklı konulardır. Başlangıç ve retain ayarlarını kullanılan platformdan doğrulayın.

STRING bir metin türüdür: Örneğin Label : STRING(10) := 'Ready'; bildirimi desteklenen ortamlarda metin değişkeni oluşturur. STRING, ARRAY ile aynı veri tipi değildir. Uzunluk bildirimi ve karakter kodlaması platforma göre değerlendirilir; UTF-8'de bir karakter birden fazla bayt kullanabilir. Belirtilen kapasiteyi her durumda aynı sayıda karakter olarak yorumlamayın.

IF, ELSIF ve CASE: IF koşula göre, ELSIF ek koşullara göre dal seçer. CASE, bir değere göre farklı işlemleri düzenlemek için kullanılabilir. Makine adımlarını açık durum değişkenleriyle yönetmek kodun izlenmesini kolaylaştırır. SFC de sıralı işlemleri yapılandırmak için kullanılabilir. Durum geçişleri, başlangıç ve hata koşulları birlikte tasarlanmalıdır.

Örnek 2 — FOR döngüsü: Aşağıdaki kod 1'den 5'e kadar tam sayıları toplar ve tamamlandığında Total = 15 olur. Sayaç değişkeni i ayrıca tanımlanmıştır. Her çağrıda Total sıfırlanır; böylece aynı hesap tekrarlandığında sonuç birikmez.

VAR
    i     : INT;
    Total : INT;
END_VAR

Total := 0;
FOR i := 1 TO 5 DO
    Total := Total + i;
END_FOR;

Döngü, zaman bekleme yöntemi değildir: Bu FOR döngüsünün beş tekrarı aynı program çağrısı içinde yapılır; beş PLC çevrimine veya beş saniyeye yayılmaz. Dizi işlemlerinde tekrar sayısı ve indis sınırları kontrol edilir. Uzun döngüler çalışma süresini artırır; WHILE veya REPEAT için de kesin bir çıkış koşulu gerekir.

Bir olayı döngü içinde beklemeyin: Sensör değişene kadar dönen kod, görevin tamamlanmasını engelleyebilir ve watchdog zaman hatasına yol açabilir. Bekleme, uygun görev düzeninde her çağrıda yeniden değerlendirilen durum ve zamanlayıcıyla yönetilebilir. Programın diğer işleri yapabilmesi için her çağrının zaman sınırı içinde tamamlanması gerekir.

Örnek 3 — TON ile açma gecikmesi: Delay, bir TON zamanlayıcı örneğidir. İstek ve izin birlikte TRUE olduğunda süre başlar. Koşul sürdüğü ve ayarlanan süre dolduğu zaman Delay.Q TRUE olur. Örnekte zamanlayıcı, koşulun dışında her program çağrısında çalıştırılır.

VAR
    Request   : BOOL := FALSE;
    Permitted : BOOL := FALSE;
    Delay     : TON;
    Ready     : BOOL := FALSE;
END_VAR

Delay(IN := Request AND Permitted, PT := T#2s);
Ready := Delay.Q;

Zamanlayıcı sonucu nasıl güncellenir? PT := T#2s iki saniyelik gecikmeyi belirtir. IN FALSE olduğunda yapılan çağrı TON'u sıfırlar; Q FALSE olur. Sonuç, görev yürütülüp blok çağrıldığında programa yansır. Çağrıyı yalnızca koşul TRUE iken yapmak, koşul kalktığında bloğun sıfırlanmasını veya çıkışın güncellenmesini engelleyebilir.

Fonksiyon bloğu ve örnek: Zamanlayıcı ve sayaç gibi durum saklayan fonksiyon blokları uygun örnekler üzerinden çağrılır. Bağımsız işlemler için ayrı blok örnekleri kullanılması gerekir; tek örneği farklı cihazlar arasında paylaşmak durumları karıştırabilir. Girişlerin yazılması, bloğun çağrılması ve çıkışların okunması sırası açık olmalıdır.

Hesaplamalarda nelere dikkat edilir? 0–10 V ve 4–20 mA gibi ölçümlerde ham değer, mühendislik birimine dönüştürülür. Veri aralığı, taşma, tür dönüşümü ve sıfıra bölme kontrol edilmelidir. PID kontrol veya hızlı pals çıkışı komutlarında ilgili bloğun ve donanımın koşulları da geçerlidir. ST ile bir sayı hesaplamak, bağlı cihazın o değeri uygulayabildiğini tek başına kanıtlamaz.

Kenar algılama ve hızlı sinyaller: Yükselen kenar algılama, önceki ve güncel durumun karşılaştırılmasına dayanır. İki örnek arasında tamamlanan kısa darbe normal programda görülmeyebilir. Enkoder gibi sinyaller için uygun hızlı sayıcı gerekebilir. Dil seçimi, girişin örnekleme sınırını değiştirmez. Olay algılama yöntemi, sinyalin hızına göre seçilmelidir.

Platform uyumu: PLC programlama için kullanılan yazılım, CPU ve kütüphaneler uyumlu olmalıdır. CODESYS veya diğer geliştirme ortamlarında desteklenen sözdizimi ve blok arayüzleri farklılaşabilir. IEC temeli ortak olsa da projeler her cihaza doğrudan taşınamaz. Örnekleri hedef editörde derleyip görev ve I/O eşlemesini doğrulayın.

Nasıl doğrulanır? Hata ayıklama sırasında girişler, ara değerler ve blok çıkışları izlenir. FALSE/TRUE durumları, eşik değeri, reset ve yeniden başlatma ayrı ayrı denenir. HMI ve SCADA izleme için yardımcı olabilir. Kodun derlenmesi, kontrol mantığının ve fiziksel sistemin doğru çalıştığının tek başına kanıtı değildir.