Wat is IL?
Instruction List (IL) is een tekstuele, assemblerachtige programmeertaal voor PLC’s waarin een programma bestaat uit een reeks korte instructies die elk één bewerking uitvoeren op een tussenresultaat, de accumulator. IL was een van de vijf talen die de eerste editie van IEC 61131-3 in 1993 standaardiseerde, naast Ladder Logic, FBD, ST en SFC. De derde editie (2013) markeerde IL als verouderd en de vierde editie, gepubliceerd op 22 mei 2025, heeft de taal geschrapt. Toch draait IL-code nog in veel installaties binnen industriële automatisering en procesautomatisering, vaak in de Siemens-variant Statement List (STL, Duits: Anweisungsliste of AWL).
🧠 Hoe werkt Instruction List?
Een IL-programma wordt regel voor regel uitgevoerd. Elke regel heeft dezelfde opbouw:
- Label (optioneel) - een sprongdoel, gevolgd door een dubbele punt
-
Operator - de bewerking, zoals
LD,ANDofST -
Modifier (optioneel) -
N(negatie),C(conditioneel) of((uitgestelde bewerking) - Operand - een variabele, constante of adres
- Commentaar (optioneel) - tussen
(*en*)
De kern is het huidige resultaat, in de norm current result en in de meeste
tools de accumulator genoemd. LD laadt een waarde in de accumulator, een logische of
rekenkundige operator combineert de accumulator met de operand, en ST schrijft het resultaat
weg. Vergelijkingen zoals GT zetten een booleaans resultaat in de accumulator, waarna een
conditionele sprong (JMPC) daarop kan reageren.
Dat model lijkt sterk op een eenvoudige processor met één register. Het verklaart waarom IL compact is, maar ook waarom grotere programma’s moeilijk te lezen zijn: de betekenis van een regel hangt af van alles wat ervoor in de accumulator is gezet. Net als de andere talen wordt IL binnen de cyclische PLC-scan uitgevoerd (ingangen lezen, programma uitvoeren, uitgangen schrijven), wat zorgt voor deterministisch gedrag.
📚 Welke instructies kent IL?
De onderstaande tabel geeft de operatoren zoals IEC 61131-3 (editie 2 en 3) en implementaties als CODESYS ze kennen. De modifier N negeert de operand, behalve bij JMPC,
CALC en RETC, waar N betekent dat de actie alleen bij een
FALSE-resultaat plaatsvindt.
| Operator | Modifiers | Betekenis |
|---|---|---|
| LD | N | Laad operand in de accumulator (LDN: negatie) |
| ST | N | Schrijf de accumulator naar de operand (STN: negatie) |
| S / R | - | Zet een BOOL op TRUE (set) of FALSE (reset) als de accumulator TRUE is |
| AND / OR / XOR | N, ( | Logische of bitsgewijze combinatie met de operand |
| NOT | - | Negeer de accumulator zelf |
| ADD / SUB / MUL / DIV | ( | Rekenkundige bewerking, resultaat in de accumulator |
| GT / GE / EQ / NE / LE / LT | ( | Vergelijking, booleaans resultaat in de accumulator |
| JMP | C, N | Sprong naar een label (JMPC: bij TRUE, JMPCN: bij FALSE) |
| CAL | C, N | Aanroep van een functieblok (CALC, CALCN) |
| RET | C, N | Terugkeer uit een POU (RETC, RETCN) |
| ) | - | Voer de uitgestelde bewerking uit |
IEC-IL kent geen AND NOT als twee losse instructies: een genegeerde operand schrijft u als
ANDN, terwijl NOT zonder operand de accumulator zelf omkeert. Siemens STL
gebruikt voor dezelfde bewerking AN (internationaal) of UN (Duits, van Und
Nicht).
🔀 Hoe verschilt Siemens STL van IEC-IL?
Siemens Statement List (STL, Duits AWL) is de
bekendste IL-variant in Europese installaties, omdat de SIMATIC S5 en S7 lange tijd de standaard waren. Het principe is gelijk, maar STL werkt met twee soorten
tussenresultaat: het RLO (result of logic operation, Duits VKE) voor bitlogica
en de accumulators voor woorden en getallen. Een S7-300 heeft twee accumulators, een
S7-400 vier. Siemens laat u kiezen tussen Duitse en internationale mnemonische codes, zodat U E
0.0 en A I 0.0 hetzelfde betekenen.
| Functie | IEC-IL | STL (internationaal) | AWL (Duits) |
|---|---|---|---|
| Eerste bit inlezen | LD |
A |
U |
| EN NIET | ANDN |
AN |
UN |
| OF | OR |
O |
O |
| Bitresultaat toewijzen | ST |
= |
= |
| Woord laden / wegschrijven | LD / ST |
L / T |
L / T |
| Onvoorwaardelijke sprong | JMP |
JU |
SPA |
| Sprong bij TRUE / FALSE | JMPC / JMPCN |
JC / JCN |
SPB / SPBN |
In STL begint een logische reeks niet met een load, maar met een eerste controle (A of U) die het RLO opnieuw start. Daardoor is STL-code niet regel voor regel over te zetten naar een
IEC-omgeving zoals CODESYS, en omgekeerd.
🔧 Hoe ziet een IL-programma eruit?
Een klassiek zelfhoudcircuit voor een motor met start- en stopknop:
(* Motor start/stop met zelfhouding *)
LD Start
OR Motor
ANDN Stop
ST Motor
In ST is dat één regel: Motor := (Start OR Motor)
AND NOT Stop;. Haakjes stellen een bewerking uit tot de sluitende ):
LD A
AND( B
OR C
)
ST D (* D := A AND (B OR C) *)
Een voorbeeld met een vergelijking en een conditionele sprong, waarbij een pomp wordt ingeschakeld als het niveau onder 20 procent zakt:
LD Niveau
LT 20
JMPCN EINDE
S Pomp
EINDE: LD Pomp
ST Lamp
Deze voorbeelden laten zien waarom IL populair was: weinig regels en dicht bij de machinecode van de controller. Ze laten ook het nadeel zien: zonder commentaar ziet u niet in één oogopslag welke logica er staat, en sprongen maken de volgorde lastig te volgen.
📅 Wat is de status van IL in IEC 61131-3?
| Editie | Jaar | Betekenis voor IL |
|---|---|---|
| Editie 1 | 1993 | IL gestandaardiseerd als een van vijf talen |
| Editie 2 | 2003 | IL blijft onderdeel van de norm |
| Editie 3 | 2013 | IL gemarkeerd als deprecated (verouderd) |
| Editie 4 | mei 2025 | IL geschrapt; bijlage B somt toegevoegde, geschrapte en verouderde onderdelen op |
Geschrapt uit de norm betekent niet dat IL-code ophoudt te werken. Bestaande controllers voeren hun programma gewoon uit, en veel engineeringtools bieden de taal nog aan voor bestaande projecten. Wel kunt u niet meer verwachten dat nieuwe platformen of nieuwe functies IL ondersteunen. Voor nieuwe projecten is IL daarom geen verstandige keuze.
🔄 Hoe verhoudt IL zich tot andere PLC-talen?
| Eigenschap | IL | Ladder Logic | ST |
|---|---|---|---|
| Vorm | Tekst, instructie per regel | Grafisch, contacten en spoelen | Tekst, hogere programmeertaal |
| Leesbaarheid | Laag bij grotere programma’s | Hoog voor elektrotechnici | Hoog voor softwareontwikkelaars |
| Complexe berekeningen | Omslachtig | Beperkt | Sterk |
| Status in IEC 61131-3 | Geschrapt (2025) | Actueel | Actueel |
| Typisch gebruik | Legacy-code, oudere compacte PLC’s | Discrete machinebesturing | Algoritmen, data, regelingen |
Ondersteuning verschilt per leverancier:
- Siemens - STL is de eigen IL-variant. In TIA Portal is STL beschikbaar op de S7-300, S7-400 en S7-1500, maar niet op de S7-1200 (zie S7).
- CODESYS - ondersteunt IL nog voor bestaande projecten, ook in afgeleide omgevingen zoals TwinCAT.
- Rockwell - Studio 5000 voor Logix-controllers kent geen IL, alleen ladder, FBD, ST en SFC.
Het verschil met FBD en SFC is vooral structureel: FBD toont signaalstromen grafisch, en SFC verdeelt een proces in stappen en transities. IL heeft geen van beide, waardoor sequenties met labels en sprongen worden nagebouwd.
🏭 Waar komt u IL nog tegen?
IL en STL zitten vooral in installaties met een lange levensduur: productielijnen, waterzuiveringen, gemalen, energie-infrastructuur en machines die tien tot dertig jaar meegaan. Die code levert procesdata aan SCADA, HMI, Historian en MES via protocollen als Modbus TCP, ProfiNET, Ethernet IP en steeds vaker OPC UA. De taal zelf bepaalt die communicatie niet; de controller en de netwerkconfiguratie doen dat.
Het gaat meestal om basislogica: interlocks, start/stop-schakelingen, machinecycli, alarmverwerking en eenvoudige procesregeling. Typische problemen met zulke legacy-systemen:
- Kennisverlies - de oorspronkelijke programmeur is vertrokken en documentatie ontbreekt
- Spaghetticode - veel sprongen maken wijzigingen riskant
- Vendor lock-in - STL-code is niet direct over te zetten naar een andere leverancier
- Verouderde engineeringsoftware - oude tools draaien vaak op niet-ondersteunde Windows-versies
IL is daarmee vooral een onderwerp voor Lifecycle Management en beperkt de Schaalbaarheid van een installatie. Moet u de code voorlopig laten staan, beperk dan de schade: gebruik duidelijke labels, zet commentaar bij elk netwerk, splits lange blokken op in kleinere routines en voeg geen nieuwe sprongen toe.
🧭 Hoe migreert u IL-code stap voor stap?
- Inventariseer - welke controllers, programmablokken en tools bevatten IL of STL, en welke firmware draait er?
- Leg de huidige versie vast - maak een Backup van het geladen programma en zet het in Version Control, zodat u wijzigingen kunt vergelijken.
- Documenteer de functie - beschrijf per blok wat het doet, bij voorkeur met I/O-lijst en interlocks. Dit is vaak het meeste werk.
- Kies de doeltaal - meestal ST voor rekenwerk en ladder of FBD voor logica die onderhoudsmonteurs moeten kunnen lezen.
- Herschrijf en test - test op een simulator of testopstelling, en vergelijk uitgangen met het origineel bij dezelfde ingangen.
- Beheer de wijziging - volg uw change-managementproces en plan de omschakeling in een stilstand.
Zit IL-code in een veiligheidsfunctie op een Safety PLC, dan is elke wijziging een herverificatie volgens IEC 61508, IEC 61511 of ISO 13849. Migreer veiligheidslogica daarom nooit als bijzaak van een algemene ombouw.
🔐 Welke securityrisico’s horen bij legacy IL-systemen?
Het risico zit niet in de taal, maar in de omgeving: oude controllers zonder authenticatie, engineeringstations met verouderde software en weinig zicht op wijzigingen. Stuxnet liet zien dat aanvallers PLC-codeblokken kunnen aanpassen en die wijzigingen voor de engineeringsoftware kunnen verbergen.
| Maatregel | Doel |
|---|---|
| Netwerksegmentatie | Oude controllers isoleren van kantoor-IT |
| Application Whitelisting | Alleen goedgekeurde software op engineeringstations |
| MFA | Sterke authenticatie voor toegang op afstand |
| Logging | Programmawijzigingen en downloads vastleggen |
| Patchmanagement | Kwetsbaarheden in firmware en tools verhelpen waar mogelijk |
| Backup en Version Control | Bekende goede versie herstellen en afwijkingen ontdekken |
Waar patchen niet kan, zijn compenserende maatregelen nodig, zoals strikte toegang tot het engineeringnetwerk en periodiek vergelijken van het geladen programma met de laatst goedgekeurde versie.
❓ Veelgestelde vragen
Wat betekent IL bij PLC-programmering?
IL staat voor Instruction List, een tekstuele PLC-taal met assemblerachtige instructies zoals LD, AND en ST. Elke regel bewerkt het huidige resultaat in de accumulator. IL was tot 2025 een van de talen van IEC 61131-3.
Is Instruction List nog onderdeel van IEC 61131-3?
Instruction List is in de derde editie van IEC 61131-3 (2013) als verouderd gemarkeerd en in de vierde editie van mei 2025 geschrapt. Bestaande IL-programma’s blijven werken, maar nieuwe projecten horen in ST, ladder, FBD of SFC.
Wat is het verschil tussen IL en Siemens STL?
Siemens Statement List (STL, Duits AWL) is de Siemens-variant van Instruction List. Het principe met
accumulator en instructies per regel is gelijk, maar de mnemonische codes en adressering verschillen,
bijvoorbeeld A I 0.0 of U E 0.0 in STL. STL-code is daarom niet zonder
aanpassing in een IEC-IL-omgeving te gebruiken.
Is IL sneller dan Structured Text?
Instruction List werd vaak als sneller gezien omdat de instructies dicht bij machinecode liggen. Op moderne controllers compileren ST en IL naar vergelijkbare code, zodat het verschil in scantijd zelden doorslaggevend is. Leesbaarheid en onderhoud wegen tegenwoordig zwaarder.
Kunt u IL-code automatisch omzetten naar ST?
Een eenvoudige IL-reeks laat zich vrij direct naar ST vertalen, maar sprongen, gedeelde accumulatorwaarden en leveranciersspecifieke instructies maken automatische omzetting onbetrouwbaar. Bij migratie van Instruction List hoort daarom altijd een functionele test die het oude en nieuwe gedrag vergelijkt.
Is het nog zinvol om IL te leren?
Voor nieuwe projecten is Instruction List niet nodig, maar wie onderhoud doet aan oudere installaties komt IL of Siemens STL regelmatig tegen. Leesvaardigheid is dan nuttig, vooral om oude code te begrijpen voordat u die migreert.
📌 Samengevat
Instruction List is de assemblerachtige tekstuele PLC-taal uit IEC 61131-3 die in 2013 verouderd werd verklaard en in 2025 uit de norm is geschrapt. IL-code werkt met een accumulator en korte instructies, is compact maar moeilijk te onderhouden, en draait nog in veel legacy-installaties. Inventariseer die code, leg versies vast, beveilig de omgeving en migreer gecontroleerd naar ST, ladder of FBD.
