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éeEN
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 :

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 :

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 :
|
Chargement de la variable |
|
Appel d'une procédure avec
un paramètre L'accumulateur
est alors chargé avec référence à un paramètre |
|
Liaison ET du contenu de l'accumulateur
avec la variable 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 :
|
Chargement de la variable |
|
Liaison ET du contenu de l'accumulateur
avec référence à 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 |
Appel non valide, exemple 3 :
|
Chargement de la variable |
|
Appel de la procédure avec
affectation du paramètre réel ( Erreur : l'opération ne peut
pas être exécutée car, pour ce type d'appel de procédure,
le 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 |
Appel valide, exemple 3 :
|
Appel d'une procédure avec
un paramètre |