Conserva i dati con variabili persistenti
Le variabili persistenti mantengono il loro valore quando l'applicazione viene ricaricata, dopo un download, un avvio a caldo o un avvio a freddo.
Per prolungarne la durata è necessaria una speciale area di memoria non volatile sul controller, ad esempio come NVRAM o UPS. Il backup dei dati in tale spazio di archiviazione non richiede tempo aggiuntivo, il che rappresenta un vantaggio rispetto alla conservazione dei dati mediante Persistence Manager. Se il controller non offre supporto hardware, i dati vengono generalmente archiviati in un file. I dati vengono quindi conservati se si spegne correttamente il controller. In caso di interruzione di corrente o di "staccare la spina", invece, i dati andranno persi.
comportamento
conservazione del valore
Terminazione incontrollata
Avvio a caldo chiamando il comando resettare caldo
Avvio a freddo chiamando il comando Ripristina a freddo
Scarica di nuovo l'applicazione
Caricamento dell'applicazione di avvio
Reinizializzazione a
chiamando il comando reimpostare l'origine
Le variabili persistenti vengono reinizializzate solo se si ripristina il controller allo stato di consegna, ad esempio se si utilizza il comando
Selezionare.Se, invece, si carica nuovamente l'applicazione, i dati persistenti vengono mantenuti se possibile. Dipende da quanto profondi sono stati i cambiamenti. La modifica del nome dell'applicazione comporta sempre una reinizializzazione completa. Le modifiche alle implementazioni non portano mai a una reinizializzazione: la persistenza dei dati è completamente preservata. Le modifiche alle dichiarazioni portano a un'inizializzazione delle nuove variabili solo se le variabili esistenti sono persistenti, quando si modificano le dichiarazioni in modo che l'elenco delle variabili persistenti rimanga coerente. Questo è il caso quando aggiungi una nuova variabile o ne elimini una esistente. Possono verificarsi incoerenze se si modificano e cambiano gli identificatori oi tipi di dati delle variabili persistenti dichiarate in precedenza.
Meccanismo durante il download di un'applicazione o il caricamento di un'applicazione di avvio
Se si modifica l'elenco delle variabili nell'editor di persistenza, l'elenco delle variabili non viene salvato come mostrato nell'editor, ma viene automaticamente modificato prima di essere salvato.
In post-elaborazione, una variabile rimossa viene sostituita con una variabile segnaposto con lo stesso footprint di memoria. Ciò significa che le seguenti variabili mantengono i loro indirizzi nell'immagine di processo. Inoltre, qualsiasi variabile aggiunta viene spostata in fondo all'elenco. La post-elaborazione può neutralizzare i cambiamenti che porterebbero alla perdita di persistenza. Ma crei delle lacune che occupano memoria aggiuntiva.
Quando si carica l'applicazione, il valore CRC dell'elenco delle variabili e la lunghezza dell'elenco (numero di variabili) vengono memorizzati nel controller. Quando si carica nuovamente l'applicazione, il nuovo valore di test viene confrontato con il valore di test attualmente sul controller. Quindi l'elenco delle variabili viene confrontato successivamente fino alla lunghezza specificata. Se hai modificato una dichiarazione (ad esempio, il nome o il tipo di dati), la variabile viene reinizializzata. Altrimenti il suo valore viene mantenuto. Quando l'applicazione viene caricata di nuovo, CODESYS controlla se l'elenco delle variabili dichiarato nell'editor di persistenza è ancora coerente con l'elenco delle variabili già presente nel controller.
Il meccanismo funziona bene quando le variabili stesse non vengono modificate in modo significativo. Modifiche eccessive agli identificatori e ai tipi di dati continuano a portare alla reinizializzazione e alla perdita della persistenza. Pertanto, se si prevedono modifiche frequenti in base alle esigenze dell'applicazione, un elenco di questo tipo non è generalmente consigliato. Inoltre, in caso di modifica online dopo una modifica del tipo di dati, una variabile persistente è meno robusta di una variabile con una durata normale.
Fondamentalmente, dopo qualche tempo dovresti pulire l'elenco delle variabili degli spazi vuoti e il comando Riordina l'elenco e ripulisci gli spazi vuoti Correre. Tuttavia, dopo la pulizia, l'elenco non corrisponde più all'elenco sul controller e si è attivata l'inizializzazione di tutte le variabili persistenti. La persistenza di tutte le variabili è persa.
Suggerimento
Nelle versioni precedenti alla V3.5 SP1, le modifiche nell'editor di persistenza portano sempre a una reinizializzazione.
Salvare i dati tramite il gestore delle ricette
Per ripulire l'elenco delle variabili persistenti globali senza perderne la persistenza, è possibile salvare i dati in una ricetta utilizzando il gestore ricette. Un elenco per tutte le variabili dell'elenco delle variabili persistenti viene generato nel gestore ricette e allo stesso tempo i loro valori attuali vengono salvati dal controller come ricetta. Quindi seleziona il comando Riordina l'elenco e ripulisci gli spazi vuoti e quindi scaricare di nuovo. Se ora il comando Ripristina i valori dalla ricetta è selezionato, vengono ripristinati i valori salvati nella ricetta.
Modifica di una dichiarazione esistente nell'elenco delle variabili persistenti
Se si modifica il nome o il tipo di dati di una variabile, ciò viene interpretato come una nuova dichiarazione e provoca una reinizializzazione delle variabili alla successiva modifica online o caricamento di un'applicazione. Per i tipi di dati complessi, si verifica una modifica quando viene aggiunto un nuovo componente o quando si modifica il tipo di una variabile da INT
A UINT
nella profondità di una struttura usata usata, per esempio.
Fondamentalmente, i tipi di dati complessi definiti dall'utente non sono adatti per la gestione in un elenco di variabili persistenti, poiché anche piccole modifiche provocano l'inizializzazione della variabile con tutti i componenti.
Doppia allocazione di memoria nei percorsi di istanza
È possibile mantenere variabili globali o variabili dichiarate localmente in un blocco funzione o in un programma. Per fare ciò, aggiungi la parola chiave alla dichiarazione PERSISTENT
. Inoltre, aggiungi il percorso dell'istanza a questa variabile nell'elenco delle variabili globali persistenti. Per fare ciò, seleziona il comando nell'editor di persistenza Aggiungi tutti i percorsi di istanza.
La persistenza è garantita attraverso il seguente meccanismo:
Viene determinato in quali task ciclici si accede alla variabile.
Al termine del primo task ciclico (in ogni ciclo), la variabile viene copiata nell'elenco delle variabili globali persistenti.
Dopo aver riavviato il controller, il valore viene copiato dalla variabile persistente alla variabile normale.
Lo svantaggio di questo meccanismo è che la memoria viene allocata sia nel punto di dichiarazione che nel punto del percorso dell'istanza. Questa variabile persistente occupa Doppio spazio di archiviazione. Inoltre, i dati vengono copiati in entrambe le posizioni in ogni ciclo. Questo può richiedere molto tempo, soprattutto quando si tratta di valori grandi e strutturati.
Posizione di memoria per istanze di blocchi funzione persistenti
Un'istanza di blocco funzione è sempre completamente in memoria. Ciò è necessario affinché lo stesso codice possa funzionare su istanze diverse. Se ora solo una variabile in un blocco funzione con PERSISTENT
è contrassegnato, l'istanza del blocco funzione viene archiviata completamente con tutte le variabili nella memoria rimanente, sebbene solo una variabile venga considerata come persistente. Tuttavia, la memoria non volatile non è disponibile nella stessa misura della memoria principale.
Un blocco funzione che ha un puntatore a un'istanza nella SRAM come variabile non viene archiviato nella memoria protetta.
Importare da CoDeSys V2.3-progetti
Quando apri a CoDeSys V2.3 progetto in cui importarlo CODESYS V3, le dichiarazioni delle variabili persistenti non vengono preservate. È necessario rivedere le dichiarazioni e crearle di nuovo in un elenco di variabili globali persistenti separato.