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éeEN
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 :
|
Affectation des variables Erreur : l'opération ne peut pas être exécutée,
car il n'est pas possible d'accéder au paramètre |
Appel non valide, exemple 2 :
|
Affectation d'un paramètre Erreur : l'opération ne peut pas être exécutée,
car il n'est pas possible d'accéder au paramètre |
Les appels de procédure suivants sont en revanche valides :
Appel valide, exemple 1 :
|
Appel d'une procédure avec
un paramètre |
Appel valide, exemple 2 :
|
Appel d'une procédure avec
un paramètre |