Az ötödik nyelv, amelyet a szabvány már kivezetett — és a vizsga önálló témaköre: hogyan váltunk nyelvet, és mit veszíthetünk közben.

Ez a fejezet zárja a nyelvi blokkot, és két dolgot csinál.

Először bemutatja az IL-t (Instruction List, utasításlista) — röviden, áttekintő szinten, mert a vizsga kérdezi, de a szabvány már kivezette. Utána következik a vizsga önálló, 10%-os témaköre: a nyelvek közötti átváltás.

16.1 Az IL felépítése

Az IL a legrégebbi és leginkább „gépközeli” IEC-nyelv. Egy assembly-re emlékeztető, soralapú nyelv: minden sorban egy utasítás.

Az utasítás felépítése:9

Rész Leírás
címke „Minden utasítás címkével kezdődik, amelyet kettőspont követ. A címkék az ugrási utasítások célpontjaként szolgálnak.” (elhagyható)
operátor maga az utasítás (LD, ST, AND…)
módosító az operátorhoz fűzött N vagy C betű (elhagyható)
operandus „az operandusok változók vagy konstans kifejezések”
megjegyzés „a megjegyzés szövegének (* jellel kell kezdődnie és *) jellel végződnie”

Az akkumulátor

Az IL megértésének kulcsa egyetlen fogalom. A nyelvben van egy rejtett tároló — a dokumentáció „current result”-nak, a CODESYS-környezetek akkumulátornak nevezik —, amelybe minden művelet dolgozik.

„Egy teljes IL-utasítás olyan utasításokból áll, amelyek: először kiértékelnek egy kifejezést (ezt hívjuk aktuális eredménynek), majd az aktuális eredményt használják műveletek végrehajtásához.”9

Az IL akkumulátoros gondolkodásmódja LD 6 ADD 12 ST iVar operátor + operandus, soronként egy utasítás Az akkumulátor („current result”) 6 18 18 betöltve 6 + 12 = 18 eltárolva: iVar = 18 Ez a különbség az ST-hez képest ST-ben a kifejezést egyben írod le: iVar := 6 + 12; IL-ben lépésenként építed fel egy rejtett tárolóban, és a végén tárolod el. Ez az assembly-szerű gondolkodás — és ez az, amit a szabvány elavultnak minősített.
16.1. ábra. Az IL lépésenként építi fel az eredményt egy rejtett tárolóban, és a végén tárolja el.

Nézzük meg a legegyszerűbb példán:

KÓD
LD   6
ADD  12
ST   iVar
  1. LD 6 — betölti a 6-ot az akkumulátorba;
  2. ADD 12 — hozzáadja a 12-t; az akkumulátor tartalma most 18;
  3. ST iVar — eltárolja az akkumulátor tartalmát az iVar változóba.

Ugyanez ST-ben egyetlen sor:

ST
iVar := 6 + 12;
💡 A könyv IL-példáiról

A könyv saját IL-példákat használ, amelyek eredményét kiszámoltuk és gépileg ellenőriztük (6 + 12 = 18 ✔). Erre azért van szükség, mert a forrásfeldolgozás során egy gyártói példa gépi összefoglalásában számtani ellentmondást találtunk. A tanulság általános: kódpéldát soha ne vegyél át ellenőrzés nélkül — se jegyzetből, se internetről, se gépi összefoglalásból.

16.2 Operátorok és módosítók

A két módosító:8

Módosító Jelentés
C „az utasítás csak akkor hajtódik végre, ha az előző kifejezés eredménye TRUE”
N JMP, CAL és RET mellett: az utasítás csak akkor hajtódik végre, ha az eredmény FALSE; egyébként az operandus negálását jelenti
CN a kettő kombinációja feltételes ugráshoz és visszatéréshez

A leggyakoribb operátorok:8

