Texte structuré

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Livre ouvert, contenant un point d’interrogation, sur fond rouge.

Cet article ne cite aucune source et peut contenir des informations erronées (signalé en mars 2021).

Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ».

Trouver des sources sur « Texte structuré » :
  • Archive Wikiwix
  • Bing
  • Cairn
  • DuckDuckGo
  • E. Universalis
  • Gallica
  • Google
  • G. Books
  • G. News
  • G. Scholar
  • Persée
  • Qwant
  • (zh) Baidu
  • (ru) Yandex
  • (wd) trouver des œuvres sur Wikidata
Page d’aide sur l’homonymie

Pour les articles homonymes, voir ST.

Cet article est une ébauche concernant l’industrie et l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

Exemple de programme structuré

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. C'est un langage de haut niveau et sa structure rappelle les langages Ada et Pascal.

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

(* simple state machine *)
TxtState := STATES[StateMachine];
 
CASE StateMachine OF
   1: ClosingValve();
ELSE
    ;; BadCase();
END_CASE;

Autre exemple de programmation ST

Exemple 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

Exemple 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

  • PLCopen

Notes et références

Cette section est vide, insuffisamment détaillée ou incomplète. Votre aide est la bienvenue ! Comment faire ?

Liens externes

  • icône décorative Portail de la production industrielle
  • icône décorative Portail de la programmation informatique