La versione 1.1 di EcoStruxure Machine Expert non supporta i controllori M258, LMC058 e LMC078.

Tipi di metodi

 

FB_Init, FB_Reinite FB_ExitMetodi

Scopo generico dei metodi

È possibile utilizzare esplicitamente i metodi FB_Init e FB_Reinit per influenzare l'inizializ­zazione delle variabili del blocco funzione oltre al comportamento all'uscita dai blocchi funzione.

Questo capitolo descrive i metodi, le applicazioni e gli effetti dei metodi in diverse condizioni che richiedono l'inizializzazione delle variabili.

FB_Init

Per impostazione predefinita, il metodo FB_Init è disponibile implicitamente. Viene utilizzato da EcoStruxure Machine Expert per inizializzare un blocco funzione o una struttura.

Per influenzare l'inizializzazione, è possibile dichiarare esplicitamente il metodo FB_Init estendendo il codice di inizializzazione predefinito dato. Ciò consente di valutare il valore restituito.

FB_Reinit

Il metodo FB_Reinit deve essere dichiarato esplicitamente.

Il metodo FB_Reinit, se è disponibile, viene chiamato dopo aver copiato l'istanza del blocco funzione (durante una modifica online dopo le modifiche nella dichiarazione del blocco funzione). Reinizializza il modulo della nuova istanza. Il valore restituito non viene valutato. Per ottenere la reinizializzazione del blocco funzione di base, chiamare FB_Reinit esplicitamente per tale blocco funzione. Ciò consente di valutare il valore restituito.

FB_Exit

Il metodo FB_Exit deve essere dichiarato esplicitamente.

Se è presente una implementazione, il metodo viene chiamato prima che il controller rimuova il codice dell'istanza del blocco funzione (chiamata implicita). Il valore restituito non viene valutato.

Il paragrafo seguente contiene casi d'uso di questi metodi per diverse condizioni operative.

Primo download

Quando si scarica un'applicazione in un controller nello stato predefinito, le ubicazioni di memoria delle variabili sono impostate allo stato iniziale desiderato. Le aree dati dei blocchi funzione sono impostate ai valori desiderati. È possibile influenzare questo processo implementando esplicitamente FB_Init per i blocchi funzione nel codice programma dell'applicazione.

I parametri del metodo bInCopyCode impostati su FALSE e bInitRetains impostato su TRUE indicano che è in esecuzione un primo download.

Modifica online

Quando si esegue un comando di Modifica online, è possibile utilizzare i metodi FB_Exit, FB_Init e FB_Reinit per influenzare l'inizializzazione dei blocchi funzione.

Durante la modifica online, le modifiche apportate all'applicazione in modalità offline vengono scaricate nel controller. Le istanze dei blocchi funzione vengono aggiornate dalle nuove istanze come indicato di seguito:

Se le modifiche sono state apportate solo nella parte di implementazione del blocco funzione e non nella parte di dichiarazione, le aree dati non vengono sostituite. I metodi FB_Init, FB_Reinit e FB_Exit non vengono chiamati.

Se sono state apportate modifiche nella parte di dichiarazione di un blocco funzione, il processo di copia descritto nel paragrafo FB_Reinit viene eseguito quando si esegue il comando di Modifica online. Un elenco degli oggetti modificati dall'ultimo download è fornito nella finestra di dialogo Informazioni applicazione. Aprire questa finestra di dialogo facendo clic sul pulsante Dettagli... nella finestra di dialogo in cui è selezionata l'opzione Esegui l'accesso con modifica in linea.

I parametri del metodo FB_Init e FB_Reinit bInCopyCode impostato su TRUE e bInitRetains impostato su FALSE indicano che è in esecuzione una modifica online.

Chiamate eseguite durante una modifica online

L'esecuzione del comando Modifica in linea può modificare il contenuto degli indirizzi.

Caution_Color.gifATTENZIONE

PUNTATORE NON VALIDO

Verificare la validità del puntatore quando si utilizzano i puntatori sugli indirizzi e durante l'esecuzione del comando Modifica in linea.

Il mancato rispetto di queste istruzioni può provocare infortuni o danni alle apparecchiature.

Passo

Azione

Commento

1

FB_Exit

old_inst.FB_Exit(bInCopyCode := TRUE);

Viene chiamato FB_Exit per iniziare un processo di cancellazione prima di avviare il processo di copia.

Vengono preparati i dati per il successivo processo di copia influenzando lo stato della nuova istanza.

Altre parti dell'applicazione vengono informate sulle modifiche di posizione eseguite nella memoria.

Tenere presente che le variabili di tipo POINTER o REFERENCE mantengono i loro valori durante una modifica online e potrebbero non fare più riferimento alle ubicazioni di memoria desiderate al termine del processo. Le variabili di tipo INTERFACE vengono adattate durante una modifica online. Le risorse esterne, come socket, file o altri handle possono essere adottati dalla nuova istanza e spesso non richiedono elaborazione separata durante la modifica online quando la risorsa di sistema non è interessata dal processo di copia della modifica online. Se necessario, deve essere elaborato nelle implementazioni in Init o Reinit.

2

FB_Init

new_inst.FB_Init(bInitRetains := FALSE, bInCo­pyCode := TRUE);

