Procédure

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

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.

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

  • variable,

  • adresse.

Le type de données du paramètre réel doit correspondre au type de 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 (...).

Pour l'appel formel, 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 and 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 d'une fonction avec les noms des paramètres formels)

      Des variables peuvent alors être affectées aux sorties via l'opérateur => (appel d'un bloc fonction sous forme abrégée).

    • appel informel (appel d'une fonction sans les noms des paramètres formels)

Appel formel

Avec cette forme d'appel (avec les noms des paramètres formels), les procédures sont appelées via une suite d'instructions composée d'une instruction optionnelle CAL suivie du nom de la procédure et d'une liste entre parenthèses des affectations de 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.

La liste des paramètres réels peut être éditée directement après une virgule.

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 :

ou

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

ou

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

ou

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

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 Parameter).

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

ou

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

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

Appel informel sans instruction CAL

Avec cette forme d'appel (sans les noms des paramètres formels), les procédures sont appelées via une suite d'instructions qui comprend le chargement du premier paramètre réel dans l'accumulateur suivi du nom de la procédure, lui-même suivi d'une liste optionnelle des paramètres réels des entrées et sorties. L’ordre d’énumération des paramètres réels est important. La liste des paramètres réels ne peut pas être éditée.

EN et ENO ne peuvent pas être utilisés 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 :

NOTE : veuillez noter que pour l'appel informel, la liste des paramètres réels ne doit pas être indiquée entre parenthèses. La norme CEI 61133-3 exige dans ce cas d'enlever les parenthèses, afin d'indiquer que le premier paramètre réel ne fait pas partie de la liste.

Appel informel non valide d'une procédure :

Si la valeur à traiter (premier paramètre réel) se trouve déjà dans l’accumulateur, l’instruction de chargement n’est plus nécessaire.

EXAMP1 var2,result1,result2

Appel informel avec instruction CAL

Avec cette forme d'appel, les procédures sont appelées par une suite d'instructions composée de l'instruction CAL suivie du nom de la procédure, suivi lui-même de la liste entre parenthèses des paramètres réels des entrées et sorties. L’ordre d’énumération des paramètres réels est important. La liste des paramètres réels ne peut pas être éditée.

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

Appel d'une procédure avec les noms de paramètres formels et l'instruction CAL :

ou

CAL PROC (var1, var2, result1, result2)

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

NOTE : contrairement à l'appel informel sans instruction CAL, dans le cadre de l'appel informel avec instruction CAL, la valeur à traiter (le premier paramètre réel) n'est pas chargée explicitement dans l'accumulateur, mais fait partie de la liste des paramètres réels. Par conséquent, lors d'appels informels à l'aide d'une instruction CAL, la liste des paramètres réels doit être indiquée entre parenthèses.

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. Une fois les algorithmes exécutés, la valeur de la sortie ENO est réglée sur « 1 ». En cas d'erreur lors de l'exécution de ces algorithmes, la sortie ENO est réglée 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 ».

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 IL :

PROC3 (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 :

LD V1

Chargement de la variable V1 dans l'accumulateur

CAL InOutProc

Appel d'une procédure avec un paramètre VAR_IN_OUT.

L'accumulateur est alors chargé avec référence à un paramètre VAR_IN_OUT.

AND V2

Liaison ET du contenu de l'accumulateur avec la variable V2.

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 (contenu de l'accumulateur) en dehors de l'appel de procédure.

Appel non valide, exemple 2 :

LD V1

Chargement de la variable V1 dans l'accumulateur

AND InOutProc.inout

Liaison ET du contenu de l'accumulateur avec référence à 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 3 :

LD V1

Chargement de la variable V1 dans l'accumulateur

InOutFB V2

Appel de la procédure avec affectation du paramètre réel (V2) au paramètre VAR_IN_OUT.

Erreur : l'opération ne peut pas être exécutée car, pour ce type d'appel de procédure, le paramètre VAR_IN_OUT continuerait d'être utilisable dans l'accumulateur.

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

Appel valide, exemple 1 :

CAL InOutProc (IN1:=V1,inout:=V2)

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 (IN1:=V1,inout:=V2)

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 3 :

CAL InOutProc (V1,V2)

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.