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ètres
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.
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 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 |
DDT d'équipement |
STRUCT |
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. |
|||||||||
/ 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.
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 travaillent avec 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 au travers d'affectations.
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 blocs fonction ne sont exécutés que si l'entrée EN est à 1 ou n'est pas utilisée.
L'affectation de variables aux sorties de type
ANY
ouARRAY
doit être effectuée via l'opérateur=>
.Une affectation en dehors de l'appel d'un 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 dans ST :
l'appel du bloc fonction
Il existe deux façons d'appeler un bloc fonction :
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)
Les instances de bloc fonction/DFB peuvent être appelées plusieurs fois, contrairement aux instances d'EFB de communication qui ne peuvent être appelées qu'une seule fois.
Déclaration
Avant d'être appelé, un bloc fonction doit être déclaré dans l'éditeur de variables.
Appel formel
Avec des appels formels (comprenant des noms de paramètres formels), les blocs fonction sont appelés via une séquence constituée des noms des instances de blocs fonction suivis d'une liste entre parenthèses des affectations de paramètres réels aux paramètres formels. Utilisez l'opérateur := pour affecter les paramètres formels d'entrée et l'opérateur => pour les paramètres formels de sortie. L'ordre d'énumération des paramètres formels d'entrée et de sortie n'est pas important.
Il est possible d'utiliser EN
et ENO
avec ce type d'appel.
Appel d'un bloc fonction avec les noms des paramètres formels :

Appel du même bloc fonction dans FBD :

Pour affecter la valeur d'une sortie de bloc fonction, entrez le nom réel du paramètre, puis l'instruction d'affectation := suivie du nom d'instance du bloc fonction, puis chargez le paramètre formel de la sortie du bloc fonction (séparé par un point).
Par exemple :
MY_COUNT (CU:=var1, R:=reset, PV:=100 + value);
Q := MY_COUNT.out ;
CV := MY_COUNT.current ;
Il n'est pas nécessaire d'affecter une valeur à tous les paramètres formels.
MY_COUNT (CU:=var1, R:=reset, Q=>out, CV=>current);
Appel du même bloc fonction dans FBD :

Appel informel
Pour l'appel informel (sans les noms des paramètres formels), les blocs fonction sont appelés via une instruction qui comprend le nom d'instance du bloc fonction 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’un bloc fonction est important.
EN
et ENO
ne peuvent pas être utilisés
avec ce type d'appel.
Appel d'un bloc fonction sans les noms des paramètres formels :

Appel du même bloc fonction dans FBD :

Dans le cas d'appels informels, il n'est pas nécessaire
d'affecter une valeur à tous les paramètres formels. Cela ne s'applique pas aux variables VAR_IN_OUT
, aux paramètres d'entrée avec des longueurs dynamiques
et aux sorties de type ANY
. Une variable doit toujours
être affectée.
Il s'agit d'une extension de la norme CEI 61131-3 et 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 :
MY_COUNT (var1, , 100 + value, out, current) ;
Appel du même bloc fonction dans 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 dans FBD :

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 ».
Par exemple :
Appel du bloc fonction dans ST :
MY_CLOCK () ;MY_COUNT (CU:=MY_CLOCK.CLK1, R:=reset, PV:=100,
Q=>out, CV=>current) ;
Appel du même bloc fonction dans 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, l'appel multiple 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.
Au cas où la valeur
d'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 réglé sur « 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 mis
à « 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 de variables à ENO
doit être effectuée avec l'opérateur =>
.
MY_COUNT (EN:=1, CU:=var1, R:=reset, PV:=100 + value,
ENO=>error, Q=>out, CV=>current) ;
Appel du même bloc fonction dans FBD :

VAR_IN_OUT-Variable
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
à nouveau les valeurs modifiées de la même variable
(variables de sortie). Ce cas exceptionnel d'une 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
dans ST :
MY_FBLOCK(IN1:=V1, IN2:=V2, IO1:=V3, OUT1=>V4, OUT2=>V5);
Appel du même bloc fonction dans 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 :
|
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 blocs fonction suivants sont en revanche valides :
Appel valide, exemple 1 :
|
Appel d'un bloc fonction avec un
paramètre |
Appel valide, exemple 2 :
|
Appel d'un bloc fonction avec un
paramètre |