Questo blocco funzione da eseguire in task Back, gestisce il backup su un’area di memoria allocata all’indirizzo definito in MBAdd per il numero di bytes definito in MBSize su su disco. In Filename, occorre definire il percorso ed il nome del file di backup (Non definire estensioni), il FB provvederà a creare due files nel percorso e con il nome definito con estensioni bk1 e bk2.
Alla attivazione di Enable viene eseguita la lettura da disco del file definito verificando quali tra i due file di backup è corretto ed è il più recente, ed esegue il restore dei dati dal disco al buffer di memoria definito. Al termine del restore si attiva l’uscita Ready e se il restore è stato eseguito correttamente si attiva l’uscita RestOk.
Con Enable attivo e Ready attivo, ogni tempo definito in BckTime viene verificato se nel buffer di memoria vi sono state variazioni dei dati, in tal caso i dati dalla memoria sono trasferiti ciclicamente nei due files di backup. Attivando l’ingresso BckTrig è possibile forzare il backup dei dati indipendentemente dal tempo definito. In FWCtr viene ritornato il conteggio delle operazioni di scrittura dei due file di backup.
Per eseguire il backup è preferibile aggiungere una SDCard al sistema perchè come noto i dischi su memoria FLASH come il disco C: o anche le SDCard hanno una “vita” cioè un numero di operazioni in scrittura definito. La memoria FLASH dei sistemi SlimLine ha circa 100.000 cicli di scrittura. Se esegui il backup di 512 bytes di memoria ogni minuto avendo implementato il wear leveling sul disco hai una vita teorica di circa 100 anni. Ma se scrivessi ogni secondo la vita sarebbe solo di 20 mesi. Aumentando la dimensione dell’area di backup si ha una diminuzione della vita che non è proporzionale alla dimensione ma dipende da quanti dati cambiano nell’area di backup.
Descrizione
Enable (BOOL) Su attivazione esegue il restore dei dati dal file definito. Se abilitato la sequenza di backup è gestita automaticamente.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB (Vedi articolo).
BckTrig (BOOL) Comando esecuzione immediata backup dei dati.
Filename (@STRING]) Percorso e nome del file (Senza estensione) su cui eseguire il backup (es.: ADR(‘C:/Backup’)).
MBAdd (PVOID) Pointer a buffer di memoria.
MBSize (UDINT) Dimensione in bytes del buffer di memoria.
BckTime (Time) Tempo di pausa tra esecuzioni controllo backup (Minimo 1 minuto).
Ready (BOOL) Attivo su abilitazione dopo avere eseguito il restore.
Fault (BOOL) Attivo per un loop su errore esecuzione del comando.
RestOk (BOOL) Attivo se restore dati eseguito correttamente.
BckOk (BOOL) Attivo per un loop al termine della esecuzione backup su comando BckTrig.
FWCtr (UDINT) Contatore scritture file di backup su disco.

Trigger di spy
Se SpyOn attivo è possibile utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.
Livelli di trigger
Trigger | Descrizione |
---|---|
16#10000000 | Lg: Log esecuzione. |
16#40000000 | Er: Errore di esecuzione. |
Esempi
Come utilizzare gli esempi
Nel seguente esempio (Se necessario) ogni minuto viene eseguito il backup dell’array MyArray. Attivando da debug il comando BckNow (Se necessario) viene eseguito immediatamente il backup. Spegnendo e riaccendendo il sistema i dati presenti in MyArray saranno ripristinati al valore che avevano allo spegnimento.
LogicLab (Ptp136, ST_MemoryBackup)
PROGRAM ST_MemoryBackup
VAR
BckNow : BOOL; (* Manual backup *)
MBck : MemoryBackup; (* Memory backup *)
MyArray : ARRAY[0..31] OF BYTE; (* My array *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_MemoryBackup"
// *****************************************************************************
// A memory array is backed up oin disk
// By setting In command a record is inserted on the FIFO register. By setting
// Out command if present a record is extracted from the FIFO register.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Execute program initialization.
IF (SysFirstLoop) THEN
MBck.SpyOn:=TRUE; //Spy On
MBck.MBAdd:=ADR(MyArray); //Memory buffer address
MBck.MBSize:=SIZEOF(MyArray); //Memory buffer size
MBck.Filename:=ADR('C:/Backup'); //Path and filename (no extension)
MBck.BckTime:=T#1m; //Backup time
END_IF;
// -------------------------------------------------------------------------
// ESEGUO GESTIONE
// -------------------------------------------------------------------------
// Execute program initialization.
MBck.BckTrig:=BckNow; //Backup trigger
MBck(Enable:=TRUE); //Memory backup
IF (MBck.BckOk) THEN BckNow:=FALSE; END_IF;
// [End of file]