Wat is Structured Text (ST)?

Structured Text (ST) is de tekstuele, op Pascal geïnspireerde programmeertaal uit de norm IEC 61131-3 waarmee engineers PLC’s en andere industriële besturingen programmeren met variabelen, voorwaarden, lussen en functies, in plaats van met grafische symbolen. ST wordt gebruikt voor alles wat in grafische talen omslachtig wordt: berekeningen, regelalgoritmen, recepten, datastructuren en toestandsmachines binnen industriële automatisering en procesautomatisering. Sinds Instruction List in 2025 uit de norm is geschrapt, is ST de enige tekstuele taal van IEC 61131-3.


🧠 Hoe is Structured Text ontstaan?

ST zat al in de eerste editie van IEC 61131-3 uit 1993, naast Ladder Diagram, Function Block Diagram, Sequential Function Chart en Instruction List. De syntax leent veel van Pascal en Ada: toewijzing met :=, statements die eindigen op een puntkomma en blokken die worden afgesloten met END_IF, END_FOR of END_CASE.

Editie Jaar Betekenis voor ST
Eerste editie 1993 ST als een van de vijf talen, met IF, CASE, FOR, WHILE en REPEAT
Tweede editie 2003 Verfijningen en extra datatypes
Derde editie 2013 Objectgeoriënteerde uitbreidingen: klassen, methoden, interfaces, namespaces en referenties; Instruction List verouderd verklaard
Vierde editie 2025 Instruction List geschrapt; Unicode-tekst met USTRING en UCHAR

Leveranciers geven de taal soms een eigen naam. Siemens noemt zijn variant in TIA Portal SCL (Structured Control Language), Rockwell Automation biedt ST in Studio 5000, en Beckhoff met TwinCAT 3 bouwt op CODESYS, dat ST uitbreidt tot Extended Structured Text met onder meer de set- en resettoewijzingen S= en R=.


🔧 Hoe werkt Structured Text?

Een ST-programma bestaat uit program organisation units (POU’s): programs, function blocks en functions. Elke POU begint met een declaratiedeel waarin de variabelen sterk getypeerd worden vastgelegd, gevolgd door de instructies. Een eenvoudig function block voor een pompbewaking:

FUNCTION_BLOCK FB_Pomp
VAR_INPUT
    Start      : BOOL;
    Druk       : REAL;   (* bar *)
END_VAR
VAR_OUTPUT
    Motor      : BOOL;
    Alarm      : BOOL;
END_VAR

IF Druk > 10.0 THEN
    Motor := FALSE;
    Alarm := TRUE;
ELSIF Start THEN
    Motor := TRUE;
    Alarm := FALSE;
ELSE
    Motor := FALSE;
END_IF;
END_FUNCTION_BLOCK

De taal kent een vaste set statements:

  • Toewijzing - Waarde := Expressie;
  • Voorwaarden - IF ... ELSIF ... ELSE ... END_IF en CASE ... OF ... END_CASE, de laatste ideaal voor toestandsmachines
  • Lussen - FOR, WHILE (test vooraf) en REPEAT ... UNTIL (test achteraf, dus minimaal één keer uitgevoerd); EXIT verlaat alleen de binnenste lus
  • Aanroepen - functions en function blocks, zoals de standaardtimer TON of teller CTU, en RETURN om een POU te verlaten
  • Commentaar - (* ... *) en sinds de editie van 2013 ook // voor één regel

De datatypes zijn ook in ST strikt gedefinieerd:

Datatype Grootte Typisch gebruik
BOOL 1 bit Digitale signalen en vlaggen
INT / DINT / LINT 16 / 32 / 64 bit Tellers, indexen, toestanden (INT loopt van -32768 tot 32767)
REAL / LREAL 32 / 64 bit (IEEE 754) Meetwaarden en regelalgoritmen
TIME Afhankelijk van implementatie Vertragingen en bewakingstijden
STRING / USTRING Variabel Teksten, batchnummers, receptnamen
ARRAY / STRUCT Samengesteld Tabellen, receptparameters, objectdata

De PLC-runtime voert ST, net als de andere talen, uit in een cyclische scan: ingangen lezen, code uitvoeren, uitgangen schrijven. Het deterministische gedrag komt dus van de runtime, niet van de taal zelf. Een WHILE-lus zonder harde bovengrens kan de cyclustijd laten exploderen; de watchdog stopt de CPU dan, bij een Siemens S7-1500 standaard na een maximale cyclustijd van 150 ms.


🔄 Hoe verhoudt ST zich tot de andere IEC 61131-3-talen?

