Passa al contenuto principale

FileMemoryDump, dump memory on file

Questo blocco funzione da eseguire in task Back, effettua il dump di una zona di memoria a partire da indirizzo definito in MBAdd per il numero di bytes definito in MBSize su di un file su disco di nome Filename. Il FB può operare anche su area di memoria rilocabile.

Attivando l'ingresso Write viene creato il file ed il contenuto della memoria viene scritto nel file. Attivando l'ingresso Read viene letto il file ed il suo contenuto trasferito in memoria. Terminato il comando viene attivata l'uscita Done, che rimane attiva sino alla disattivazione dei comandi. In caso di errore esecuzione viene attivata per un loop l'uscita Fault.

Il tipo di file creato cambia in base alla selezione definita in Mode, definendo un valore di offset in FPOfs è possibile accodare i dati ad un file esistente.

Approfondimenti

In questo topic un esempio di utilizzo FileMemoryDump_v1 in sostituzione della versione precedente.

Formato file

FILEMDUMP_MODE#ASCII: Esempio di file Ascii.

00000000: 00 01 02 03 04 05 06 07 | 08 09 0A 0B 0C 0D 0E 0F
00000010: 0F 0E 0D 0C 0B 0A 09 09 | 07 06 05 04 03 02 01 00

Upgrade list

FileMemoryDump_v1​

Aggiunto parametro Mode per la selezione del modo operativo. Modificato nome ai parametri MBufferPtr che diventa MBAdd e MBufferSize che diventa MBSize, aggiunto il parametro FPOfs. Ora è possibile accodare ad un file esistente altra memoria.

Descrizione​

Immagine FB FileMemoryDump_v1

ParametroTipoDescrizione
SpyOnBOOLSe attivo permette di spiare il funzionamento della FB (Vedi articolo).
ReadBOOLComando di lettura da file in memoria.
WriteBOOLComando di scrittura memoria su file.
ModeFILEMDUMP_MODEDefinizione modo gestione file (Definizione).
Filename@STRING_\]Percorso e nome del file in cui fare log (es.: ADR('C:/Dump.txt')).
MBAddPVOIDPointer a buffer di memoria.
MBSizeUDINTDimensione in bytes del buffer di memoria.
FPOfsUDINTOffset indirizzamento su file.
DoneBOOLAttivo se comando eseguito. Se attivo occorre resettare i comandi per iniziare un nuovo comando.
FaultBOOLAttivo per un loop su errore esecuzione del comando.

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

TriggerDescrizione
16#00000001Rd: Lettura dati da file.
16#00000002Wr: Scrittura dati su file.
16#40000000Er: Errore di esecuzione.

Esempi​

Come utilizzare gli esempi
Nel seguente esempio attivando da debug il comando Write viene eseguito il trasferimento del buffer DBuf nell file indicato. Attivando da debug il comando Read è possibile rileggere i dati dal file e ritrasferirli nell'area di memoria.

LogicLab (Ptp136, ST_FileMemoryDump)
PROGRAM ST_FileMemoryDump
VAR
Read : BOOL; (* Read command *)
Write : BOOL; (* Write command *)
ASelector : UDINT; (* Array selector *)
DBuf : ARRAY[0..1, 0..15] OF BYTE; (* Data buffer *)
MDump : FileMemoryDump_v1; (* FBinstance *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_FileMemoryDump"
// *****************************************************************************
// Setting by debug the Read or Write command the selected data array is read or
// write on file. Please note than the write command must be executed before to
// execute the read. Otherwise file is not present and the read command fails.
// -----------------------------------------------------------------------------

// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Execute program initialization.

IF (SysFirstLoop) THEN
MDump.SpyOn:=TRUE; //SpyOn

MDump.Mode:=FILEMDUMP_MODE#ASCII; //Execution mode
MDump.Filename:=ADR('C:/MRetain.txt'); //Dump memory file
// MDump.Filename:=ADR('D:/MRetain.txt'); //Dump memory file
END_IF;

// -------------------------------------------------------------------------
// MEMORY DUMP
// -------------------------------------------------------------------------
// On set by debug the Read or Write command the selected data array is read
// or write on file. please not

MDump(); //Execute the FB
IF (MDump.Done) THEN MDump.Read:=FALSE; END_IF;
IF (MDump.Done) THEN MDump.Write:=FALSE; END_IF;

// -------------------------------------------------------------------------
// COMMAND MANAGEMENT
// -------------------------------------------------------------------------
// Data buffer read.

IF (Read) THEN
Read:=FALSE; //Read command
MDump.MBAdd:=ADR(DBuf[ASelector, 0]); //Dump memory address
MDump.MBSize:=16; //Dump memory size
MDump.FPOfs:=ASelector*MDump.MBSize; //File position offset
MDump.Read:=TRUE; //Read command
END_IF;

// Data buffer write.

IF (Write) THEN
Write:=FALSE; //Write command
MDump.MBAdd:=ADR(DBuf[ASelector, 0]); //Dump memory address
MDump.MBSize:=16; //Dump memory size
MDump.FPOfs:=ASelector*MDump.MBSize; //File position offset
MDump.Write:=TRUE; //Write command
END_IF;

// [End of file]