IF condition THEN ...;ELSIF autre_condition THEN ...;ELSE ...;END_IF CASE valeur OF 1: ...; 2, 3: ...; 4..10: ...;END_CASE // ELSIF (un seul mot) ; chaque instruction se termine par ; FOR i := 0 TO 9 DO ...;END_FORWHILE condition DO ...;END_WHILEREPEAT ...;UNTIL conditionEND_REPEAT// EXIT; sort de la boucle ; CONTINUE; passe a l'iteration suivanteFUNCTION Addition : INT // FUNCTION renvoie une valeurVAR_INPUT a, b : INT; END_VAR Addition := a + b;END_FUNCTIONFUNCTION_BLOCK FB_Moteur //FUNCTION_BLOCK garde un etat entre les cyclesVAR_INPUT Marche : BOOL; END_VARVAR_OUTPUT EnMarche : BOOL; END_VARVAR temperature : REAL := 20.0; compteur : INT := 0; actif : BOOL := FALSE; nom : STRING := 'Moteur1';END_VAR// VAR : variables locales du POU, conservées entre les cyclesVAR xLocal : BOOL := FALSE;END_VAR// VAR_INPUT : paramètres d'entrée (lecture seule dans le FB)VAR_INPUT rSetPoint : REAL;END_VAR// VAR_OUTPUT : paramètres de sortie (écriture dans le FB)VAR_OUTPUT xReady : BOOL;END_VAR// VAR_IN_OUT : passage par référence (alias vers une variable externe)VAR_IN_OUT stStatus : ST_Status;END_VAR// VAR_GLOBAL : variables globales (définies dans un GVL)VAR_GLOBAL g_xEmergencyStop : BOOL;END_VAR// VAR_TEMP : variables temporaires (stack), non conservées entre les cyclesVAR_TEMP iCounterTemp : INT;END_VAR// CONSTANT : valeur fixe non modifiableVAR CONSTANT c_rPi : REAL := 3.14159;END_VAR// RETAIN : variable conservée après redémarrage de l'automateVAR RETAIN rTotalProduction : REAL;END_VAR// PERSISTENT : conservée même après téléchargement du programmeVAR PERSISTENT uiBootCounter : UINT;END_VAR// VAR_GENERIC : variable typée dynamiquement (polymorphisme de type)// Permet d'accepter n'importe quel type compatibleVAR_GENERIC AnyValue : ANY;END_VAR// Disponible uniquement dans la déclaration des MéthodesMETHOD MyMethod // VAR_STAT : variable statique dans une méthode // Conserve sa valeur entre les appels de la méthode VAR_STAT iStaticCounter : INT := 0; END_VAR // VAR_INST : variables d'instance d'un FB (mémoire interne) // (Déclarées implicitement dans un FUNCTION_BLOCK) VAR_INST iStaticCounter2 : INT := 0; END_VAR iStaticCounter := iStaticCounter + 1;END_METHODVAR valeurs : ARRAY[0..9] OF INT;END_VARvaleurs[0] := 100;FOR i := 0 TO 9 DO valeurs[i] := i * 2;END_FORTYPE ST_Moteur :STRUCT Vitesse : REAL; Marche : BOOL;END_STRUCTEND_TYPEmoteur1.Vitesse := 50.0;txt : STRING := 'Bonjour';CONCAT(txt, ' Monde');LEN(txt); // longueurFIND(txt, 'jour'); // positionMID(txt, 3, 2); // sous-chaineVAR Tempo : TON; Cpt : CTU;END_VARTempo(IN := Marche, PT := T#5s);IF Tempo.Q THEN ...;END_IF__TRY resultat := 10 / diviseur;__CATCH(exc) Erreur := TRUE;__FINALLY Termine := TRUE;__ENDTRYFUNCTION_BLOCK FB_VehiculeVAR PUBLIC vitesse : REAL; END_VARMETHOD Accelerer vitesse := vitesse + 10;END_METHODFUNCTION_BLOCK FB_Voiture EXTENDS FB_Vehicule:= assignation = comparaison<> < > <= >=AND OR NOT XORMOD (modulo)compteur := compteur + 1;PROGRAM PLC_PRGVAR moteur : FB_Moteur;END_VARmoteur(Marche := TRUE);IF moteur.EnMarche THEN ...;END_IF