Bloc fonction élémentaire
Les blocs fonction élémentaires ont des états internes. Pour des valeurs égales aux entrées, la valeur à la sortie peut être différente à chaque exécution du bloc fonction. Pour un compteur, par exemple, la valeur de la sortie est incrémentée.
Les blocs fonction peuvent comprendre plusieurs valeurs de renvoi (sorties).
Bloc fonction dérivé
Les blocs fonction dérivés (DFB) ont les mêmes caractéristiques que les blocs fonction élémentaires. Ils sont cependant créés par l'utilisateur dans les langages FBD, LD, IL et/ou ST.
Paramètre
Pour importer des valeurs dans un bloc fonction ou les exporter d'un bloc fonction, des entrées et des sorties sont nécessaires. Elles sont appelées paramètres formels.
Les états actuels du processus sont transmis aux paramètres formels. Ces objets sont appelés paramètres réels.
Pour les entrées de bloc fonction, on peut utiliser un paramètre réel de type :
Variable
Adresse
Littéral
Pour les sorties de bloc fonction, on peut utiliser des paramètres réels de type :
Variable
Adresse
Le type des données des paramètres réels doit correspondre à celui des paramètres formels. 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.
Exception :
Pour les paramètres formels
génériques de type ANY_BIT
, des paramètres
réels de type INT
ou DINT
(pas UINT
ni UDINT
) peuvent être utilisés.
Il s'agit d'une extension de la norme IEC 61131-3, qui doit faire l'objet d'une activation 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. Le tableau suivant répertorie les types de paramètres formels auxquels une valeur doit être affectée :
Type de paramètre |
EDT |
STRING |
ARRAY |
ANY_ARRAY |
IODDT |
DEVICE DDT |
FB |
ANY |
---|---|---|---|---|---|---|---|---|
EFB : Entrée |
- |
- |
- |
- |
/ |
/ |
/ |
- |
EFB : VAR_IN_OUT |
+ |
+ |
+ |
+ |
+ |
/ |
/ |
+ |
EFB : Sortie |
- |
- |
+ |
+ |
+ |
/ |
/ |
+ |
DFB : Entrée |
- |
- |
- |
- |
/ |
+ |
/ |
- |
DFB : VAR_IN_OUT |
+ |
+ |
+ |
+ |
+ |
+ |
/ |
+ |
DFB : Sortie |
- |
- |
+ |
/ |
/ |
/ |
/ |
+ |
+ Paramètre réel impératif |
||||||||
- Paramètre réel non obligatoire. C'est la règle, mais certains FFB font exception. Par exemple, lorsque certains paramètres servent à caractériser les informations que le FFB doit fournir. |
||||||||
/ Sans objet |
Si aucune valeur n'est affectée à un paramètre formel, la valeur initiale est utilisée pour exécuter le bloc fonction. Si aucune valeur initiale n'est définie, la valeur par défaut (0) est utilisée.
Si aucune valeur n'est affectée à un paramètre formel et que le bloc fonction/DFB a été instancié à plusieurs reprises, les instances appelées par la suite utilisent l'ancienne valeur.
Variables publiques
Certains blocs fonction disposent non seulement d'entrées et de sorties, mais également de variables publiques.
Ces variables permettent de transmettre des valeurs statistiques (valeurs non influencées par le procédé) au bloc fonction. Elles sont donc utilisées lors du paramétrage du bloc fonction.
Les variables publiques sont une extension de la norme IEC 61131-3.
Des valeurs sont affectées aux variables publiques via leur valeur initiale ou par les instructions de chargement et d'enregistrement.
Exemple :

Les variables publiques sont ensuite lues via le nom d'instance du bloc fonction et le nom de la variable publique.
Exemple :

