Objet : Méthode
Symbole:
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 Ajouter une méthode la boîte de dialogue s'ouvre.
. Puis leVous 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 ( |
<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. |
<scope list> | Champs d'application :
|
<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.
|
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>
|
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.
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
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 | |
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. | |
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. | |
Fournit |
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 : ; 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 : Les méthodes standards |
Type de retour | Type de données par défaut ou type de données structurées de la valeur de retour Exemple: |
Langage d'implémentation | Exemple : Texte structuré (ST) |
Spécificateur d'accès | Contrôle l'accès aux données.
|
Abstrait |
|
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,
