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. Clic Aggiungi metodo si apre la finestra di dialogo.
. Poi ilÈ 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 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. |
<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_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>
|
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.
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
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.
Chiamata: ; 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: I metodi standard |
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,
