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
| Parametro | Tipo | 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. |
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
| Parametro | Tipo | 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. |
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]