FB_Init può essere utilizzato per eseguire operazioni specifiche durante il processo di modifica online.

Ad esempio, inizializzazione adeguata delle variabili alle nuove ubicazioni di memoria o indicazione di informazioni sulla nuova posizione di determinate variabili in altre parti dell'applicazione.

3

Operazione di copia copy

copy(&old_inst, &new_inst);

I valori esistenti restano invariati. Per questo scopo, vengono copiati dall'istanza precedente in quella nuova.

4

FB_Reinit

new_inst.FB_Reinit();

Il metodo FB_Reinit viene copiato dopo l'operazione di copia. Imposta le variabili dell'istanza del blocco funzione su valori predefiniti.

Ad esempio, è possibile inizializzare in modo adeguato le variabili alle nuove ubicazioni di memoria o fornire informazioni sulla nuova posizione di determinate variabili in altre parti dell'applicazione.

Implementare il metodo FB_Reinit indipendentemente dalla modifica online poiché il metodo può essere chiamato dall'applicazione in qualsiasi momento, qualora si debba ripristinare un blocco funzione allo stato originale.

NOTA: Se si aggiunge il pragma {attribute no_copy} a una variabile di un blocco funzione, tale variabile non viene copiata durante la modifica online; verrà solo inizializzata.

Download di un'applicazione aggiornata

Quando si scarica un'applicazione su un controller che esegue già un'applicazione, l'applicazione esistente viene sostituita. È possibile utilizzare il metodo FB_Exit, ad esempio, per assegnare uno stato definito a risorse esterne (come un socket o file handle).

I parametri del metodo bInCopyCode impostato su FALSE e bInitRetains impostato su FALSE indicano che è in esecuzione il download di un'applicazione aggiornata.

Avvio di un'applicazione

Prima di eseguire il primo ciclo dei task di un'applicazione, vengono elaborate le assegnazioni iniziali.

Esempio:

T1 : TON := (PT:=t#500ms);

Le assegnazioni sono eseguite dopo aver chiamato FB_Init. Per poter verificare gli impatti di tali assegnazioni, collegare il {attribute call_after_init} pragma a un blocco funzione e un metodo di un blocco funzione (ad esempio, MyInit chiamato). Inserire questo attributo sopra la parte di dichiarazione del blocco funzione e sopra la parte di dichiarazione del metodo corrispondente. Collegare il pragma anche ai blocchi funzione che si estendono ad altri blocchi funzione che utilizzano il pragma {attribute call_after_init}. Si raccomanda di assegnare lo stesso nome, la stessa firma e lo stesso attributo al metodo corrispondente. Per questo scopo, chiamare SUPER^.MyInit. Selezionare il nome di un metodo prescelto (tranne FB_Init, FB_Reinit e FB_Exit). Il metodo viene chiamato dopo aver elaborato le assegnazioni iniziali e prima di avviare i task di un'applicazione.

NOTA: Quando si esegue il codice di inizializzazione definito esplicitamente, il blocco funzione è già stato completamente inizializzato tramite il codice di inizializzazione implicito. Per questo, non è consentita la chiamata a SUPER^.FB_Init.

Interfaccia del metodo FB_Init

METHOD FB_Init : BOOL
VAR_INPUT
  bInitRetains : BOOL; // TRUE: the retain variables are initialized (reset warm /reset cold)
  bInCopyCode : BOOL; // TRUE the instance will be copied to the copy-code afterward (online change)
END_VAR

Il valore restituito non viene utilizzato.

In un metodo FB_Init, è possibile dichiarare ingressi del blocco funzione aggiuntivi. Assegnare gli ingressi nella dichiarazione di un'istanza del blocco funzione.

Esempio: metodo FB_Init per un blocco funzione serialdevice:

METHOD PUBLIC FB_Init : BOOL
VAR_INPUT
    bInitRetains : BOOL; // Initialization of the retain variables
    bInCopyCode : BOOL; // Instance is copied to copy-code
    iCOMnum : INT; // additional input: number of the COM interface that is to be observed
END_VAR

Definizione istanza di blocco funzione serialdevice:

    com1: serialdevice (iCOMnum:=1);
    com0: serialdevice (iCOMnum:=0);

Interfaccia del metodo FB_Reinit

METHOD FB_Reinit : BOOL

Interfaccia del metodo FB_Exit

Il parametro bInCopyCode. è obbligatorio.

METHOD FB_Exit : BOOL
VAR_INPUT
bInCopyCode : BOOL; // TRUE: the exit method is called in order to leave the instance which will be copied afterwards (online change).
END_VAR

Blocchi funzione derivati

Se un blocco funzione è derivato da un altro blocco funzione, il metodo FB_Init del blocco funzione derivato deve definire gli stessi parametri del metodo FB_Init del blocco funzione di base. Tuttavia, è possibile aggiungere ulteriori parametri per implementare un'inizializzazione speciale per l'istanza.

Esempio dell'ordine di chiamata di blocchi funzione derivati per FB_Exit e FB_Init

Passo

Azione

1

fbSubSubFb.FB_Exit(...);

2

fbSubFb.FB_Exit(...);

3

fbMainFb.FB_Exit(...);

4

fbMainFb.FB_Init(...);

5

fbSubFb.FB_Init(...);

6

fbSubSubFb.FB_Init(...);