Skip to main content

Oggetto: Metodo

Simbolo: _cds_icon_method.png

Parola chiave: METHOD

I metodi sono un'estensione dello standard IEC 61131-3 e uno strumento per la programmazione orientata agli oggetti che viene utilizzato per l'incapsulamento dei dati. Un metodo contiene una dichiarazione e un'implementazione. Tuttavia, a differenza di una funzione, un metodo non è una POU indipendente ed è subordinato a un blocco funzione oa un programma. Un metodo può accedere a tutte le variabili valide della POU sovraordinata.

È possibile aggiungere un metodo sotto un programma o un blocco funzione. Clic Progetto → Aggiungi oggetto → Metodo. Poi il Aggiungi metodo si apre la finestra di dialogo.

È possibile utilizzare le interfacce per l'organizzazione dei metodi.

Per ulteriori informazioni, vedere: Implementa un'interfaccia

Importante

Quando si copia un metodo sotto una POU e lo si aggiunge sotto un'interfaccia o si sposta il metodo lì, l'implementazione contenuta viene rimossa automaticamente.

Dichiarazione

Sintassi:

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

<access specifier>

Opzionale

Identificatore di accesso

A seconda dello specificatore di accesso dichiarato, un metodo può essere chiamato solo all'interno del proprio spazio dei nomi (INTERNAL), solo all'interno del proprio POU e dei suoi derivati (PROTECTED), o solo all'interno della propria POU (PRIVATE). Per PUBLIC, il metodo può essere chiamato da qualsiasi posizione.

<method name>

Identificatori di metodi

<type of retur value>

Opzionale

Tipo restituito del metodo

Nota: nel caso di metodi che non hanno un tipo restituito esplicito, il primo output dichiarato viene utilizzato come valore restituito. Un metodo non restituisce un valore solo se non vengono dichiarati né il tipo restituito né l'output. Tuttavia, in entrambi i casi non viene generato un errore del compilatore.

Tabella 59. Possibili ambiti con dichiarazione di variabile (parametro)

<scope list>

Ambiti:

  • VAR_IN_OUT <variable declaration list> END_VAR

    Per la dichiarazione di variabili per variabili di ingresso/uscita

  • VAR_INPUT <variable declaration list> END_VAR

    Per la dichiarazione di variabili per gli input

  • VAR_OUTPUT <variable declaration list> END_VAR

    Per la dichiarazione di variabili per le uscite

    Come le funzioni, i metodi possono avere output aggiuntivi. È inoltre necessario passare argomenti (variabili) agli output aggiuntivi quando si chiama il metodo.

  • VAR <variable declaration list> END_VAR

    Per la dichiarazione di variabili per scopi locali

<variable declaration list>

Dichiarazione di variabile

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

Elenco delimitato da punto e virgola di variabili (parametri) assegnate a un ambito in base al loro scopo.

  • Alle variabili per input e input/output può essere assegnato un valore iniziale

    L'assegnazione di un valore iniziale è facoltativa. Tuttavia, se ne viene specificato uno, il passaggio di un argomento per questo parametro può essere omesso quando si chiama il metodo. Questi tipi di parametri sono chiamati parametri facoltativi.

  • Le variabili di un metodo (parametro) contengono dati temporanei validi solo durante l'esecuzione del metodo (variabili di stack). Tutte le variabili dichiarate e implementate in un metodo vengono reinizializzate ogni volta che viene chiamato il metodo.



Esempio 517. Esempio

Dichiarazione

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


Implementazione

Opzionale

  • L'accesso alle istanze dei blocchi funzione o alle variabili del programma è consentito per l'implementazione del metodo.

  • IL QUESTO puntatore consente l'accesso alla propria istanza del blocco funzione. Pertanto, il puntatore è consentito solo nei metodi assegnati a un blocco funzione.

  • Un metodo non può accedere VAR_TEMP variabili del blocco funzione.

  • Un metodo può chiamare se stesso in modo ricorsivo.

  • Non esiste alcuna implementazione per i metodi di interfaccia

    Metodi di interfaccia può aver dichiarato input, output e VAR_IN_OUT variabili, ma non contengono un'implementazione.

