La version V1.1 d' EcoStruxure Machine Expert ne prend pas en charge les contrôleurs M258, LMC058 et LMC078.

Mise en œuvre d'interfaces

Présentation

Pour prendre en charge la programmation orientée objet, un bloc fonction peut mettre en œuvre plusieurs interfaces qui permettent d'utiliser des méthodes.

Syntaxe

FUNCTION_BLOCK <nom du bloc fonction> IMPLEMENTS <nom interface_1>|,<nom interface_2>, …, <nom interface_n>

Un bloc fonction qui met en œuvre une interface doit contenir toutes les méthodes et toutes les propriétés (propriétés d'interface) définies par cette interface. Il s'agit du nom, des entrées et de la sortie de la méthode ou propriété concernée qui doivent être rigoureusement identiques.

Pour cela, lors de la création d'un nouveau bloc fonction mettant en œuvre une interface, toutes les méthodes et toutes les propriétés définies dans cette interface sont automatiquement insérées sous le nouveau bloc fonction dans l'arborescence des applications.

NOTE : si des méthodes sont ajoutées à la définition d'interface par la suite, elles ne sont pas ajoutées automatiquement dans les blocs fonction concernés et des erreurs de compilateur sont générées. Exécutez la commande Implémenter les interfaces… pour effectuer cette mise à jour de façon explicite.

Lorsque vous utilisez l'héritage des blocs fonction, prenez en compte le point suivant : si des méthodes ou des attributs ont été créés par héritage d'une interface, mettez-les en œuvre ou supprimez-les si vous devez utiliser l'implémentation du bloc fonction de base. Les attributs pragma sont insérés automatiquement. Ils sont détectés lors de la compilation et des messages sont générés pour vous rappeler que les méthodes ou propriétés héritées doivent être vérifiées. Supprimez les attributs pragma après avoir mis en œuvre complètement le nouveau bloc fonction.

Pour plus d'informations, consultez la description de la commande Implémenter les interfaces.

Exemple

INTERFACE I1 inclut la méthode GetName :

METHOD GetName : STRING

Les blocs fonction A et B mettent en œuvre tous les deux l'interface I1 :

FUNCTION_BLOCK A IMPLEMENTS I1
FUNCTION_BLOCK B IMPLEMENTS I1

Ainsi, la méthode GetName doit être disponible dans les deux blocs fonction et sera placée automatiquement sous chacun lors de leur insertion dans l'arborescence Applications.

Examinez la déclaration d'une variable de type I1 :

FUNCTION DeliverName : STRING 
VAR_INPUT 
  l_i : I1; 
END_VAR 

Cette entrée peut recevoir tous les blocs fonction qui mettent en œuvre l'interface I1.

Exemple d'appels de fonction :

DeliverName(l_i := A_instance); // call with instance of type A 
DeliverName(l_i := B_instance); // call with instance of type B 

NOTE : Une instance de bloc fonction doit être affectée à une variable de type interface pour pouvoir appeler une méthode pour cette variable. Une variable de type interface fait toujours référence à l'instance de bloc fonction affectée.

Un appel à la méthode d'interface se traduisit donc par un appel à la mise en œuvre du bloc fonction. Dès que la référence est affectée, l'adresse correspondante est surveillée en mode en ligne. Si aucune référence n'a encore été affectée, la valeur 0 s'affiche lors de la surveillance en mode en ligne.

Dans l'exemple, consultez la partie relative à la mise en œuvre de la fonction DeliverName :

DeliverName := l_i.GetName(); // in this case it depends on the "real" type of l_i whether A.GetName or B.GetName is called

NOTE : Examinez également la possibilité d'étendre un bloc fonction en ajoutant le mot-clé EXTENDS dans la déclaration.