Généralités

Les instances de bloc fonction dérivé (DFB) peuvent être utilisées dans tous les langages [liste d'instructions (IL), littéral structuré (ST), schéma à contacts (LD) et langage en blocs fonctionnels (FBD)], ainsi que dans toutes les tâches du programme d'application (sections, sous-programmes, etc.), à l'exception des transitions du programme SFC.

Règles générales d'utilisation

Lorsque vous utilisez un bloc fonction dérivé, vous devez respecter les consignes suivantes, quel que soit le langage utilisé :

  • Certains paramètres d'entrée, de sortie ou d'entrée/de sortie n'ont pas besoin d'être définis. Par contre, les paramètres suivants doivent obligatoirement être affectés :

    • paramètres d'entrée/de sortie,

    • paramètres de sortie de type données génériques (ANY_INT, ANY_ARRAY, ...).

  • Les paramètres suivants sont facultatifs :

    • paramètres d'entrée de type données génériques (ANY_INT, ANY_ARRAY, etc.),

    • paramètres d'entrée de type STRING.

  • Les paramètres d'entrée non définis conservent la valeur du précédent appel ou la valeur d'initialisation correspondante, si le bloc n'a jamais été appelé.

  • Tous les objets affectés aux paramètres d'entrée, de sortie et d'entrée/de sortie doivent être du même type que ceux définis lors de la création du type bloc fonction dérivé. Par exemple, si le type INT est défini pour le paramètre d'entrée « vitesse », vous ne pouvez pas affecter le type DINT ni REAL.

    Seuls les types BOOL et EBOOL peuvent être combinés pour les paramètres d'entrée et de sortie (pas pour les paramètres d'entrée/de sortie).

    Exemple : le paramètre d'entrée « Validation » peut être défini comme BOOL et associé à un bit interne %Mi de type EBOOL. Toutefois, le paramètre d'entrée possède des propriétés de type BOOL dans le code interne du type bloc fonction dérivé (il ne gère pas les fronts).

Affectation des paramètres

Le tableau ci-dessous résume les possibilités d'affectation des paramètres dans les différents langages de programmation.

Paramètre

Type

Affectation du paramètre (1)

Affectation

Entrées

EDT (2)

Défini, valeur, objet ou expression

Facultative (3)

BOOL

Défini, valeur, objet ou expression

Facultative

DDT

Défini, valeur ou objet

Facultative

DDT d'équipement

Défini ou objet

Obligatoire

ANY_…

Défini ou objet

Facultative

ANY_ARRAY

Défini ou objet

Facultative

Entrées/sorties

EDT

Défini ou objet

Obligatoire

DDT

Défini ou objet

Obligatoire

DDT d'équipement

Défini ou objet

Obligatoire

IODDT

Défini ou objet

Obligatoire

ANY_…

Défini ou objet

Obligatoire

ANY_ARRAY

Défini ou objet

Obligatoire

Sorties

EDT

Défini ou objet

Facultative

DDT

Défini ou objet

Facultative

ANY_…

Défini ou objet

Obligatoire

ANY_ARRAY

Défini ou objet

Obligatoire

(1) Défini en langage schéma à contacts (LD) ou langage en blocs fonctionnels (FBD). Valeur ou objet en langage littéral structuré (ST) ou liste d'instructions (IL).

(2) Sauf paramètres de type BOOL

(3) Sauf paramètres de type STRING, qui sont obligatoires

Règles d'utilisation des blocs fonction dérivés avec des tableaux

Lorsque vous utilisez des tableaux dynamiques, il est obligatoire de vérifier que la taille des tableaux est identique. Dans un cas spécifique, avec des tableaux dynamiques en sortie ou en entrée/sortie, un dépassement peut entraîner une exécution incorrecte du programme et arrêter le contrôleur.

Ce comportement se produit si les conditions ci-dessous sont remplies simultanément :

  • Un bloc fonction dérivé avec au moins un paramètre de sortie ou d'entrée/de sortie de type de tableau dynamique (ANY_ARRAY_XXX) est utilisé.

  • Dans le codage d'un bloc fonction dérivé, une fonction ou un bloc fonction (FFB de type FIFO, LIFO, MOVE, MVX, T2T, SAH ou SEL) est utilisé(e). Notez que la fonction ou le bloc fonction a besoin de deux paramètres de type ANY avec au moins un paramètre défini en sortie.

  • Le paramètre DFB du tableau dynamique est utilisé en écriture pendant l'appel du FFB (sur le paramètre de type ANY). Pour les autres paramètres ANY, un tableau de taille fixe est utilisé.

  • La taille du tableau de taille fixe est supérieure à la taille du tableau dynamique calculée pour stocker le résultat.

Exemple de vérification de la taille des tableaux

L'exemple ci-dessous indique comment vérifier la taille des tableaux à l'aide de la fonction LENGTH_ARWORD dans un bloc fonction dérivé.

Dans cet exemple, Table_1 est un tableau de taille fixe, Table_2 est un tableau dynamique de type ANY_ARRAY_WORD. Ce programme vérifie la taille de chaque tableau. Les fonctions LENGTH_ARWORD calculent la taille de chaque tableau afin de conditionner l'exécution de la fonction MOVE.