Skip to main content

Objet : Méthode

Symbole: _cds_icon_method.png

Mot-clé: METHOD

Les méthodes sont une extension de la norme CEI 61131-3 et un outil de programmation orientée objet qui est utilisé pour l'encapsulation des données. Une méthode contient une déclaration et une implémentation. Cependant, contrairement à une fonction, une méthode n'est pas une POU indépendante et elle est subordonnée à un bloc fonctionnel ou à un programme. Une méthode peut accéder à toutes les variables valides du POU supérieur.

Vous pouvez ajouter une méthode sous un programme ou un bloc fonction. Cliquez sur Projet → Ajouter un objet → Méthode. Puis le Ajouter une méthode la boîte de dialogue s'ouvre.

Vous pouvez utiliser des interfaces pour l'organisation des méthodes.

Pour plus d'informations, consultez : Implémenter une interface

Important

Lorsque vous copiez une méthode sous une POU et que vous l'ajoutez sous une interface, ou que vous y déplacez la méthode, l'implémentation contenue est automatiquement supprimée.

Déclaration

Syntaxe:

METHOD <access specifier> <method name> : <type of return value>

<access specifier>

Facultatif

Spécificateur d'accès

Selon le spécificateur d'accès déclaré, une méthode ne peut être appelée que dans son propre espace de noms (INTERNAL), uniquement dans son propre POU et ses dérivés (PROTECTED), ou uniquement dans son propre POU (PRIVATE). Pour PUBLIC, la méthode peut être appelée de n'importe où.

<method name>

Identifiants des méthodes

<type of retur value>

Facultatif

Type de retour de la méthode

Remarque : Dans le cas de méthodes qui n'ont pas de type de retour explicite, la première sortie déclarée est utilisée comme valeur de retour. Une méthode ne renvoie pas de valeur uniquement si ni le type de retour ni la sortie ne sont déclarés. Cependant, une erreur de compilation n'est pas générée dans les deux cas.

Tableau 59. Portées possibles avec déclaration de variable (paramètre)

<scope list>

Champs d'application :

  • VAR_IN_OUT <variable declaration list> END_VAR

    Pour la déclaration de variables pour les variables d'entrée/sortie

  • VAR_INPUT <variable declaration list> END_VAR

    Pour la déclaration de variables pour les entrées

  • VAR_OUTPUT <variable declaration list> END_VAR

    Pour la déclaration de variables pour les sorties

    Comme les fonctions, les méthodes peuvent avoir des sorties supplémentaires. Vous devez également transmettre des arguments (variables) aux sorties supplémentaires lorsque vous appelez la méthode.

  • VAR <variable declaration list> END_VAR

    Pour la déclaration de variable à des fins locales

<variable declaration list>

Déclaration des variables

<variable name> : <data type> := <initial value> ;

Liste délimitée par des points-virgules de variables (paramètres) affectées à une portée en fonction de leur objectif.

  • Les variables d'entrée et d'entrée/sortie peuvent avoir une valeur initiale qui leur est attribuée

    L'attribution d'une valeur initiale est facultative. Cependant, si l'un est spécifié, le passage d'un argument pour ce paramètre peut être omis lors de l'appel de la méthode. Ces types de paramètres sont appelés paramètres facultatifs.

  • Les variables d'une méthode (paramètre) contiennent des données temporaires qui ne sont valides que pendant l'exécution de la méthode (variables de pile). Toutes les variables déclarées et implémentées dans une méthode sont réinitialisées à chaque appel de la méthode.



Exemple 517. Exemple

Déclaration

METHOD PUBLIC DoIt : BOOL
VAR_INPUT
        iInput_1 : DWORD;
        iInput_2 : DWORD;
        sInput_3 : STRING(12);
END_VAR


Mise en œuvre

Facultatif

  • L'accès aux instances de bloc fonction ou aux variables de programme est autorisé pour la mise en œuvre de la méthode.

  • Le CE pointeur permet d'accéder à sa propre instance de bloc fonction. Par conséquent, le pointeur n'est autorisé que dans les méthodes affectées à un bloc fonction.

  • Une méthode ne peut pas accéder VAR_TEMP variables du bloc fonction.

  • Une méthode peut s'appeler elle-même de manière récursive.

  • Il n'y a pas d'implémentation pour les méthodes d'interface

    Méthodes d'interface peut avoir déclaré une entrée, une sortie et VAR_IN_OUT variables, mais ne contiennent pas d'implémentation.