Eigenschap ST Ladder Logic (LD) FBD SFC
Vorm Tekst Grafisch, relaislogica Grafisch, blokken Grafisch, stappen en transities
Berekeningen en algoritmen Uitstekend Beperkt Redelijk Via acties in andere taal
Arrays, structuren, lussen Volledig Nauwelijks Beperkt Niet van toepassing
Leesbaar voor monteurs Lager Hoog Hoog Hoog voor volgordes
Online storingszoeken Minder visueel Zeer visueel Visueel Visueel per stap
Versiebeheer en diff Eenvoudig, het is tekst Lastig Lastig Lastig

In de praktijk combineren projecten de talen: SFC voor de stappenvolgorde van een batchproces volgens ISA-88, LD of FBD voor interlocks die een monteur ‘s nachts moet kunnen lezen, en ST voor de rekenkern. Omdat ST gewone tekst is, past het ook goed bij versiebeheer met Git, codereviews en statische analyse. IEC 61499 hergebruikt ST voor de algoritmen binnen gedistribueerde, gebeurtenisgestuurde functieblokken.


🏭 Waar wordt Structured Text in de praktijk gebruikt?

Een voorbeeld uit de regeltechniek: een PI-regelaar met vaste bemonsteringstijd en begrenzing tegen integrator windup. In productie gebruikt u meestal het PID-blok van de leverancier, zoals PID_Compact in TIA Portal, maar het voorbeeld laat zien waarom ST hier natuurlijk aanvoelt:

Fout     := Setpoint - Meetwaarde;
Integraal := Integraal + Ki * Fout * Ts;
IF Integraal > 100.0 THEN Integraal := 100.0; END_IF;
IF Integraal < 0.0   THEN Integraal := 0.0;   END_IF;
Uitgang  := LIMIT(0.0, Kp * Fout + Integraal, 100.0);

🧭 Hoe schrijft u onderhoudbare en veilige ST-code?

ST geeft veel vrijheid, en daarmee ruimte voor slechte code. Een werkwijze die in de praktijk standhoudt:

  1. Volg een coding guideline - de PLCopen Coding Guidelines (versie 1.0, april 2016) bevatten ruim zestig regels over naamgeving, commentaar, codeerpraktijk, taalgebruik en het omgaan met leveranciersextensies
  2. Bouw modulair - één function block per objecttype (pomp, klep, motor) met vaste interfaces, in een gedeelde bibliotheek; geen monolithische programma’s van duizenden regels
  3. Begrens elke lus - gebruik FOR met een vaste bovengrens, controleer array-indexen en vermijd WHILE op procesvoorwaarden
  4. Kies datatypes bewust - DINT of LREAL waar een INT kan overlopen, en geen vergelijking = op REAL-waarden
  5. Bouw security in de code - de Top 20 Secure PLC Coding Practices (juni 2021) vragen onder meer om HMI-invoer in de PLC te valideren, indirecte adressering te controleren, ingangen op fysieke plausibiliteit te toetsen en cyclustijden te trenden
  6. Test vóór inbedrijfname - unittests en simulatie op een soft-PLC, daarna een FAT met procesmodel
  7. Beheer wijzigingen - projecten in versiebeheer, online en offline code vergelijken vóór elke download, en elke wijziging via wijzigingsbeheer

Veelvoorkomende fouten en hun oorzaak:

Probleem Typische oorzaak Maatregel
CPU in STOP door watchdog Onbegrensde WHILE- of REPEAT-lus Vaste lusgrenzen, cyclustijd bewaken
Overflow INT-teller voorbij 32767 Groter datatype, bereikcontrole
Toegang buiten array Index uit HMI of berekening niet gecontroleerd Grenzen checken vóór gebruik
Hangende toestandsmachine CASE zonder ELSE of time-out Standaardtak en stapbewaking
Onverwacht gedrag na herstart Niet-geïnitialiseerde variabelen Expliciete startwaarden, veilige starttoestand

🔐 Welke rol speelt ST in OT-security en safety?

PLC-code is een aantrekkelijk doelwit, omdat wie de logica wijzigt het fysieke proces bestuurt. Stuxnet liet dat in 2010 zien: de worm plaatste eigen codeblokken in de organisatieblokken OB1 en OB35 van Siemens S7-315-besturingen en verborg die voor de engineer. Aanvallers richten zich daarom op het engineeringstation, projectbestanden en de downloadfunctie. Maatregelen volgens IEC 62443:

