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.
- 16.1 Az IL felépítése
- 16.2 Operátorok és módosítók
- 16.3 Funkcióblokk hívása IL-ben
- 16.4 Miért szorult vissza az IL?
- 16.5 A kombinált szerkesztő
- 16.6 Nézetváltás a gyakorlatban
- 16.7 Átváltási korlátok — mit veszíthetsz?
- 16.8 Az öt nyelv összehasonlítása
- 16.9 Vizsgatípusú átváltási feladat
- Összefoglalás
- Gyakorlatok
- Ellenőrző kérdések
- Tudáspróba
- A fejezet forrásai
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
Nézzük meg a legegyszerűbb példán:
LD 6 ADD 12 ST iVar
LD 6— betölti a 6-ot az akkumulátorba;ADD 12— hozzáadja a 12-t; az akkumulátor tartalma most 18;ST iVar— eltárolja az akkumulátor tartalmát aziVarváltozóba.
Ugyanez ST-ben egyetlen sor:
iVar := 6 + 12;
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” |
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:
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
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:
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.
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.
Három okból:
- A vizsga kérdezi. A programkövetelmény a hagyományos ötös felosztást várja el.
- Létező kód. Régi projektekben találkozni fogsz vele, és el kell tudnod olvasni.
- 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.
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 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.
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ó.
- 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.
- Hogyan:
FBD/LD/IL → View, Ctrl+1 / Ctrl+2 / Ctrl+3. - Mi a feltétel: a kódnak szintaktikailag helyesnek kell lennie, különben az implementáció részei elveszhetnek.
- 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 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.
| 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:
bFut := (bStart OR bFut) AND NOT bStop AND NOT bHiba;
Lépés 3 — IL. Az akkumulátorral, lépésenként:
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.
Mindig a logikán keresztül menj, ne a rajz formáján:
- olvasd le a rajzot logikai kifejezéssé (VAGY, ÉS, NEM);
- írd fel ST-ben — ez a legolvashatóbb köztes forma;
- bontsd fel IL-re: az első tagot
LD, a többit a megfelelő operátorral, a végénST.
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ényTRUE),N(negálás, illetveJMP/CAL/RETmellett: csak haFALSE),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
Írd le, mi lesz az akkumulátor tartalma minden sor után, és mi lesz a végeredmény:
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.
Írd át IL-be a következő ST-kifejezést, zárójelezéssel:
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?
Í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?
Í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.
Í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
- Milyen részekből áll egy IL-utasítás?
- Mi az akkumulátor („current result”), és mi a szerepe?
- Mit csinál az
LDés mit azSToperátor? - Mit jelent a
Cés mit azNmódosító? - Mi az
ANDNjelentése? - Mire való a zárójelezés IL-ben?
- Mit tesz a záró zárójel?
- Hogyan hívunk funkcióblokkot IL-ben?
- Milyen szabványos állapotban van az IL a 3. és a 4. kiadásban?
- Mi volt a bizottság indoklása az IL elavulttá nyilvánítására?
- Miért konvertálható egymásba az FBD, az LD és az IL?
- Mi a három átváltó parancs menüútja és gyorsbillentyűje?
- Mi a konverzió feltétele, és mi történhet, ha nem teljesül?
- 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
-
IEC 61131-3 Edition 4.0, 2025-05 – a szabvány nyilvános előnézete. (2026-07-29) ↩
-
Why is the instruction list (IL) language for PLCs falling out of favor? Danielle Collins, Motion Control Tips. (2026-07-29) ↩↩
-
CODESYS Online Help: FBD/LD/IL – a kombinált szerkesztő. CODESYS GmbH. (2026-07-29) ↩↩
-
CODESYS Online Help: Programming in Instruction List (IL). CODESYS GmbH. (2026-07-29) ↩
-
CODESYS LD FBD Help: Command: View as function block diagram (V4.6.0.0). CODESYS GmbH. (2026-07-31) ↩↩
-
CODESYS LD FBD Help: Command: View as Ladder Logic (V4.6.0.0). CODESYS GmbH. (2026-07-31) ↩↩
-
CODESYS LD FBD Help: Command: View as instruction list (V4.6.0.0). CODESYS GmbH. (2026-07-31) ↩↩↩
-
Modifiers and Operators in IL. Beckhoff Information System. (2026-07-31) Az
NEés azLEoperátor leírását a könyv nem idézi szó szerint — lásd a 16.2. alfejezet megjegyzését. ↩↩↩↩ -
Instruction List (IL). Kollmorgen KAS Webhelp. (2026-07-31) Az utasítás szerkezete és a „current result” fogalma. ↩↩