Appel d'une méthode

Syntaxe des appels :

<return value variable> := <POU name> . <method name> ( <argument passing> );

<return value variable>

Variable pour la valeur de retour

Le type doit correspondre au type de retour de la méthode.

Remarque : Dans le cas de méthodes qui n'ont pas de type de retour explicite, la première sortie déclarée est utilisée comme valeur de retour. Une méthode ne renvoie pas de valeur uniquement si ni le type de retour ni la sortie ne sont déclarés. Cependant, une erreur de compilation n'est pas générée dans les deux cas.

<POU name>

Identifiant de l'instance du bloc fonctionnel sous lequel la méthode est organisée

<method name>

Identifiants des méthodes

<argument passing>

Liste délimitée par des virgules avec les arguments réels

Un argument est passé à chaque paramètre (variable) de la méthode :

<parameter name> := <actual argument>

  • Chaque entrée/sortie ou entrée déclarée se voit attribuer l'argument réel. L'argument peut être une valeur (littérale), une expression ou une variable avec un type correspondant.

  • L'argument réel (variable de même type) est affecté à chaque sortie déclarée. L'argument doit être une variable avec le type correspondant.

  • Passer un argument pour une entrée ou une entrée/sortie peut être omis.

    Par conséquent, le nombre d'arguments dans la liste peut être inférieur au nombre de paramètres (périmètre d'entrée ou entrée/sortie). En particulier, s'il s'agit d'un paramètre facultatif pour lequel une valeur par défaut ou initiale a été spécifiée dans la déclaration, la transmission d'un argument peut être omise.

    Astuce : si vous obtenez de l'aide de l'assistant de saisie lors de l'appel de la méthode, il vous informera des valeurs initiales existantes.

  • Il est facultatif de passer un argument avec la spécification du paramètre avec le nom et l'opérateur d'affectation.

    Spécifier uniquement l'argument est suffisant. L'ordre des variables dans la déclaration détermine alors quel argument est passé à quel paramètre.

Exemple 518. Exemple

Déclaration

METHOD PUBLIC DoIt : BOOL
VAR_INPUT
        iInput_1 : DWORD;
        iInput_2 : DWORD;
        sInput_3 : STRING(12);
END_VAR

Appel avec passage d'un argument à un paramètre

