Texte structuré
langage de programmation
Le texte structuré, ou Structured Text (ST) en anglais, est un des cinq langages de programmation pour automates programmables industriels (API) définis par la norme CEI 61131-3[1]. C'est un langage de haut niveau et sa structure rappelle les langages Ada et Pascal[2].
Le format de ces fichiers a été standardisé en XML par PLCopen.
Des instructions plus ou moins complexes sont supportées, par exemple :
- boucles d'itération (REPEAT-UNTIL; WHILE-DO; FOR) ;
- conditions (IF-THEN-ELSE; CASE) ;
- fonctions (SQRT(); SIN()).
Exemple de programme
modifier(* simple state machine *) TxtState := STATES[StateMachine]; CASE StateMachine OF 1: ClosingValve(); ELSE ;; BadCase(); END_CASE;
Autre exemple de programmation ST
modifierExemple de programme
// PLC configuration
CONFIGURATION DefaultCfg
VAR_GLOBAL
b_Start_Stop : BOOL; // Global variable to represent a boolean.
b_ON_OFF : BOOL; // Global variable to represent a boolean.
Start_Stop AT %IX0.0:BOOL; // Digital input of the PLC (Address 0.0)
ON_OFF AT %QX0.0:BOOL; // Digital output of the PLC (Address 0.0). (Coil)
END_VAR
// Schedule the main program to be executed every 20 ms
TASK Tick(INTERVAL := t#20ms);
PROGRAM Main WITH Tick : Monitor_Start_Stop;
END_CONFIGURATION
PROGRAM Monitor_Start_Stop // Actual Program
VAR_EXTERNAL
Start_Stop : BOOL;
ON_OFF : BOOL;
END_VAR
VAR // Temporary variables for logic handling
ONS_Trig : BOOL;
Rising_ONS : BOOL;
END_VAR
// Start of Logic
// Catch the Rising Edge One Shot of the Start_Stop input
ONS_Trig := Start_Stop AND NOT Rising_ONS;
// Main Logic for Run_Contact -- Toggle ON / Toggle OFF ---
ON_OFF := (ONS_Trig AND NOT ON_OFF) OR (ON_OFF AND NOT ONS_Trig);
// Rising One Shot logic
Rising_ONS := Start_Stop;
END_PROGRAM
Exemple de déclaration d'un bloc fonctionnel
modifierExemple de programme
//=======================================================================
// Function Block Timed Counter : Incremental count of the timed interval
//=======================================================================
FUNCTION_BLOCK FB_Timed_Counter
VAR_INPUT
Execute : BOOL := FALSE; // Trigger signal to begin Timed Counting
Time_Increment : REAL := 1.25; // Enter Cycle Time (Seconds) between counts
Count_Cycles : INT := 20; // Number of Desired Count Cycles
END_VAR
VAR_OUTPUT
Timer_Done_Bit : BOOL := FALSE; // One Shot Bit indicating Timer Cycle Done
Count_Complete : BOOL := FALSE; // Output Bit indicating the Count is complete
Current_Count : INT := 0; // Accumulating Value of Counter
END_VAR
VAR
CycleTimer : TON; // Timer FB from Command Library
CycleCounter : CTU; // Counter FB from Command Library
TimerPreset : TIME; // Converted Time_Increment in Seconds to MS
END_VAR
// Start of Function Block programming
TimerPreset := REAL_TO_TIME(in := Time_Increment) * 1000;
CycleTimer(
in := Execute AND NOT CycleTimer.Q
,pt := TimerPreset);
Timer_Done_Bit := CycleTimer.Q;
CycleCounter(
cu := CycleTimer.Q
,r := NOT Execute
,pv := Count_Cycles);
Current_Count := CycleCounter.cv;
Count_Complete := CycleCounter.q;
END_FUNCTION_BLOCK
Voir aussi
modifierNotes et références
modifier- « La norme IEC 61131-3. Concepts et notions de base. Langages de programmation - éduscol STI », sur eduscol.education.fr (consulté le )
- Dariusz Rzonca, Jan Sadolewski, Andrzej Stec et Zbigniew Swider, « IEC structured text programming of a small Distributed Control System », 2008 International Multiconference on Computer Science and Information Technology, IEEE, (DOI 10.1109/imcsit.2008.4747327, lire en ligne, consulté le )
Liens externes
modifier