Procédure

Les procédures sont disponibles sous forme de bibliothèques. La logique des procédures est créée dans le langage de programmation C et ne peut pas être modifiée dans l’éditeur ST.

Comme les fonctions, les procédures n'ont pas d'états internes. Lorsque les valeurs d'entrée sont identiques, la valeur de sortie est la même à chaque exécution de la procédure. Par exemple, l'addition de deux valeurs donne toujours le même résultat.

Contrairement aux fonctions, les procédures ne livrent aucune valeur de renvoi et prennent en charge les variables VAR_IN_OUT.

Les procédures sont un complément de la norme CEI 61131-3 et doivent être activées de manière explicite.

Paramètres

Pour importer des valeurs dans une procédure ou exporter des valeurs d'une procédure, on a besoin d'« entrées » et de « sorties ». Ces entrées et ces sorties sont appelées « paramètres formels ».

Les états actuels du processus sont transmis aux paramètres formels. Ce sont les paramètres réels.

On peut utiliser comme paramètre réel des entrées de procédure :

  • variable,

  • adresse,

  • valeur littérale.

  • Expression ST

On peut utiliser comme paramètre réel des sorties de procédure :

  • variable,

  • adresse.

Le type des données du paramètre réel doit correspondre au type des données du paramètre formel. La seule exception concerne les paramètres formels génériques dont le type de données est déterminé par le paramètre réel.

De plus, pour les paramètres formels génériques du type de données ANY_BIT, des paramètres réels du type de données INT ou DINT (pas UINT ni UDINT) peuvent être utilisés.

Il s'agit d'une extension de la norme CEI 61131-3, qui doit être activée de manière explicite.

Exemple :

Autorisé :

AND (AnyBitParam := IntVar1, AnyBitParam2 := IntVar2);

Non autorisé :

AND_WORD (WordParam1 := IntVar1, WordParam2 := IntVar2);

(Dans ce cas AND_INT doit être utilisé.)

AND_ARRAY_WORD (ArrayInt, ...);