Operátor Módosító Mit csinál?
LD N „a (negált) operandusértéket betölti az akkumulátorba”
ST N „az akkumulátor (negált) tartalmát eltárolja az operandusban”
S – „TRUE-ra állítja a BOOL operandust, ha az akkumulátor tartalma TRUE”
R – „FALSE-ra állítja a BOOL operandust, ha az akkumulátor tartalma TRUE”
AND, OR, XOR N, ( „bitenkénti ÉS / VAGY / kizáró VAGY az akkumulátor értéke és a (negált) operandus között”
NOT – „az akkumulátorérték bitenkénti negálása”
ADD, SUB, MUL, DIV ( alapműveletek; az eredmény az akkumulátorba kerül
GT, GE, EQ, NE, LE, LT ( összehasonlítás az akkumulátor és az operandus között
JMP CN „(feltételes) ugrás a megadott címkére”
CAL CN „(feltételes) hívás: program vagy funkcióblokk”
RET C, CN kilépés a POU-ból
) – „kiértékeli a késleltetett műveletet”
⚠️ Egy forráshűségi megjegyzés

A fenti táblázat gyártói dokumentációból származik, de az összehasonlító operátoroknál (NE, LE) a lekért összefoglaló nyilvánvaló átírási hibát tartalmazott: két operátor leírása azonos volt egy másikéval.

A könyv ezért ezt a hat operátort nem idézi szó szerint, csak a szokásos, egyértelmű jelentésüket adja meg (NE = nem egyenlő, LE = kisebb vagy egyenlő). A pontos gyártói megfogalmazást a saját CODESYS-verziód súgójában érdemes ellenőrizni.

Zárójelezés

Mivel az akkumulátor mindig egyetlen értéket tart, egy összetett kifejezés kiértékelését el kell halasztani. Erre való a nyitó zárójel:

KÓD
LD   bA
AND( bB
OR   bC
)
ST   bKi

Ez felel meg az ST-beli bKi := bA AND (bB OR bC); kifejezésnek. A záró zárójel „kiértékeli a késleltetett műveletet”.8

⚠️ Itt válik nyilvánvalóvá, miért nem szeretik az IL-t

Egy háromtagú, zárójeles logikai kifejezés ST-ben egy sor. IL-ben öt sor, plusz egy külön szintaktikai fogalom (a késleltetett művelet), amit meg kell tanulni.

Ez nem stílusprobléma: hibalehetőség. Egy elfelejtett záró zárójel az IL-ben csendben más eredményt ad.

16.3 Funkcióblokk hívása IL-ben

A CAL operátorral:

KÓD
CAL  ctuDarab(CU := bEl, RESET := bTorol, PV := 100)
LD   ctuDarab.Q
ST   bTele

A hívás után a kimenet ugyanúgy pontozott jelöléssel olvasható, mint a többi nyelvben — előbb betöltjük az akkumulátorba (LD), majd eltároljuk (ST).

16.4 Miért szorult vissza az IL?

Két, egymást megerősítő okot ismerünk.

A szabvány. A 6. fejezetből tudod: az IEC 61131-3 harmadik kiadása (2013) még tartalmazza az IL-t, de elavultnak (deprecated) jelölte a következő kiadásra nézve.2 A negyedik kiadás (2025) nyelvcsomagjában — a scope alapján — már nem szerepel.1

A bizottság indoklása, szó szerint:2

„egy assembly-szerű nyelv nem korszerű a modern fejlesztőkörnyezetekben”

A gyakorlat. A CODESYS-ben az IL alapértelmezés szerint nincs bekapcsolva: az opciókban, „az FBD, LD és IL párbeszédpanel beállításai” között kell engedélyezni.4 7 Ha egy nyelvet a gyártó alapból kikapcsolva szállít, az önmagában is beszédes.

⚠️ Amit a könyv nem állít

Hogy az IL-t az Ed. 4.0-ban formálisan „eltávolították” (removed) vagy csak továbbra is elavultnak minősítik-e, azt a nyilvános előnézetből nem lehetett eldönteni: a részletes listát tartalmazó melléklet nem érhető el.

A könyv ezért csak azt állítja, ami igazolt: a negyedik kiadás nyelvcsomagjában (scope) az IL már nem szerepel.

💡 Akkor miért tanuljuk?

Három okból:

  1. A vizsga kérdezi. A programkövetelmény a hagyományos ötös felosztást várja el.
  2. Létező kód. Régi projektekben találkozni fogsz vele, és el kell tudnod olvasni.
  3. Az átváltás miatt. A CODESYS kombinált szerkesztőjében az IL az a nézet, amelyben a grafikus programok „szövegesen” megjelennek — és ettől lesz kézzelfogható a nyelvek közötti átváltás.

Amit viszont nem javaslunk: új programot IL-ben írni.

16.5 A kombinált szerkesztő

Most jön a fejezet másik fele — a vizsga önálló témaköre.

A CODESYS-ben az FBD, az LD és az IL ugyanabban a szerkesztőben él:3

„Egy kombinált szerkesztő teszi lehetővé a programozást FBD (funkcióblokk-diagram), LD (létradiagram) és IL (utasításlista) nyelven.”

És a technikai magyarázat arra, hogy ez miért működik:3

„Az FBD és az LD programozás alapegysége a hálózat. … A CODESYS-ben azonban egy IL-program is legalább egy hálózatból áll, hogy támogassa az FBD-be vagy LD-be történő konverziót.”

Vagyis a három nyelv közös belső ábrázolást használ: hálózatokat. A megjelenítés különbözik, a szerkezet ugyanaz.

Ugyanaz a feltétel négy nyelven bKi := (bA OR bB) AND NOT bC; LD — létradiagram bAbBbC bKi FBD — funkcióblokk-diagram OR bA bB AND bC bKi ST — strukturált szöveg bKi := (bA OR bB) AND NOT bC; IL — utasításlista LD bA OR bB ANDN bC ST bKi Az ANDN az N módosítós AND: a negált operandussal végzi a műveletet. Egy sor. A CODESYS az FBD, az LD és az IL között vált — az ST nem része ennek a körnek.
16.2. ábra. Ugyanaz a feltétel négy nyelven. A CODESYS az első három között tud automatikusan váltani.

16.6 Nézetváltás a gyakorlatban

Három parancs, három billentyűkombináció:5 6 7

Parancs Menüút Gyorsbillentyű Mit alakít át?
View as function block diagram FBD/LD/IL → View Ctrl+1 az aktív utasításlistát vagy létradiagramot → FBD
View as Ladder Logic FBD/LD/IL → View Ctrl+2 az aktuális funkcióblokk-kódot vagy utasításlistát → LD
View as instruction list FBD/LD/IL → View Ctrl+3 az aktív funkcióblokk-kódot vagy létradiagramot → IL

16.7 Átváltási korlátok — mit veszíthetsz?

Itt van a vizsgafelelet lényege, és ez az, amit a legtöbben kihagynak.

⚠️ A gyártó figyelmeztetése — mindhárom parancsnál

„A hibátlan konverzió szintaktikailag helyes kódot igényel. Ellenkező esetben az implementáció részei elveszhetnek.”5 6 7

Gyakorlati következmény: fordítsd le a kódot, mielőtt átváltasz. És ha fontos munkáról van szó, előtte mentsd el a projektet.

A második korlát a nyelvek köre.

Az öt szabványos nyelv — és a hatodik, ami nem az Szöveges nyelvek ST strukturált szöveg hatályos — az Ed. 4.0 egyetlen szöveges nyelve IL utasításlista az Ed. 3.0-ban elavult; az Ed. 4.0 scope-jában nem szerepel Grafikus nyelvek LD létradiagram hatályos — a legelterjedtebb FBD funkcióblokk-diagram hatályos — jelfolyam-szemlélet SFC sorrendi funkcióterv a szabvány szerint: a program belső szervezésére CFC — NEM szabványos CODESYS-kiterjesztés. Az FBD elvén működik, de nem hálózatorientált, és visszacsatolás rajzolható benne. A kombinált szerkesztő: FBD ↔ LD ↔ IL A Ctrl+1 / Ctrl+2 / Ctrl+3 csak az FBD, az LD és az IL között vált. Az ST, az SFC és a CFC külön szerkesztő — közöttük nincs automatikus konverzió.
16.3. ábra. Az öt szabványos nyelv, a nem szabványos CFC, és az, hogy pontosan mi között lehet váltani.

A Ctrl+1/2/3 csak az FBD, az LD és az IL között vált. Nem tartozik ide:

Nyelv Miért nem?
ST külön szerkesztő, más belső ábrázolás — nincs oda-vissza konverzió
SFC a szabvány szerint is más: a program belső szervezésére szolgáló elemkészlet (15. fejezet)
CFC nem hálózatorientált, és nem is szabványos nyelv (14. fejezet)

A harmadik korlát a kifejezőerő. Ha egy POU-t ST-ben írnál meg, abban lehetnek olyan szerkezetek (CASE, WHILE, REPEAT, összetett kifejezések), amelyeknek egyszerűen nincs közvetlen megfelelője LD-ben. Ezért nem is konvertálható.

💡 A jó vizsgaválasz szerkezete
  1. Mit lehet: az FBD, az LD és az IL között a CODESYS automatikusan vált, mert közös, hálózat-alapú belső ábrázolást használnak.
  2. Hogyan: FBD/LD/IL → View, Ctrl+1 / Ctrl+2 / Ctrl+3.
  3. Mi a feltétel: a kódnak szintaktikailag helyesnek kell lennie, különben az implementáció részei elveszhetnek.
  4. Mit nem lehet: az ST, az SFC és a CFC nem része ennek a körnek.

16.8 Az öt nyelv összehasonlítása

IL ST LD FBD SFC
Csoport szöveges szöveges grafikus grafikus grafikus + szöveges elemek
Szabványos állapot az Ed. 4.0 scope-jában nem szerepel hatályos hatályos hatályos hatályos (strukturáló elemkészlet)
Erőssége – kifejezőerő, számítás logikai kapcsolatok láthatósága jelfolyam, blokkok lépéssorozatok
Gyengesége nehezen olvasható a logika nem látszik számítás sok blokknál átláthatatlan nem sorrendi feladatra rossz
Tipikus felhasználás régi kód olvasása számítás, állapotgép reteszelés, engedélyezés szabályozás, jelfeldolgozás receptek, gyártási ciklusok
Kombinált szerkesztő ✔ ✘ ✔ ✔ ✘
💡 A hatodik: a CFC

A CFC nem szabványos nyelv, hanem CODESYS-kiterjesztés (14. fejezet). Ha felsorolod a vizsgán, tedd hozzá, hogy nem szabványos — így a megemlítése előny lesz, nem hiba.

16.9 Vizsgatípusú átváltási feladat

A vizsgán tipikusan azt kérik, hogy egy adott logikát írj át egyik nyelvről a másikra. Nézzünk egy mintafeladatot végig.

Feladat. Adott a következő létradiagram-hálózat. Írd át ST-be és IL-be.

KÓD
  |   bStart    bStop      bHiba        (bFut)
  |---| |------+--|/|-------|/|-----------( )---|
  |            |
  |   bFut     |
  |---| |------+

Lépés 1 — olvasd le a logikát. A soros elemek ÉS-t, a párhuzamos ág VAGY-ot jelent, a bontó kontaktus tagadást (13. fejezet):

  • párhuzamos ág: bStart OR bFut
  • soros elemek: AND NOT bStop AND NOT bHiba

Lépés 2 — ST:

ST
bFut := (bStart OR bFut) AND NOT bStop AND NOT bHiba;

Lépés 3 — IL. Az akkumulátorral, lépésenként:

KÓD
LD   bStart
OR   bFut
ANDN bStop
ANDN bHiba
ST   bFut

Figyeld meg az ANDN-t: ez az N módosítós AND, amely „a negált operandussal” végzi a műveletet.8 Ez felel meg a bontó kontaktusnak.

💡 Az átváltás munkamódszere

Mindig a logikán keresztül menj, ne a rajz formáján:

  1. olvasd le a rajzot logikai kifejezéssé (VAGY, ÉS, NEM);
  2. írd fel ST-ben — ez a legolvashatóbb köztes forma;
  3. bontsd fel IL-re: az első tagot LD, a többit a megfelelő operátorral, a végén ST.

Ezzel a módszerrel bármelyik irányba tudsz váltani, akkor is, ha nincs gép a kezed ügyében.

Összefoglalás

  • Az IL soralapú, assembly-szerű nyelv. Az utasítás felépítése: címke (kettősponttal), operátor, módosító, operandus, megjegyzés.
  • Az IL kulcsfogalma az akkumulátor („current result”): a műveletek lépésenként építik fel benne az eredményt, amelyet a végén ST-vel tárolunk el.
  • Módosítók: C (csak ha az előző eredmény TRUE), N (negálás, illetve JMP/CAL/RET mellett: csak ha FALSE), CN.
  • Zárójelezés: a nyitó zárójel elhalasztja a műveletet, a záró zárójel „kiértékeli a késleltetett műveletet”.
  • Az IL az Ed. 3.0-ban elavult, az Ed. 4.0 scope-jában már nem szerepel; a CODESYS-ben alapértelmezés szerint nincs bekapcsolva.
  • Az FBD, az LD és az IL közös, hálózat-alapú belső ábrázolást használ — ezért konvertálhatók egymásba.
  • Átváltás: FBD/LD/IL → View, Ctrl+1 (FBD), Ctrl+2 (LD), Ctrl+3 (IL).
  • A konverzió szintaktikailag helyes kódot igényel, különben „az implementáció részei elveszhetnek”.
  • Az ST, az SFC és a CFC nem része a kombinált szerkesztőnek.
  • Az átváltás legjobb munkamódszere: rajz → logikai kifejezés → ST → IL.

Gyakorlatok

🛠️ 16.1. feladat — Kövesd az akkumulátort

Írd le, mi lesz az akkumulátor tartalma minden sor után, és mi lesz a végeredmény:

KÓD
LD   25
SUB  7
MUL  3
ADD  4
ST   iEredmeny

Számold ki kézzel, majd vidd be CODESYS-be (előbb engedélyezd az IL-t az opciókban), és ellenőrizd szimulációban.

🛠️ 16.2. feladat — Zárójelezés IL-ben

Írd át IL-be a következő ST-kifejezést, zárójelezéssel:

ST
bKi := bA AND (bB OR bC) AND NOT bD;

Utána vidd be, nyomj Ctrl+2-t, és nézd meg, milyen létradiagramot kapsz. Egyezik-e azzal, amit vártál?

🛠️ 16.3. feladat — Oda-vissza átváltás

Írj meg egy egyszerű reteszelési logikát létradiagramban (négy feltétel, ebből kettő tagadott). Váltsd át IL-be (Ctrl+3), majd vissza LD-be (Ctrl+2). Ugyanazt kaptad vissza? Ha nem, mi változott?

🛠️ 16.4. feladat — A hibás kód csapdája

Írj egy létradiagram-hálózatot, de hagyd hiányosan (például egy kontaktusnak ne adj változót). Próbálj átváltani Ctrl+3-mal. Mi történik? Kapcsold össze a tapasztaltakat a gyártói figyelmeztetéssel. Mentsd el a projektet, mielőtt kipróbálod.

🛠️ 16.5. feladat — Vizsgafeladat-sor

Írd át mind az öt logikát a megadott nyelvre: (a) bKi := bA AND bB; → LD; (b) létra: bA párhuzamosan bB, sorosan bC bontóval → ST; (c) LD bX / ORN bY / ST bZ → ST; (d) bKi := NOT (bA OR bB); → IL; (e) bMotor := (bStart OR bMotor) AND NOT bStop; → LD.

Minden feladathoz írd le azt is, melyik lépésen keresztül jutottál el a megoldásig.

Ellenőrző kérdések

  1. Milyen részekből áll egy IL-utasítás?
  2. Mi az akkumulátor („current result”), és mi a szerepe?
  3. Mit csinál az LD és mit az ST operátor?
  4. Mit jelent a C és mit az N módosító?
  5. Mi az ANDN jelentése?
  6. Mire való a zárójelezés IL-ben?
  7. Mit tesz a záró zárójel?
  8. Hogyan hívunk funkcióblokkot IL-ben?
  9. Milyen szabványos állapotban van az IL a 3. és a 4. kiadásban?
  10. Mi volt a bizottság indoklása az IL elavulttá nyilvánítására?
  11. Miért konvertálható egymásba az FBD, az LD és az IL?
  12. Mi a három átváltó parancs menüútja és gyorsbillentyűje?
  13. Mi a konverzió feltétele, és mi történhet, ha nem teljesül?
  14. Melyik három nyelv nem része a kombinált szerkesztőnek, és miért?

Tudáspróba

Válaszd ki az egyetlen helyes választ!

1. Az IL-utasítás címkéjét ez követi: a) kettőspont b) pontosvessző c) vessző d) egyenlőségjel

