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, AND of ST
  • 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?

  1. Inventariseer - welke controllers, programmablokken en tools bevatten IL of STL, en welke firmware draait er?
  2. Leg de huidige versie vast - maak een Backup van het geladen programma en zet het in Version Control, zodat u wijzigingen kunt vergelijken.
  3. Documenteer de functie - beschrijf per blok wat het doet, bij voorkeur met I/O-lijst en interlocks. Dit is vaak het meeste werk.
  4. Kies de doeltaal - meestal ST voor rekenwerk en ladder of FBD voor logica die onderhoudsmonteurs moeten kunnen lezen.
  5. Herschrijf en test - test op een simulator of testopstelling, en vergelijk uitgangen met het origineel bij dezelfde ingangen.
  6. 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.