Questa funzione trasferisce eseguendone lo swap il valore della variabile Destination nella variabile Source in base al tipo Type definito.

Gli indirizzi di Source e Destination possono coincidere rendendo possibile lo swap sul valore diretto di una variabile.

Funzione
CODESYS: Non disponibile
LogicLab: eLLabUtyLib

Type (VR_TYPE) Tipo di variabile, in base al tipo avremo:

VR_TYPE#BOOL_TYPE Non viene eseguita alcuna conversione.
Esempio: Source=TRUE, Destination=TRUE
VR_TYPE#BYTE_TYPE
VR_TYPE#SINT_TYPE
VR_TYPE#USINT_TYPE
Viene eseguito lo swap dei nibbles (4 bit).
Esempio: Source=16#12, Destination=16#21
VR_TYPE#WORD_TYPE
VR_TYPE#INT_TYPE
VR_TYPE#UINT_TYPE
Viene eseguito lo swap dei bytes.
Esempio: Source=16#1234, Destination=16#3412
VR_TYPE#DWORD_TYPE
VR_TYPE#DINT_TYPE
VR_TYPE#UDINT_TYPE
VR_TYPE#REAL_TYPE
Viene eseguito lo swap delle words.
Esempio: Source=16#12345678, Destination=16#56781234

Destination (@BYTE) Indirizzo variabile di destinazione.

Source (@BYTE) Indirizzo variabile sorgente.

La funzione ritorna una variabile BOOL con lo stato della conversione, FALSE: Errore tipo dati, TRUE: Swap eseguito.

Esempi

Come utilizzare gli esempi.
Nell'esempio due variabili WORD con valore 16#1234, 16#5678, ed una variabile DWORD con valore 16#12345678 sono convertite in array big endian ed il valore di ogni conversione accodato in un array. Al termine l'array avrà il valore 16#78, 16#56, 16#34, 16#12, 16#78, 16#56, 16#34, 16#12.

LogicLab (Ptp114)
PROGRAM ST_VarSwap
VAR
    i : BOOL; (* Auxiliary variable *)
    ByteData : ARRAY[ 0..1 ] OF BYTE; (* Byte data example *)
    WordData : ARRAY[ 0..2 ] OF WORD; (* Word data example *)
    DWordData : ARRAY[ 0..2 ] OF DWORD; (* DWord data example *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_VarSwap"
// *****************************************************************************
// This program shows the use of VarSwap function.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // SOME SWAPS
    // -------------------------------------------------------------------------
    // Swap BYTE, Source:=16#12, Destination:=16#21.

    ByteData[0]:=16#12; //Byte data example
    i:=VarSwap(VR_TYPE#BYTE_TYPE, ADR(ByteData[1]), ADR(ByteData[0]));

    // Swap WORD, Source:=16#1234, Destination:=16#3412.

    WordData[0]:=16#1234; //Word data example
    i:=VarSwap(VR_TYPE#WORD_TYPE, ADR(WordData[1]), ADR(WordData[0]));

    // Swap LSB of WORD, Source:=16#3412, Destination:=16#3421.

    WordData[2]:=WordData[1];
    i:=VarSwap(VR_TYPE#BYTE_TYPE, ADR(WordData[2]), ADR(WordData[1]));

    // Swap DWORD, Source:=16#12345678, Destination:=16#56781234.

    DWordData[0]:=16#12345678; //DWord data example
    i:=VarSwap(VR_TYPE#DWORD_TYPE, ADR(DWordData[1]), ADR(DWordData[0]));

    // Swap MSW of WORD, Source:=16#56781234, Destination:=16#78561234.

    DWordData[2]:=DWordData[1];
    i:=VarSwap(VR_TYPE#WORD_TYPE, ADR(DWordData[2])+2, ADR(DWordData[1])+2);

// [End of file]

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 9 Agosto 2019