2. Az LD operátor: a) eltárolja az akkumulátor tartalmát; b) betölti az operandus értékét az akkumulátorba; c) ugrik egy címkére; d) funkcióblokkot hív.

3. A C módosító hatása: a) az operandus negálása; b) az utasítás mindig végrehajtódik; c) az utasítás csak akkor hajtódik végre, ha az előző eredmény TRUE; d) zárójelet nyit.

4. Az ANDN bStop megfelelője ST-ben: a) AND bStop b) NOT bStop c) OR NOT bStop d) AND NOT bStop

5. A záró zárójel az IL-ben: a) kiértékeli a késleltetett műveletet; b) lezárja a POU-t; c) megjegyzést zár; d) ugrási címkét jelöl.

6. Funkcióblokk hívása IL-ben ezzel az operátorral történik: a) LD b) CAL c) ST d) JMP

7. Az IL az IEC 61131-3 negyedik kiadásának nyelvcsomagjában: a) szerepel; b) új néven szerepel; c) nem szerepel; d) kötelezővé vált.

8. A CODESYS-ben az IL: a) alapértelmezés szerint be van kapcsolva; b) külön licencet igényel; c) nem érhető el; d) az opciókban engedélyezendő.

9. A Ctrl+3 gyorsbillentyű: a) utasításlistára vált; b) létradiagramra vált; c) funkcióblokk-diagramra vált; d) strukturált szövegre vált.

