Oggetto: Metodo
Simbolo: 
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. Per fare ciò, usa il Progetto → Aggiungi oggetto → Metodo comando e quindi aprire il Aggiungi metodo 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 ( |
<method name> | Identificatori di metodi |
<type of return 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. |
<scope list> | Ambiti:
|
<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.
|
Dichiarazione
METHOD PUBLIC DoIt : BOOL
VAR_INPUT
iInput_1 : DWORD;
iInput_2 : DWORD;
sInput_3 : STRING(12);
END_VARImplementazione
Opzionale
L'accesso alle istanze dei blocchi funzione o alle variabili del programma è consentito per l'implementazione del metodo.
Le THIS il puntatore consente l'accesso alla propria istanza del blocco funzionale. Pertanto, il puntatore è consentito solo nei metodi assegnati a un blocco funzione
Un metodo non può accedere VAR_TEMP variabili del blocco funzionale.
Un metodo può richiamare se stesso in modo ricorsivo.
Non è prevista alcuna implementazione per i metodi di interfaccia.
Metodi di interfaccia può aver dichiarato input, output e
VAR_IN_OUTvariabili, 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>
|
Dichiarazione
METHOD PUBLIC DoIt : BOOL
VAR_INPUT
iInput_1 : DWORD;
iInput_2 : DWORD;
sInput_3 : STRING(12);
END_VARChiama 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.
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, direttamente tramite THIS puntatore o tramite una variabile locale per il blocco funzionale assegnato.
<return value variable> := <POU name> . <method name> ( <argument passing> );
Richiamo diretto della relativa istanza del blocco funzione con il
THISpuntatore<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: estimated-stack-usage'« 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
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 | |
È necessaria una dichiarazione esplicita. Richiamo dopo la copia dell'istanza del blocco funzione (come durante una modifica online). Reinizializza il nuovo modulo di istanza. | |
È 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. | |
Mette a disposizione |
Dialogo: Aggiungi metodo
Funzione: Definisce un metodo sotto la POU selezionata quando la finestra di dialogo viene chiusa.
Chiama: Progetto → Aggiungi oggetto → Metodo; menu 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: I metodi standard SuggerimentoTutti i metodi sostituibili sono visibili nella casella di riepilogo. Seleziona il metodo che desideri sovrascrivere. Assicuratevi che solo i metodi con una propria implementazione siano disposti sotto un blocco funzionale. Questo è per motivi di chiarezza. Per ulteriori informazioni, vedere quanto segue: Supporto di input durante la generazione di POU ereditari |
Tipo di reso | Tipo di dati predefinito o tipo di dati strutturati del valore restituito Esempio: |
Linguaggio di attuazione | Esempio: Testo strutturato (ST) |
Identificatore di accesso | Controlla l'accesso ai dati.
|
Astratto |
|
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

