Instruction List Düzenleyici

Genel Bakış

Instruction List (IL), IEC 61131-3’ün assembler benzeri metin dilidir ve tarihsel olarak beş IEC dilinin ilkidir. Programlar, tek bir dahili akümülatör yazmacınıCurrent Result (CR) — manipüle eden komut dizileridir. Her satır şu formdaki bir ifadedir:

[Label:] Operator [Modifier] [Operand] (* Comment *)

ve akümülatörden veya bir dış değişkenden okur veya bunlara yazar.

ForgeIEC’te IL, FIlEditor aracılığıyla düzenlenir — düzen ve araçlar ST düzenleyici ile benzerdir.

Düzenleyici düzeni

+----------------------------------------+
| Variable table                         |  <- FVariablesPanel
| (VAR/VAR_INPUT/VAR_OUTPUT)             |
+========================================+  <- QSplitter (vertical)
| Code area                              |  <- FStCodeEdit
| (tree-sitter-il grammar) |
+----------------------------------------+
Alanİçerik
Değişken tablosu (üst)Name, Type, Initial value, Address, Comment ile tanımlamalar — VAR ... END_VAR bloğu ile senkronize.
Kod alanı (alt)Tree-sitter vurgulamalı IL kaynağı (tree-sitter-il grameri).
Arama çubuğu (Ctrl-F / Ctrl-H)Bul-değiştir çubuğu.

Çevrimiçi mod ve satır içi değer yer paylaşımı, ST düzenleyiciyle aynı şekilde çalışır.

Akümülatör modeli

Akümülatör (CR), çalışan değerlendirmenin ara sonucunu tutar. Tipik bir dizi:

  1. LD xx‘i akümülatöre yükle (CR := x)
  2. AND y — akümülatörü y ile birleştir (CR := CR AND y)
  3. ST z — akümülatörü z‘ye depola (z := CR)

Bu, IL’yi stack’siz, tek-yazmaçlı bir makine yapar — dilin 1993’te standartlaştırıldığı zamanlarda baskın olan mikrodenetleyici platformlarına çok yakın.

Temel operatörler

GrupOperatörlerEtki
Yükle / DepolaLD, LDN, ST, STNAkümülatörü ayarla / akümülatörü depola (N = negatif)
Set / ResetS, RBit ayarla / sıfırla (CR = TRUE olduğunda BOOL değişken)
Bit mantığıAND, OR, XOR, NOTAkümülatörü işlenenle birleştir
AritmetikADD, SUB, MUL, DIV, MODAkümülatör + işlenen → akümülatör
KarşılaştırmaGT, GE, EQ, NE, LE, LTKarşılaştırma sonucu CR‘ye
AtlamaJMP, JMPC, JMPCNEtikete atla (C = CR = TRUE olduğunda)
ÇağrıCAL, CALC, CALCNFonksiyon-blok örneği çağır
Geri dönüşRET, RETC, RETCNPOU’dan çık

Değiştiriciler

Bir operatör son ek değiştiricileri aracılığıyla rafine edilebilir:

DeğiştiriciAnlam
Nİşlenenin negasyonu (LDN x, NOT x‘i yükler)
CKoşullu — yalnızca CR = TRUE olduğunda gerçekleştir (JMPC label)
()Parantez değiştiricisi) kapanana kadar değerlendirmeyi ertele

Parantez formu, ara değişkenler olmadan bileşik ifadeleri etkinleştirir:

LD   a
AND( b
OR   c
)
ST   result            (* result := a AND (b OR c) *)

ST yerine IL’yi ne zaman kullanmalı

ST bugün varsayılan seçimdir. IL hâlâ şu durumlarda mantıklıdır:

  • Mikrodenetleyici performansı belirleyici olduğunda — IL, çoğu matiec arka ucunda makine komutlarına 1:1 eşlenir, ara optimizasyon olmadan.
  • Eski sistemlerin uyumlu tutulması gerektiğinde (S5/S7 AWL türevi mantık, eski ABB / Beckhoff kurulu taban).
  • Çok kompakt mantık blokları — kilitlemeler, mandallar, kenar koşulları genellikle IL’de ST’den iki satır daha kısadır.

Diğer her şey için ST daha okunabilir ve bakımı daha kolaydır.

Kod örneği — NO/NC kontaklı kendinden tutmalı konaktör

IL’de klasik konaktör kendinden tutma: start‘a basmak konaktör K1‘i enerjilendirir, stop butonu (NC, düşük aktif) onu tekrar düşürür. Mantık:

K1 := (start OR K1) AND NOT stop

IL’de:

PROGRAM Selbsthaltung
VAR
    start  AT %IX0.0 : BOOL;       (* NO push-button *)
    stop   AT %IX0.1 : BOOL;       (* NC push-button, low-active *)
    K1     AT %QX0.0 : BOOL;       (* contactor *)
END_VAR

    LD    start
    OR    K1                    (* CR := start OR K1 *)
    ANDN  stop                  (* CR := CR AND NOT stop *)
    ST    K1                    (* K1 := CR *)
END_PROGRAM

Dört komut, bir yazmaç, geçici depolama yok. Tam olarak IL’nin başlangıçta tasarlandığı türden bir yapı.

İlgili konular