Chiamare un metodo

Sintassi per le chiamate:

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

<return value variable>

Variabile per il valore restituito

Il tipo deve corrispondere al tipo restituito del metodo.

Nota: nel caso di metodi che non hanno un tipo restituito esplicito, il primo output dichiarato viene utilizzato come valore restituito. Un metodo non restituisce un valore solo se non vengono dichiarati né il tipo restituito né l'output. Tuttavia, in entrambi i casi non viene generato un errore del compilatore.

<POU name>

Identificatore dell'istanza del blocco funzione in cui è disposto il metodo

<method name>

Identificatori di metodi

<argument passing>

Elenco delimitato da virgole con gli argomenti effettivi

Un argomento viene passato a ciascun parametro (variabile) del metodo:

<parameter name> := <actual argument>

  • A ogni input/output o input dichiarato viene assegnato l'argomento effettivo. L'argomento può essere un valore (letterale), un'espressione o una variabile con tipo corrispondente.

  • L'argomento effettivo (variabile dello stesso tipo) viene assegnato a ciascun output dichiarato. L'argomento deve essere una variabile con il tipo corrispondente.

  • Il passaggio di un argomento per un input o un input/output può essere omesso.

    Pertanto, il numero di argomenti nell'elenco può essere inferiore al numero di parametri (ambito di input o input/output). In particolare, se si tratta di un parametro facoltativo per il quale nella dichiarazione è stato specificato un valore predefinito o iniziale, è possibile omettere il passaggio di un argomento.

    Suggerimento: se ricevi aiuto dall'Input Assistant quando chiami il metodo, allora ti informerà sui valori iniziali esistenti.

  • È facoltativo passare un argomento con la specifica del parametro con nome e operatore di assegnazione.

    È sufficiente specificare solo l'argomento. L'ordine delle variabili nella dichiarazione determina quindi quale argomento viene passato a quale parametro.

Esempio 518. Esempio

Dichiarazione

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

Chiama con il passaggio di un argomento a un parametro

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

Quando viene chiamato il metodo, il valore restituito dal metodo viene assegnato a una variabile dichiarata localmente.



Esempio 519. Esempio

Se si omettono i nomi delle variabili di input, l'assegnazione degli argomenti risulta dall'ordine di dichiarazione.

Dichiarazione

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

Chiamata con il passaggio di un argomento secondo l'ordine nella dichiarazione

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


Chiamata ricorsiva al metodo

All'interno dell'implementazione, un metodo può chiamare se stesso, sia direttamente tramite il QUESTO puntatore o tramite una variabile locale per il blocco funzione assegnato.

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

    Richiamo diretto della relativa istanza del blocco funzione con il THIS puntatore

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

    Chiamata tramite variabile locale del metodo che istanzia temporaneamente il relativo blocco funzione

Viene emesso un avviso del compilatore in caso di ricorsivo chiamata. Se il metodo viene fornito con pragma {attribute 'estimated-stack-usage' := '<estimated stack size in bytes>'}, l'avviso del compilatore viene soppresso.

Per un esempio di implementazione, vedere "Attributo: 'utilizzo stimato dello stack'" capitolo.

Per chiamare i metodi in modo ricorsivo, non è sufficiente specificare solo il nome del metodo. Se viene specificato solo il nome del metodo, viene emesso un errore del compilatore: Nome del programma, funzione o istanza del blocco funzione previsto invece di

Metodi speciali di un blocco funzione

FB_Init

Dichiarazioni automaticamente implicite, ma è possibile anche una dichiarazione esplicita

Contiene il codice di inizializzazione per il blocco funzione, come definito nella parte relativa alla dichiarazione del blocco funzione

