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.

NOTE : une broche d'entrée ANY_ARRAY_xxx non connectée crée automatiquement un tableau masqué comportant 1 élément.

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é.

NOTE : les DFB imbriqués sont déclarés comme des variables privées du DFB parent. Ainsi, leurs variables ne sont pas accessibles via la programmation, mais via la table d'animation.

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 :

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

S1, R

SR

S, R1

RS

CLK

R_TRIG

CLK

F_TRIG

CU, R, PV

CTU_INT, CTU_DINT, CTU_UINT, CTU_UDINT

CD, LD, PV

CTD_INT, CTD_DINT, CTD_UINT, CTD_UDINT

CU, CD, R, LD, PV

CTUD_INT, CTUD_DINT, CTUD_UINT, CTUD_UDINT

IN, PT

TP

IN, PT

TON

IN, PT

TOF

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 :

LD V1

Chargement de la variable V1 dans l'accumulateur

CAL InOutFB

Appel d'un bloc fonction avec un paramètre VAR_IN_OUT.

L'accumulateur contient désormais une référence à un paramètre VAR_IN_OUT.

AND V2

Opération ET sur le contenu de l'accumulateur et 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 d'un bloc fonction.

Appel non valide, exemple 2 :

LD V1

Chargement de la variable V1 dans l'accumulateur

AND InOutFB.inout

Opération ET sur le contenu de l'accumulateur et une 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 du bloc fonction.

Les appels de blocs fonction suivants sont en revanche valides :

Appel valide, exemple 1 :

CAL InOutFB (IN1:=V1,inout:=V2

Appel d'un bloc fonction avec le paramètre VAR_IN_OUT et affectation du paramètre réel dans l'appel de bloc fonction.

Appel valide, exemple 2 :

LD V1

Chargement de la variable V1 dans l'accumulateur

ST InOutFB.IN1

Affectation du contenu de l'accumulateur au paramètre IN1 du bloc fonction IN1.

CAL InOutFB(inout:=V2)

Appel du bloc fonction avec affectation du paramètre réel (V2) au paramètre VAR_IN_OUT.