Variables privées
Certains blocs fonction disposent non seulement d'entrées, de sorties et de variables publiques, mais également de variables privées.
A l'instar des variables publiques, ces variables servent à transmettre des valeurs statistiques (non influencées par le processus) au bloc fonction.
Le programme utilisateur n'a pas accès à ces variables. Seule la table d'animation en a la capacité.
Les variables privées sont une extension de la norme IEC 61131-3.
Remarques sur la programmation
Gardez à l'esprit les remarques suivantes sur la programmation :
Les fonctions ne sont exécutées que lorsque l'entrée
EN
= 1 ou lorsque l'entréeEN
est inutilisée (voir aussi EN et ENO).L'affectation des variables aux sorties
ANY
ouARRAY
doit être effectuée avec l'opérateur=>
(voir également Forme formelle de CAL avec liste des paramètres d'entrée).Une affectation en dehors du cadre de l'appel de bloc fonction n'est pas possible.
L'instruction
My_Var := My_SAH.OUT
n'est pas valide, la sortie
OUT
du bloc fonctionSAH
étant de typeANY
.L'instruction
Cal My_SAH (OUT=>My_Var)
est en revanche valide.
Des conditions particulières s'appliquent lors de l'utilisation de variables VAR_IN_OUT.
L'utilisation des blocs fonction comprend deux parties :
la déclaration,
l'appel du bloc fonction.
Il existe quatre façons d'appeler un bloc fonction :
forme formelle de CAL avec liste des paramètres d'entrée (appel avec les noms des paramètres formels)
Des variables peuvent ainsi être affectées aux sorties via l'opérateur
=>
.forme informelle de CAL avec liste des paramètres d'entrée (appel sans les noms des paramètres formels)
CAL et chargement/sauvegarde du paramètre d'entrée
Les instances de bloc fonction/DFB peuvent être appelées plusieurs fois, à l'exception des instances d'EFB de communication qui ne peuvent être appelées qu'une seule fois (voir Appel multiple d'une instance de bloc fonction).
Déclaration
Avant d'être appelé, un bloc fonction doit être déclaré dans l'éditeur de variables.
Forme formelle de CAL avec liste des paramètres d'entrée
Dans cette forme d'appel
(avec les noms des paramètres formels), les blocs fonction sont
appelés via une instruction CAL
suivie du nom
d'instance du bloc fonction et d'une liste entre parenthèses
des affectations de paramètres réels aux paramètres
formels. L'affectation des paramètres formels d'entrée s'effectue
via :=
et l'affectation des paramètres formels
de sortie via =>
. L'ordre d'énumération
des paramètres formels d'entrée et de sortie 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'un bloc fonction dans la forme formelle de CAL avec liste des paramètres d'entrée :

ou
CAL MY_COUNT (CU:=var1,
R:=reset,
PV:=100,
Q=>out,
CV=>current)
Appel du même bloc fonction en FBD :

Il n'est pas nécessaire d'affecter une valeur à tous les paramètres formels (voir aussi Paramètre).
CAL MY_COUNT (CU:=var1, R:=reset, Q=>out, CV=>current)
Appel du même bloc fonction en FBD :

La valeur d'une sortie de bloc fonction peut être stockée puis sauvegardée en chargeant la sortie du bloc fonction (nom d'instance du bloc fonction séparé par un point ou saisie du paramètre formel).
Chargement et sauvegarde des sorties de bloc fonction :

Forme informelle de CAL avec liste des paramètres d'entrée
Dans cette forme
d'appel (sans les noms des paramètres formels), les blocs fonction
sont appelés via l'instruction CAL
suivie du
nom d'instance du bloc fonction et d'une liste entre parenthèses
des paramètres réels des entrées et sorties. L'ordre
d'énumération des paramètres réels dans l'appel
d’un bloc fonction 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'un bloc fonction dans la forme informelle de CAL avec liste des paramètres d'entrée :

Appel du même bloc fonction en 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ètre).
Il s'agit d'une extension de la norme IEC 61131-3, qui doit donc ê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 :
CAL MY_COUNT (var1, , 100, out, current)
Appel du même bloc fonction en FBD :

Si les paramètres formels sont omis à la fin, aucun champ de paramètre vide ne doit être utilisé.
MY_COUNT (var1, reset)
Appel du même bloc fonction en FBD :

CAL et chargement/sauvegarde des paramètres d'entrée
Vous pouvez appeler les
blocs fonction à l’aide d’une liste d’instructions
demandant le chargement des paramètres réels suivi de leur
sauvegarde dans les paramètres formels, puis de l’instruction CAL
. L’ordre de chargement et de sauvegarde des paramètres n'est pas important.
Seules les instructions de chargement et de sauvegarde du bloc fonction en cours de configuration doivent figurer entre la première instruction de chargement des paramètres réels et l'appel du bloc fonction. Aucune autre instruction n'est autorisée à cet endroit.
Il n'est pas nécessaire d'affecter une valeur à tous les paramètres formels (voir aussi Paramètre).
CAL avec chargement/sauvegarde des paramètres d'entrée :

Utilisation des opérateurs d'entrée
Vous pouvez appeler les blocs fonction à l’aide d’une liste d’instructions demandant le chargement des paramètres réels suivi de leur sauvegarde dans les paramètres formels, puis d’un opérateur d’entrée. L’ordre de chargement et de sauvegarde des paramètres n’est pas important.
Seules les instructions de chargement et de sauvegarde du bloc fonction en cours de configuration doivent figurer entre la première instruction de chargement des paramètres réels et l'opérateur d'entrée du bloc fonction. Aucune autre instruction n’est autorisée à cet endroit.
Ce type d'appel n'autorise pas l'utilisation
de EN
et ENO
.
Il n'est pas nécessaire d'affecter une valeur à tous les paramètres formels (voir aussi Paramètre).
Reportez-vous au tableau pour connaître les opérateurs d’entrée disponibles pour les différents blocs fonction. Aucun autre opérateur d'entrée n'est disponible.
Opérateur d’entrée |
Type de FB |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Utilisation des opérateurs d’entrée :

