Sysmemmove, memory move

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

Questa funzione copia l’area di memoria definita in Src nell’area di memoria definita in Dest per la dimensione definita in Size. Le due aree di memoria possono anche sovrapporsi.

La funzione garantisce l’atomicità del trasferimento, quindi l’area di memoria definita in Dest ha sempre valore coerente anche se scritta da una task ed utilizzata da un’altra task. Deve essere utilizzata per passare variabili di dimensione superiore ai 4 bytes a per le stringhe da una task verso un’altra task a priorità di esecuzione superiore.

Information Circle

Funzione

CODESYS: eCDSXUnified12Lib

LogicLab: eLLabXUnified12Lib

Descrizione

Dest (PVOID) Indirizzo dell’area di memoria di destinazione.
Src (PVOID) Indirizzo dell’area di memoria di origine.
Size (UDINT) Dimensione area di memoria da trasferire.

La funzione ritorna una variabile (PVOID) con l’indirizzo dell’area di memoria di destinazione. In caso di errore viene ritornato eNULL.

Immagine funzione Sysmemmove

Esempi

Come utilizzare gli esempi.
Settando da debug la variabile CMove, la memoria Source sarà traferita in Destination.

LogicLab (Ptp116)
PROGRAM ST_Sysmemmove
VAR
    i : UDINT; (* Auxiliary variable *)
    CMove : BOOL; (* Move command *)
    Source : ARRAY[ 0..15 ] OF BYTE; (* Source memory *)
    Destination : STRING[ 32 ]; (* Destination memory *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_Sysmemmove"
// *****************************************************************************
// By setting the "Move" command the memory is moved
// -----------------------------------------------------------------------------

    IF (CMove) THEN
        CMove:=FALSE; //Move command
        i:=Sysmemmove(ADR(Destination), ADR(Source), SIZEOF(Source));
    END_IF;

// [End of file]
CODESYS (Ptp161)
PROGRAM ST_Sysmemmove
VAR
    i : UDINT; //Auxiliary variable
    CMove : BOOL; //Move command
    Source : ARRAY[ 0..15 ] OF BYTE; //Source memory
    Destination : STRING[ 32 ]; //Destination memory
END_VAR

// *****************************************************************************
// PROGRAM "ST_Sysmemmove"
// *****************************************************************************
// By setting the "Move" command the memory is moved
// -----------------------------------------------------------------------------

    IF (CMove ) THEN
        CMove :=FALSE; //Move command
        i:=Sysmemmove(ADR(Destination), ADR(Source), SIZEOF(Source));
    END_IF;

// [End of file]
Was this article helpful?