Vai al contenuto

FileMemoryDump, dump memory on file

Vai all indice del manuale di programmazione

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

SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB (Vedi articolo).
Read (BOOL) Comando di lettura da file in memoria.
Write (BOOL) Comando di scrittura memoria su file.
Mode (FILEMDUMP_MODE) Definizione modo gestione file (Definizione).
Filename (@STRING]) Percorso e nome del file in cui fare log (es.: ADR(‘C:/Dump.txt’)).
MBAdd (PVOID) Pointer a buffer di memoria.
MBSize (UDINT) Dimensione in bytes del buffer di memoria.
FPOfs (UDINT) Offset indirizzamento su file.
Done (BOOL) Attivo se comando eseguito. Se attivo occorre resettare i comandi per iniziare un nuovo comando.
Fault (BOOL) Attivo per un loop su errore esecuzione del comando.

Immagine FB FileMemoryDump_v1

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]
Was this article helpful?