bFinishedMethod := fbInstance.DoIt(sInput_3 := 'Hello World ', iInput_2 := 16#FFFF, iInput_1 := 16);

Lorsque la méthode est appelée, la valeur de retour de la méthode est affectée à une variable déclarée localement.



Exemple 519. Exemple

Si vous omettez les noms des variables d'entrée, l'affectation des arguments résulte de l'ordre de déclaration.

Déclaration

METHOD PUBLIC DoIt : BOOL
VAR_INPUT
        iInput_1 : DWORD;
        iInput_2 : DWORD;
        sInput_3 : STRING(12);
END_VAR
IF iInput_1 = iInput_2 THEN
	DoIt := TRUE; // explicit return value
END_IF

Appel en passant un argument selon l'ordre dans la déclaration

bFinishedMethod := fbInstance.DoIt( 16, 16#0010,'Hello World ');


Appel de méthode récursif

Au sein de l'implémentation, une méthode peut s'appeler elle-même, soit directement au moyen du CE pointeur ou au moyen d'une variable locale pour le bloc fonction affecté.

  • <return value variable> := <POU name> . <method name> ( <argument passing> );

    Appel direct de l'instance de bloc fonction concernée avec le THIS aiguille

  • <return value variable> := <POU name> . <method name> ( <argument passing> );

    Appel au moyen d'une variable locale de la méthode qui instancie temporairement le bloc fonction concerné

Un avertissement du compilateur est émis en cas de récursivité appel. Si la méthode est fournie avec le pragma {attribute 'estimated-stack-usage' := '<estimated stack size in bytes>'}, l'avertissement du compilateur est supprimé.

Pour un exemple d'implémentation, voir "Attribut : 'utilisation estimée de la pile'" chapitre.

Pour appeler des méthodes de manière récursive, il ne suffit pas de spécifier uniquement le nom de la méthode. Si seul le nom de la méthode est spécifié, une erreur de compilation est émise : Nom de programme, fonction ou instance de bloc fonction attendu au lieu de

Méthodes spéciales d'un bloc fonction

FB_Init

Déclarations automatiquement implicites, mais déclaration explicite également possible

Contient le code d'initialisation du bloc fonction, tel qu'il est défini dans la partie déclaration du bloc fonction

FB_Reinit

Une déclaration explicite est nécessaire.

Appel après la copie de l'instance du bloc fonction (comme lors d'une modification en ligne). Il réinitialise le nouveau module d'instance.

FB_Exit

Une déclaration explicite est nécessaire.

Appel pour chaque instance du bloc fonction avant un nouveau téléchargement ou une réinitialisation ou lors d'un changement en ligne pour toutes les instances décalées ou supprimées.

Propriétés

Fournit Set et/ou Get méthodes d'accès.

Dialogue: Ajouter une méthode

Fonction : Définit une méthode sous le POU sélectionné lorsque la boîte de dialogue est fermée.

Appel : Projet → Ajouter un objet → Méthode; menu contextuel

Exigence : Un programme (PRG) ou un bloc fonction (FUNCTION_BLOCK) est sélectionné dans le POU vu ou les Dispositifs voir.

Avis

L'interface d'une méthode insérée sous un bloc fonction de base est copiée lorsqu'une méthode portant le même nom est insérée sous un bloc fonction dérivé.

Nom

Exemple : meth_DoIt.

Les méthodes standards FB_Init et FB_Exit sont proposés dans une zone de liste s'ils ne sont pas déjà insérés sous le POU. S'il s'agit d'un bloc fonction dérivé, la zone de liste propose également toutes les méthodes du bloc fonction de base.

Type de retour

Type de données par défaut ou type de données structurées de la valeur de retour

Exemple: BOOL

Langage d'implémentation

Exemple : Texte structuré (ST)

Spécificateur d'accès

Contrôle l'accès aux données.

  • PUBLIQUE ou non spécifié : l'accès n'est pas restreint.

  • PRIVÉ : L'accès est limité au programme, au bloc fonction ou au GVL.

    L'objet est marqué comme (private) dans la vue POU ou appareil. La déclaration contient le mot clé PRIVATE.

  • PROTÉGÉ : L'accès est limité au programme, au bloc fonction ou au GVL avec ses dérivés. La déclaration contient le mot clé PROTECTED.

    L'objet est marqué comme (protected) dans la vue POU ou appareil.

  • INTERNE : L'accès à la méthode est limité à l'espace de noms (bibliothèque).

    L'objet est marqué comme (internal) dans la vue POU ou appareil. La déclaration contient le mot clé INTERNAL.

Abstrait

standard icon⁣ : Identifie que la méthode n'a pas d'implémentation et que l'implémentation est fournie par le FB dérivé.

Ajouter

Ajoute une nouvelle méthode sous l'objet sélectionné.

Prise en charge des entrées lors de la génération de POU héritées

Lorsque vous faites de la programmation orientée objet et que vous utilisez l'héritage (EXTENDS mot-clé) des POU, vous pouvez obtenir de l'aide comme suit :

Lorsque vous insérez une action, une propriété, une méthode ou une transition sous un POU dérivé d'un POU de base, le Ajouter … la boîte de dialogue s'ouvre. Ensuite, le champ de saisie du nom s'étend jusqu'à une zone de liste. La zone de liste contient une sélection valide parmi les actions, propriétés, méthodes ou transitions disponibles dans la POU de base. Vous pouvez désormais, par exemple, accepter facilement une méthode de la POU de base, puis l'adapter à la fonction dérivée de la POU.

Méthodes et propriétés avec le modificateur d'accès PRIVATE ne sont pas répertoriés ici car ils ne sont pas non plus hérités. Méthodes et propriétés avec le modificateur d'accès PUBLIC obtient automatiquement un champ de modificateur d'accès vide lors de l'acceptation dans le POU dérivé, ce qui signifie la même chose sur le plan fonctionnel.

Pour plus d'informations, voir : Biens, Méthode, Transition, Action,

Exemple 520. Exemple
_cds_img_input_wizzard_for_blocks.png