Passa al contenuto principale

Dividi e concatena variabile 32 bits

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. Se indirizzo di bxx è eNULL il bit non viene considerato.

Descrizione​

Immagine FB_DWSplitBitToVar

ParametroTipoDescrizione
InDWORDValore a 32 bits da dividere.
b00@BOOLIndirizzo variabile cui trasferire stato bit 00.
b01@BOOLIndirizzo variabile cui trasferire stato bit 01. ...
b31@BOOLIndirizzo variabile cui trasferire stato bit 31.

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. Se indirizzo di bxx è eNULL il bit non viene considerato.

Descrizione​

Immagine FB_DWMergeVarToBit

ParametroTipoDescrizione
b00@BOOLIndirizzo variabile il cui stato è trasferito su bit 00.
b01@BOOLIndirizzo variabile il cui stato è trasferito su bit 01. ...
b31@BOOLIndirizzo variabile il cui stato è trasferito su bit 31.
OutDWORDValore a 32 bits concatenato.

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]

PROGRAM ST_DWMergeVarToBit

LogicLab (Ptp114, 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]