10. Melyik nyelvre nem vonatkozik az automatikus nézetváltás? a) FBD b) ST c) IL d) LD

A megoldókulcs a B függelékben található.

A fejezet forrásai


  1. IEC 61131-3 Edition 4.0, 2025-05 – a szabvány nyilvános előnézete. (2026-07-29) ↩

  2. Why is the instruction list (IL) language for PLCs falling out of favor? Danielle Collins, Motion Control Tips. (2026-07-29) ↩↩

  3. CODESYS Online Help: FBD/LD/IL – a kombinált szerkesztő. CODESYS GmbH. (2026-07-29) ↩↩

  4. CODESYS Online Help: Programming in Instruction List (IL). CODESYS GmbH. (2026-07-29) ↩

  5. CODESYS LD FBD Help: Command: View as function block diagram (V4.6.0.0). CODESYS GmbH. (2026-07-31) ↩↩

  6. CODESYS LD FBD Help: Command: View as Ladder Logic (V4.6.0.0). CODESYS GmbH. (2026-07-31) ↩↩

  7. CODESYS LD FBD Help: Command: View as instruction list (V4.6.0.0). CODESYS GmbH. (2026-07-31) ↩↩↩

  8. Modifiers and Operators in IL. Beckhoff Information System. (2026-07-31) Az NE és az LE operátor leírását a könyv nem idézi szó szerint — lásd a 16.2. alfejezet megjegyzését. ↩↩↩↩

  9. Instruction List (IL). Kollmorgen KAS Webhelp. (2026-07-31) Az utasítás szerkezete és a „current result” fogalma. ↩↩

Mennyire volt hasznos ez a fejezet?

Még nincs értékelés.