FB_Reinit

È necessaria una dichiarazione esplicita.

Richiamo dopo la copia dell'istanza del blocco funzione (come durante una modifica online). Reinizializza il nuovo modulo di istanza.

FB_Esci

È necessaria una dichiarazione esplicita.

Richiamare per ogni istanza del blocco funzione prima di un nuovo download o di un reset o durante una modifica online per tutte le istanze spostate o cancellate.

Proprietà

Mette a disposizione Set e/o Get metodi di accesso.

Dialogo: Aggiungi metodo

Funzione: Definisce un metodo sotto la POU selezionata quando la finestra di dialogo viene chiusa.

Chiamata: Progetto → Aggiungi oggetto → Metodo; menù contestuale

Requisiti: Un programma (PRG) o un blocco funzione (FUNCTION_BLOCK) è selezionato nel POU vista o il Dispositivi Visualizza.

Avviso

L'interfaccia di un metodo inserito sotto un blocco funzione di base viene copiata quando un metodo con lo stesso nome viene inserito sotto un blocco funzione derivato.

Nome

Esempio: meth_DoIt.

I metodi standard FB_Init e FB_Exit sono offerti in una casella di riepilogo se non sono già inseriti sotto la POU. Se si tratta di un blocco funzione derivato, la casella di riepilogo offre anche tutti i metodi del blocco funzione di base.

Tipo di reso

Tipo di dati predefinito o tipo di dati strutturati del valore restituito

Esempio: BOOL

Linguaggio di attuazione

Esempio: Testo strutturato (ST)

Identificatore di accesso

Controlla l'accesso ai dati.

  • PUBBLICO o non specificato: l'accesso non è limitato.

  • PRIVATO: L'accesso è limitato al programma, blocco funzione o GVL.

    L'oggetto è contrassegnato come (private) nella vista POU o dispositivo. La dichiarazione contiene la parola chiave PRIVATE.

  • PROTETTO: L'accesso è limitato al programma, blocco funzione o GVL con le sue derivazioni. La dichiarazione contiene la parola chiave PROTECTED.

    L'oggetto è contrassegnato come (protected) nella vista POU o dispositivo.

  • INTERNO: L'accesso al metodo è limitato allo spazio dei nomi (libreria).

    L'oggetto è contrassegnato come (internal) nella vista POU o dispositivo. La dichiarazione contiene la parola chiave INTERNAL.

Astratto

standard icon: identifica che il metodo non ha un'implementazione e l'implementazione è fornita dall'FB derivato.

Aggiungere

Aggiunge un nuovo metodo sotto l'oggetto selezionato.

Supporto di input durante la generazione di POU ereditari

Quando si esegue la programmazione orientata agli oggetti e si utilizza l'ereditarietà (EXTENDS parola chiave) delle POU, puoi ottenere assistenza come segue:

Quando si inserisce un'azione, una proprietà, un metodo o una transizione sotto una POU derivata da una POU di base, il Aggiungere … si apre la finestra di dialogo. Quindi il campo di input per il nome si estende a una casella di riepilogo. La casella di riepilogo contiene una selezione valida tra le azioni, le proprietà, i metodi o le transizioni disponibili nella POU di base. Ora puoi, ad esempio, accettare facilmente un metodo della POU di base e quindi adattarlo alla funzione derivata della POU.

Metodi e proprietà con il modificatore di accesso PRIVATE non sono elencati qui perché non sono nemmeno ereditati. Metodi e proprietà con il modificatore di accesso PUBLIC ottenere automaticamente un campo modificatore di accesso vuoto quando si accetta nella POU derivata, il che significa la stessa cosa dal punto di vista funzionale.

Per ulteriori informazioni, vedere: Proprietà, Metodo, Transizione, Azione,

Esempio 520. Esempio
_cds_img_input_wizzard_for_blocks.png