(Dans ce cas, un changement de type explicite doit être effectué via INT_ARR_TO_WORD_ARR (...);.

Il n'est en principe pas nécessaire d'affecter une valeur à tous les paramètres formels. Pour connaître les types de paramètre formel pour lesquels cela est cependant impératif, veuillez vous reporter au tableau.

Type de paramètre

EDT

STRING

ARRAY

ANY_ARRAY

IODDT

STRUCT

FB

ANY

Entrée

-

-

+

+

+

+

+

+

VAR_IN_OUT

+

+

+

+

+

+

/

+

Sortie

-

-

-

-

-

-

/

+

+ paramètre réel impératif

- paramètre réel non impératif

/ non applicable

Si aucune valeur n’est affectée à un paramètre formel, la valeur initiale est utilisée pendant l’exécution du bloc fonction. Si aucune valeur initiale n'est définie, la valeur par défaut (0) est utilisée.

Remarques sur la programmation

Veuillez tenir compte des remarques qui suivent sur la programmation :

  • Les procédures ne sont exécutées que lorsque l'entrée EN = 1 ou lorsque l'entrée EN est désactivée (voir aussi EN et ENO).

  • Des conditions particulières s'appliquent lors de l'utilisation de variables VAR_IN_OUT.

  • Il existe deux façons d'appeler une procédure :

    • appel formel (appel avec les noms des paramètres formels)

      Des variables peuvent ainsi être affectées aux sorties via l'opérateur =>

    • appel informel (appel sans les noms des paramètres formels)

Appel formel

Pour l'appel formel (avec les noms des paramètres formels), les procédures sont appelées via une instruction qui comprend le nom de la procédure suivi d'une liste entre parenthèses des affectations des paramètres réels aux paramètres formels. L'affectation des paramètres formels des entrées s'effectue via l'affectation := et l'affectation des paramètres formels des sorties via l'affectation =>. L’ordre d’énumération des paramètres formels d'entrées et de sorties n'est pas important.

Il est possible d'utiliser EN et ENO avec ce type d'appel.

Appel d'une procédure avec les noms des paramètres formels :

Appel de la même procédure dans FBD :

Lors d'un appel formel, il n'est pas nécessaire d'affecter une valeur à tous les paramètres formels (voir également Paramètres).

PROC (IN1:=var1, OUT1=>result1, OUT2=>result2);

Appel de la même procédure dans FBD :

Appel informel

Pour l'appel informel (sans les noms des paramètres formels), les procédures sont appelées via une instruction qui comprend le nom de la procédure suivi d'une liste entre parenthèses des paramètres réels des entrées et des sorties. L’ordre d’énumération des paramètres réels dans l’appel d’une procédure est important.

EN et ENO ne peuvent pas être utilisés avec ce type d'appel.

Appel d'une procédure sans les noms des paramètres formels :

Appel de la même procédure dans FBD :

Même lors d'un appel informel, il n'est pas nécessaire d'affecter une valeur à tous les paramètres formels (voir également Paramètres).

Il s'agit d'une extension de la norme CEI 61131-3, qui doit être activée de manière explicite.

Un champ de paramètre vide permet d'omettre un paramètre.

Appel avec un champ de paramètre vide :

PROC (var1, , result1, result2) ;

Appel de la même procédure dans FBD :

Si les paramètres formels sont omis à la fin, aucun champ de paramètre vide ne doit être utilisé.

PROC (var1, var2, result1) ;

Appel de la même procédure dans FBD :

EN et ENO

Pour toutes les procédures, une entrée EN et une sortie ENO peuvent être configurées.

Si la valeur d’EN est égale à « 0 », lorsque la procédure est appelée, les algorithmes définis par cette dernière ne sont pas exécutés et ENO est mis sur « 0 ».

Si la valeur d’EN est égale à « 1 », lorsque la procédure est appelée, les algorithmes définis par la procédure sont exécutés. Après l’exécution exempte d’erreur de ces algorithmes, la valeur d’ENO est mise sur « 1 ». Si une erreur se produit durant l’exécution de ces algorithmes, ENO est mis sur « 0 ».

Si aucune valeur n'est attribuée à la broche EN à l'appel du FFB, l'algorithme défini par ce dernier est exécuté (comme lorsque EN a la valeur « 1 »).

Si ENO est mis sur « 0 » (en raison de EN=0 ou d'une erreur d'exécution), les sorties de la procédure sont mises sur « 0 ».

Le comportement de la procédure à la sortie ne dépend pas du fait que la procédure ait été appelée sans EN ou avec EN=1.

Si EN/ENO doivent être utilisés, l'appel de la procédure doit être exécuté comme un appel formel. L'affectation d'une variable à ENO doit être effectuée avec l'opérateur =>.

PROC (EN:=1, IN1:=var1, IN2:=var2, ENO=>error, OUT1=>result1, OUT2=>result2) ;

Appel de la même procédure dans FBD :

Variable VAR_IN_OUT

Très souvent, on utilise des procédures pour lire une variable au niveau de l’entrée (variables d’entrée), traiter celle-ci, et sortir à nouveau les valeurs modifiées de la même variable (variables de sortie). Ce cas particulier d'une variable d'entrée/de sortie est également appelé variable VAR_IN_OUT.

Il convient de noter les particularités suivantes dans le cas de l’utilisation de procédures avec des variables VAR_IN_OUT :

  • une variable doit être affectée à toutes les entrées VAR_IN_OUT.

  • il est interdit d’affecter des valeurs littérales ou des constantes aux entrées VAR_IN_OUT.

  • aucune valeur ne doit être affectée aux sorties VAR_IN_OUT.

  • les variables VAR_IN_OUT ne peuvent pas être utilisées en dehors de l'appel de procédure.

Appel d'une procédure avec une variable VAR_IN_OUT dans ST :

PROC2 (IN1:=V1, IN2:=V2, IO1:=V3, OUT1=>V4, OUT2=>V5) ;

Appel de la même procédure dans FBD :

Les variables VAR_IN_OUT ne peuvent pas être utilisées en dehors de l'appel de procédure.

Les appels de procédure suivants sont par conséquent invalides :

Appel non valide, exemple 1 :

InOutProc.inout := V1;

Affectation des variables V1 à un paramètre VAR_IN_OUT.

Erreur : l'opération ne peut pas être exécutée, car il n'est pas possible d'accéder au paramètre VAR_IN_OUT en dehors de l'appel de procédure.

Appel non valide, exemple 2 :

V1 := InOutProc.inout;

Affectation d'un paramètre VAR_IN_OUT à la variable V1.

Erreur : l'opération ne peut pas être exécutée, car il n'est pas possible d'accéder au paramètre VAR_IN_OUT en dehors de l'appel de procédure.

Les appels de procédure suivants sont en revanche valides :

Appel valide, exemple 1 :

InOutProc (inout:=V1);

Appel d'une procédure avec un paramètre VAR_IN_OUT et affectation formelle des paramètres réels au sein de l'appel de procédure.

Appel valide, exemple 2 :

InOutProc (V1);

Appel d'une procédure avec un paramètre VAR_IN_OUT et affectation informelle des paramètres réels au sein de l'appel de procédure.