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_IFenCASE ... OF ... END_CASE, de laatste ideaal voor toestandsmachines -
Lussen -
FOR,WHILE(test vooraf) enREPEAT ... UNTIL(test achteraf, dus minimaal één keer uitgevoerd);EXITverlaat alleen de binnenste lus -
Aanroepen - functions en function blocks, zoals de standaardtimer
TONof tellerCTU, enRETURNom 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?
- Regeltechniek - PID-regelingen, filters, cascaderegelingen en geavanceerde procesregeling tot en met MPC-algoritmen
- Motion control - kinematica, nokprofielen en trajectberekeningen naast de PLCopen-motionblokken
-
Batch en recepten - receptparameters in structuren en arrays, toestandsmachines met
CASE - Energie en utilities - belastingberekeningen, turbine- en pompregelingen, energie-optimalisatie
- Data en analyse - schalen, middelen en bufferen van sensor-waarden voor historians, MES en AI-modellen die meestal buiten de PLC draaien
- Communicatie - verwerken van telegrammen en datablokken van Remote IO, actuatoren en frequentieregelaars via ProfiNET, IP, Modbus TCP of OPC UA, en het aanleveren van status en alarmen aan HMI en SCADA
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:
- 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
- Bouw modulair - één function block per objecttype (pomp, klep, motor) met vaste interfaces, in een gedeelde bibliotheek; geen monolithische programma’s van duizenden regels
-
Begrens elke lus - gebruik
FORmet een vaste bovengrens, controleer array-indexen en vermijdWHILEop procesvoorwaarden -
Kies datatypes bewust - DINT of LREAL waar een INT kan overlopen, en geen vergelijking
=op REAL-waarden - 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
- Test vóór inbedrijfname - unittests en simulatie op een soft-PLC, daarna een FAT met procesmodel
- 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.
