Vai al contenuto

Dividi e concatena variabile 32 bits

Vai all indice del manuale di programmazione
Tipo: Blocco funzione
Libreria LogicLab: eLLabUtyLib
Libreria Codesys: Non disponibile

Con questi 2 blocchi funzione è possibile dividere e concatenare una variabile a 32 bits in 32 variabili BOOL di cui viene fornito al FB l’indirizzo di allocazione.

DWSplitBitToVar

Questo blocco funzione divide il valore a 32 bits In, valorizzando con lo stato di ogni bit del valore la corrispondente variabile BOOL il cui indirizzo è indicato in bxx.

Descrizione

In (DWORD) Valore a 32 bits da dividere.
b00 (@BOOL) Indirizzo variabile cui trasferire stato bit 00.
b01 (@BOOL) Indirizzo variabile cui trasferire stato bit 01.

b31 (@BOOL) Indirizzo variabile cui trasferire stato bit 31.

Immagine FB_DWSplitBitToVar

DWMergeVarToBit

Questo blocco funzione concatena 32 variabili BOOL nella variabile a 32 bits Out, valorizzando ogni bit del valore con lo stato della corrispondente variabile il cui indirizzo è indicato in bxx.

Descrizione

b00 (@BOOL) Indirizzo variabile il cui stato è trasferito su bit 00.
b01 (@BOOL) Indirizzo variabile il cui stato è trasferito su bit 01.

b31 (@BOOL) Indirizzo variabile il cui stato è trasferito su bit 31.
Out (DWORD) Valore a 32 bits concatenato.

Immagine FB_DWMergeVarToBit

Esempi

Come utilizzare gli esempi.
ST_DWSplitBitToVar: Una variabile DWORD viene suddivisa in variabili BOOL.

ST_DWMergeVarToBit: Variabili BOOL vengono concatenater in una variabile DWORD.

LogicLab (Ptp114, ST_DWSplitBitToVar)
PROGRAM ST_DWSplitBitToVar
VAR
    DWValue : DWORD; (* Value to split *)
    BVar : ARRAY[0..31] OF BOOL; (* BOOL variables *)
    DWSplit : DWSplitBitToVar; (* FB split *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_DWSplitBitToVar"
// *****************************************************************************
// Splits a 32 bits DWORD value to 32 BOOL variables.
// -----------------------------------------------------------------------------  

    // ------------------------------------------------------------------------- 
    // SPLIT VALUE 
    // -------------------------------------------------------------------------
    // Split the value.

    DWSplit.b00:=ADR(BVar[0]); //Bit 00
    DWSplit.b01:=ADR(BVar[1]); //Bit 01

    // Define all other BOOL variables.

    DWSplit.b30:=ADR(BVar[30]); //Bit 30
    DWSplit.b31:=ADR(BVar[31]); //Bit 31
    DWSplit(In:=DWValue); //FB split

// [End of file]
LogicLab (Ptp114, ST_DWMergeVarToBit)

PROGRAM ST_DWMergeVarToBit

VAR
    DWValue : DWORD; (* Merged value *)
    BVar : ARRAY[0..31] OF BOOL; (* BOOL variables *)
    DWMerge : DWMergeVarToBit; (* FB merge *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_DWMergeVarToBit"
// *****************************************************************************
// Merges 32 BOOL variables to a 32 bits DWORD value.
// -----------------------------------------------------------------------------  

    // ------------------------------------------------------------------------- 
    // MERGE VALUE 
    // -------------------------------------------------------------------------
    // Split the value.

    DWMerge.b00:=ADR(BVar[0]); //Bit 00
    DWMerge.b01:=ADR(BVar[1]); //Bit 01

    // Define all other BOOL variables.

    DWMerge.b30:=ADR(BVar[30]); //Bit 30
    DWMerge.b31:=ADR(BVar[31]); //Bit 31
    DWMerge(); //FB merge
    DWValue:=DWMerge.Out; //Merged value

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