Appel d'un bloc fonction sans entrées
Même si le bloc fonction ne dispose pas d'entrées ou si les entrées ne sont pas à paramétrer, vous devez appeler le bloc fonction avant de pouvoir utiliser ses sorties. Faute de quoi, le système transmettra les valeurs initiales des sorties, c'est-à-dire « 0 ».
Ex. :
Appel du bloc fonction en IL :
CAL MY_CLOCK ()CAL MY_COUNT (CU:=MY_CLOCK.CLK1, R:=reset, PV:=100)
LD MY_COUNT.Q
ST out
LD MY_COUNT.CV
ST current
Appel du même bloc fonction en FBD :

Appel multiple d'une instance de bloc fonction
Les instances de bloc fonction/DFB peuvent être appelées plusieurs fois, à l'exception des instances d'EFB de communication qui ne peuvent être appelées qu'une seule fois.
L'appel multiple d'une même instance de DFB/bloc fonction est, par exemple, utile dans les cas suivants :
Si le bloc fonction/DFB n'a aucune valeur interne ou s'il n'est pas nécessaire pour un traitement ultérieur.
Dans ce cas, multiplier les appels de la même instance de DFB/bloc fonction permet d'économiser de l'espace mémoire, car le code du bloc fonction/DFB n'est chargé qu'une seule fois.
Le bloc fonction/DFB est, pour ainsi dire, traité comme une « fonction ».
Si le bloc fonction/DFB a une valeur interne censée influencer différents segments du programme, la valeur d'un compteur, par exemple, doit être augmentée en différents endroits du programme.
Dans ce cas, l'appel multiple de la même instance de bloc fonction/DFB permet de ne pas sauvegarder les résultats intermédiaires en vue d'un traitement ultérieur à un autre endroit du programme.
EN et ENO
Pour tous les blocs fonction/DFB, une
entrée EN
et une sortie ENO
peuvent être configurées.
Si la valeur de EN
est égale à « 0 », lorsque le bloc
fonction/DFB est appelé, les algorithmes définis par ce
dernier ne sont pas exécutés et ENO
est
mis à « 0 ».
Au cas où la valeur d'EN
est égale à « 1 », lorsque le bloc
fonction/DFB est appelé, les algorithmes définis par ce
dernier sont exécutés. Après l'exécution sans
erreur de ces algorithmes, la valeur de ENO
est réglée
sur « 1 ». Si une erreur se produit durant l'exécution
de ces algorithmes, ENO
est réglé 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
à « 0 » (du fait de EN
= 0 ou d'une
erreur d'exécution), les sorties du bloc fonction/DFB conservent
l'état qu'elles avaient au dernier cycle exécuté correctement.
Le comportement aux sorties des blocs fonction/DFB est le même,
que les blocs fonction/DFB aient été appelés sans EN
/ENO
ou avec EN
= 1.
Si EN
/ENO
doivent être
utilisés, l'appel du bloc fonction doit être exécuté
sous forme d'appel formel. L'affectation d'une variable à ENO
doit être effectuée avec l'opérateur =>
.
CAL MY_COUNT (EN:=1, CU:=var1, R:=reset, PV:=value,
ENO=>error, Q=>out, CV=>current) ;
Appel du même bloc fonction en FBD :

Variable VAR_IN_OUT
Très souvent,
on utilise des blocs fonction pour lire une variable au niveau de
l’entrée (variables d’entrée), traiter celle-ci,
et sortir les valeurs modifiées de la même variable (variables
de sortie). Ce type particulier de variable d'entrée/de sortie
est également appelé variable VAR_IN_OUT
.
Il convient de noter les particularités suivantes lors
de l’utilisation de blocs fonction/DFB 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 du bloc fonction.
Appel d'un bloc fonction avec une variable VAR_IN_OUT
en IL :
CAL MY_FBLOCK(IN1:=V1, IN2:=V2, IO1:=V3,
OUT1=>V4, OUT2=>V5)
Appel du même bloc fonction en FBD :

Les variables VAR_IN_OUT
ne peuvent pas être utilisées en dehors de l'appel du bloc fonction.
Par conséquent, les appels de blocs fonction suivants ne sont pas valides :
Appel non valide, exemple 1 :
|
Chargement de la variable |
|
Appel d'un bloc fonction avec un
paramètre L'accumulateur contient
désormais une référence à un paramètre |
|
Opération ET sur le contenu
de l'accumulateur et 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 |
|
Opération ET sur le contenu
de l'accumulateur et une 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 |
Les appels de blocs fonction suivants sont en revanche valides :
Appel valide, exemple 1 :
|
Appel d'un bloc fonction avec le
paramètre |
Appel valide, exemple 2 :
|
Chargement de la variable |
|
Affectation du contenu de l'accumulateur
au paramètre |
|
Appel du bloc fonction avec affectation
du paramètre réel ( |