Implementa un'interfaccia
Implementa un'interfaccia
L'implementazione delle interfacce si basa sul concetto di programmazione orientata agli oggetti. È anche possibile utilizzare blocchi funzione diversi ma simili allo stesso modo tramite interfacce comuni.
Un blocco funzione che implementa un'interfaccia deve contenere tutti i metodi e le proprietà definiti in questa interfaccia (metodi di interfaccia e proprietà dell'interfaccia). Ciò significa: nome, input e output del rispettivo metodo o proprietà devono essere esattamente gli stessi.
Quando crei un nuovo modulo funzione che implementa un'interfaccia, aggiunge CODESYS inserisce automaticamente tutti i metodi e le proprietà di questa interfaccia sotto il nuovo modulo funzione nell'albero.
Importante
Dopodiché, se aggiungi più metodi all'interfaccia, aggiunge CODESYS questi metodi non vengono aggiunti automaticamente ai moduli funzione pertinenti. Per l'aggiornamento è necessario utilizzare esplicitamente il comando implementare interfacce scegliere.
Nel caso di blocchi funzione derivati, è necessario assicurarsi che i metodi o le proprietà che sono stati adottati per "ereditarietà" da un'interfaccia ricevano l'implementazione desiderata o vengano cancellati se si vuole utilizzare l'implementazione nella base. Riceverai corrispondenti messaggi di errore di traduzione o avvisi, provocati da attributi pragma inseriti automaticamente. Si prega di consultare la pagina della guida del comando implementare interfacce.
Importante
È necessario assegnare l'interfaccia di un blocco funzione a una variabile del tipo di interfaccia prima di poter richiamare un metodo tramite la variabile.
Una variabile del tipo di interfaccia è sempre un riferimento dell'istanza del blocco funzione assegnata.
Una variabile del tipo di interfaccia è un riferimento a istanze di blocchi funzione. Tale variabile può fare riferimento a qualsiasi blocco funzione che implementa l'interfaccia. Se non è stata eseguita alcuna assegnazione alla variabile, la variabile contiene il valore in modalità online 0
.
l'interfaccia I1
contiene il metodo GetName
.
METHOD GetName : STRING
I blocchi funzione A
e B
ciascuno implementa l'interfaccia I1
:
FUNCTION_BLOCK A IMPLEMENTS I1 FUNCTION_BLOCK B IMPLEMENTS I1
Entrambi i moduli funzione devono quindi avere un metodo con il nome GetName
e il tipo di reso STRING
contenere. In caso contrario il compilatore segnala un errore.
Una funzione contiene la dichiarazione di una variabile del tipo interfaccia I1
.
FUNCTION DeliverName : STRING VAR_INPUT l_i : I1; END_VAR
Blocchi funzione che l'interfaccia I1
attrezzo, può essere assegnato a questa variabile di input.
Esempi di chiamate di funzione:
DeliverName(l_i := A_instance); // call with instance of type A DeliverName(l_i := B_instance); // call with instance of type B
Chiamando il metodo di interfaccia:
In questo caso dipende dal tipo effettivo di l_i
da se l'applicazione A.GetName
o B.GetName
chiamate.
DeliverName := l_i.GetName();
Implementazione di un'interfaccia in un nuovo modulo funzione
Presupposto: il progetto attualmente aperto dispone di almeno un oggetto interfaccia.
Selezionare Applicazione nell'albero dei dispositivi e selezionare il comando di menu .
Il dialogo Aggiungi POU si apre.
Immettere un nome per il nuovo modulo funzione nel campo di immissione Cognome uno, per esempio POU_Im.
Scegliere modulo funzionale.
Scegliere implementato e fare clic sul pulsante
.
Nell'helper per l'immissione, scegli dalla categoria interfacce l'interfaccia per esempio
ITF1
e fare clic ok.Per aggiungere un'altra interfaccia, fare nuovamente clic
e seleziona un'altra interfaccia.
Opzionalmente puoi averne uno modificatore di accesso per il nuovo modulo funzione dall'elenco di selezione.
Scegli dall'elenco a discesa linguaggio di attuazione Per esempio Testo strutturato (ST) fuori.
clicca su Aggiungere a.
CODESYS aggiunge il blocco funzione POU_Ex nell'albero dei dispositivi e si apre l'editor. La prima riga dice:
FUNCTION_BLOCK POU_Im IMPLEMENTS ITF1
L'interfaccia, i suoi metodi e le sue proprietà sono ora inseriti nell'albero dei dispositivi sotto il blocco funzione ed è ora possibile inserire il codice del programma nella parte di implementazione dell'interfaccia e i suoi metodi.
Implementazione di un'interfaccia in un blocco funzione esistente
Presupposto: il progetto attualmente aperto dispone ad es. di un blocco funzionale POU_Im e almeno un oggetto interfaccia, per esempio ITF1.
Fare doppio clic sulla POU nella struttura dei dispositivi POU_Ex(FB).
Si apre l'editor della POU.
Espandi la voce della riga superiore esistente
FUNCTION_BLOCK POU_Im
ConIMPLEMENTS ITF1
.Il blocco funzione POU_Im implementa l'interfaccia ITF1.