Maatregel Doel
Netwerksegmentatie PLC’s en engineeringstations in eigen zones
Application Whitelisting Alleen goedgekeurde software op engineeringstations
MFA Sterke authenticatie voor engineering en remote access
Version Control en code signing Integriteit en herleidbaarheid van ST-code
Logging Audit trail van downloads en online wijzigingen
Patchmanagement Kwetsbaarheden in runtime en tooling verhelpen
Backup Herstel van een bekende, goede programmaversie

Voor functionele veiligheid gelden aparte regels. IEC 61508, IEC 61511, ISO 13849 en IEC 62061 stellen eisen aan de software van een safety-PLC, en veel safety-omgevingen beperken het programmeren tot LD of FBD met gecertificeerde functieblokken. ST wordt in safety-logica alleen gebruikt waar de gecertificeerde tooling dat toestaat, en dan meestal als beperkte subset zonder dynamische constructies.

Voor Nederlandse organisaties in kritieke infrastructuur valt aantoonbaar beheer van PLC-software onder de zorgplicht van de Cyberbeveiligingswet, die op 15 augustus 2026 in werking trad. Gestructureerde, versiebeheerde ST-code maakt dat beheer aanmerkelijk eenvoudiger.


🌐 Waarom wint ST terrein binnen Industrie 4.0?

Binnen Industrie 4.0 schuift OT op naar softwarematige architecturen: soft-PLC’s op industriële pc’s, gevirtualiseerde besturingen en edge computing. Daar sluiten tekstuele code, objectoriëntatie en tooling uit de IT-wereld beter aan dan grafische talen. Jonge engineers met een softwareachtergrond pakken ST bovendien sneller op dan ladderlogica. De keerzijde blijft dat latency en jitter belangrijker worden zodra een gewoon besturingssysteem de timing mede bepaalt.


❓ Veelgestelde vragen

Is Structured Text hetzelfde als SCL?

SCL (Structured Control Language) is de naam die Siemens gebruikt voor zijn implementatie van Structured Text in TIA Portal en Step 7. De basis is gelijk aan ST uit IEC 61131-3, maar Siemens voegt eigen instructies, datatypes en adressering toe. Code is daardoor niet zonder aanpassingen uitwisselbaar met andere ST-omgevingen.

Is Structured Text moeilijk te leren?

Structured Text is goed te leren voor iedereen met basiskennis van programmeren, omdat de syntax lijkt op Pascal. Lastiger is het denken in cycli: ST-code draait elke PLC-scan opnieuw, dus wachten in een lus is uit den boze. Wie dat principe beheerst, schrijft snel bruikbare ST-programma’s.

Wanneer kiest u Structured Text in plaats van Ladder Logic?

Structured Text is de beste keuze voor berekeningen, regelalgoritmen, recepten, arrays en toestandsmachines. Ladder Logic blijft sterker voor eenvoudige discrete logica en interlocks die monteurs online moeten kunnen volgen. Veel projecten combineren beide talen binnen hetzelfde PLC-programma.

Ondersteunt Structured Text objectgeoriënteerd programmeren?

Structured Text ondersteunt sinds de derde editie van IEC 61131-3 uit 2013 objectgeoriënteerde concepten zoals methoden, interfaces en overerving van function blocks. Omgevingen als CODESYS en TwinCAT 3 bieden dat al jaren. Niet alle PLC-platformen implementeren deze uitbreidingen volledig.

Mag Structured Text gebruikt worden in safety-PLC’s?

Structured Text is in safety-PLC’s alleen toegestaan als de gecertificeerde engineeringtool van de leverancier dat ondersteunt. Veel safety-omgevingen beperken het programmeren tot Ladder Diagram of Function Block Diagram met gecertificeerde blokken. De eisen volgen uit normen als IEC 61508 en IEC 61511.

Kan Structured Text-code tussen PLC-merken worden overgezet?

Structured Text is van alle IEC 61131-3-talen het makkelijkst over te zetten, omdat het gewone tekst is. Leveranciersextensies, bibliotheken en I/O-adressering verschillen echter, dus vrijwel altijd is handwerk nodig. Het PLCopen XML-formaat (IEC 61131-10) helpt bij de uitwisseling van projecten.


📌 Samengevat

Structured Text is de tekstuele programmeertaal van IEC 61131-3 en de logische keuze voor berekeningen, regelalgoritmen, recepten en toestandsmachines in PLC’s. Met sterke typering, objectoriëntatie sinds 2013 en goede aansluiting op versiebeheer is ST de taal van softwarematige OT. Combineer haar met LD, FBD of SFC waar leesbaarheid voor monteurs telt, begrens elke lus en bouw validatie en wijzigingsbeheer in volgens IEC 62443.