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.

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

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 :

  • 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 ou ARRAY 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 fonction SAH étant de type ANY.

    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 :

  • 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 ;
NOTE : les DDT de type Array ne peuvent pas être affectés de cette manière, contrairement aux DDT de type Structure.

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 :

InOutFB.inout := V1;

Affectation des variables V1 à 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 d'un bloc fonction.

Appel non valide, exemple 2 :

V1 := InOutFB.inout;

Affectation d'un paramètre VAR_IN_OUT à la variable V1.

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 d'un bloc fonction.

Les appels de blocs fonction suivants sont en revanche valides :

Appel valide, exemple 1 :

InOutFB (inout:=V1);

Appel d'un bloc fonction avec un paramètre VAR_IN_OUT et affectation formelle des paramètres réels au sein de l'appel de bloc fonction.

Appel valide, exemple 2 :

InOutFB (V1);

Appel d'un bloc fonction avec un paramètre VAR_IN_OUT et affectation informelle des paramètres réels au sein de l'appel de bloc fonction.