Vai al contenuto
Vai all indice del manuale di programmazione
Tipo: Funzione
Libreria LogicLab: eLLabCommonLib
Libreria Codesys: Non disponibile

Questa funzione esegue lo swap del valore di variabili, sono gestite operazioni diverse in base alla definizione di Mode. Gli indirizzi di Source e Destination possono coincidere rendendo possibile lo swap sulla variabile stessa.

Approfondimenti

Descrizione

Destination (PVOID) Indirizzo variabile di destinazione.
Source (PVOID) Indirizzo variabile sorgente.
Type (VR_TYPE) Tipo variabile (Vedi definizione).
Mode (SWAP_MODE) Modo swap (Vedi definizione).

La funzione ritorna una variabile BOOL, FALSE: Errore esecuzione, TRUE: Esecuzione Ok.

Immagine F SwapData

Esempi

Come utilizzare gli esempi.
Nell’esempio sono eseguite alcune operazioni di swap su variabili.

LogicLab (Ptp201, ST_SwapData)
PROGRAM ST_SwapData
VAR
    BYData : ARRAY[0..5] OF BYTE; (* Byte data example *)
    WDData : ARRAY[0..5] OF WORD; (* Word data example *)
    DWData : ARRAY[0..5] OF DWORD; (* DWord data example *)
    LWData : ARRAY[0..5] OF LWORD; (* LWord data example *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SwapData"
// *****************************************************************************
// This program shows the use of SwapData function.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // SOME HALF VARIABLE SWAPS
    // -------------------------------------------------------------------------
    // BYData[1] Source:=16#12, BYData[2] Destination:=16#21.

    BYData[0]:=16#12; //Source
    BYData[1]:=16#00; //Destination
    eTO_JUNK(SwapData(ADR(BYData[1]), ADR(BYData[0]), BYTE_TYPE, SWAP_HALF));

    // WDData[0] Source:=16#1234, WDData[1] Destination:=16#3412.

    WDData[0]:=16#1234; //Source
    WDData[1]:=16#0000; //Destination
    eTO_JUNK(SwapData(ADR(WDData[1]), ADR(WDData[0]), WORD_TYPE, SWAP_HALF));

    // DWData[0] Source:=16#12345678, DWData[1] Destination:=16#56781234.

    DWData[0]:=16#12345678; //Source
    DWData[1]:=16#00000000; //Destination
    eTO_JUNK(SwapData(ADR(DWData[1]), ADR(DWData[0]), DWORD_TYPE, SWAP_HALF));

    // LWData[0] Source:=16#0123456789ABCDEF, LWData[1] Destination:=16#89ABCDEF01234567.

    LWData[0]:=16#0123456789ABCDEF; //Source
    LWData[1]:=16#0000000000000000; //Destination
    eTO_JUNK(SwapData(ADR(LWData[1]), ADR(LWData[0]), LWORD_TYPE, SWAP_HALF));

    // -------------------------------------------------------------------------
    // SOME VARIABLE SWAPS
    // -------------------------------------------------------------------------
    // Before: BYData[2] Source:=16#12, BYData[3] Destination:=16#34.
    // After: BYData[2] Source:=16#34, BYData[3] Destination:=16#12.

    BYData[2]:=16#12; //Source
    BYData[3]:=16#34; //Destination
    eTO_JUNK(SwapData(ADR(BYData[3]), ADR(BYData[2]), BYTE_TYPE, SWAP_VARS));

    // Before: WDData[2] Source:=16#1234, WDData[3] Destination:=16#5678.
    // After: WDData[2] Source:=16#5678, WDData[3] Destination:=16#1234.

    WDData[2]:=16#1234; //Source
    WDData[3]:=16#5678; //Destination
    eTO_JUNK(SwapData(ADR(WDData[3]), ADR(WDData[2]), WORD_TYPE, SWAP_VARS));

    // Before: DWData[2] Source:=16#12345678, DWData[3] Destination:=16#56789ABC.
    // After: DWData[2] Source:=16#56789ABC, DWData[3] Destination:=16#12345678.

    DWData[2]:=16#12345678; //Source
    DWData[3]:=16#56789ABC; //Destination
    eTO_JUNK(SwapData(ADR(DWData[3]), ADR(DWData[2]), DWORD_TYPE, SWAP_VARS));

    // Before: LWData[2] Source:=16#0123456789ABCDEF, LWData[3] Destination:=16#FEDCBA9801234567.
    // After: LWData[2] Source:=16#FEDCBA9801234567, LWData[3] Destination:=16#0123456789ABCDEF.

    LWData[2]:=16#0123456789ABCDEF; //LWord data example
    LWData[3]:=16#FEDCBA9801234567; //LWord data example
    eTO_JUNK(SwapData(ADR(LWData[3]), ADR(LWData[2]), LWORD_TYPE, SWAP_VARS));

    // -------------------------------------------------------------------------
    // SOME ENDIANNESS SWAPS
    // -------------------------------------------------------------------------
    // BYData[4] Source:=16#12, BYData[5] Destination:=16#12.

    BYData[4]:=16#12; //Source
    BYData[5]:=16#00; //Destination
    eTO_JUNK(SwapData(ADR(BYData[5]), ADR(BYData[4]), BYTE_TYPE, SWAP_ENDIAN));

    // WDData[4] Source:=16#1234, WDData[5] Destination:=16#3412.

    WDData[4]:=16#1234; //Source
    WDData[5]:=16#0000; //Destination
    eTO_JUNK(SwapData(ADR(WDData[5]), ADR(WDData[4]), WORD_TYPE, SWAP_ENDIAN));

    // DWData[4] Source:=16#12345678, DWData[5] Destination:=16#78563412.

    DWData[4]:=16#12345678; //Source
    DWData[5]:=16#00000000; //Destination
    eTO_JUNK(SwapData(ADR(DWData[5]), ADR(DWData[4]), DWORD_TYPE, SWAP_ENDIAN));

    // LWData[4] Source:=16#0123456789ABCDEF, LWData[5] Destination:=16#EFCDAB8967452301.

    LWData[4]:=16#0123456789ABCDEF; //Source
    LWData[5]:=16#0000000000000000; //Destination
    eTO_JUNK(SwapData(ADR(LWData[5]), ADR(LWData[4]), LWORD_TYPE, SWAP_ENDIAN));

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