ABRead, read BOOL from array
Questa funzione legge un valore BOOL indicizzando i bits di un array, è possibile definire il tipo dati dell'array e l'endianness dei bits.
-
Big-endian: Il bit con IDx 0 è considerato nella posizione array con indirizzo maggiore. Aumentando IDx si considerano posizioni array con indirizzo minore.
-
Little-endian: Il bit con IDx 0 è considerato nella posizione array con indirizzo minore. Aumentando IDx si considerano posizioni array con indirizzo maggiore.
Endianness bits
BIG-endian
+-----------------+ ... +-----+-----------------+
| DBuffer[00] ... | DBuffer[nn] |
+-----+-----------+ ... +-----+-----+-----+-----+
| Bnn | . . | B08 | B07 | ... | B00 | ABM_BYTEBE
+-----+ ... +-----+-----+-----+-----+
| Bnn | . . | B16 | B15 | ... | B00 | ABM_WORDBE
+-----+ ... +-----+-----+-----+-----+
| Bnn | . . | B32 | B31 | ... | B00 | ABM_DWORDBE
+-----+ ... +-----+-----+-----+-----+
| Bnn | . . | B64 | B63 | ... | B00 | ABM_LWORDBE
+-----+ ... +-----+-----+-----+-----+
Little-endian
+-----------------+-----+ ... +-----------------+
| DBuffer[00] | ... | DBuffer[nn] |
+-----+-----+-----+-----+ ... +-----+-----+-----+
| B07 | ... | B00 | B08 | | Bnn | | | ABM_BYTEBE
+-----+-----+-----+-----+ ... +-----+-----+-----+
| B15 | ... | B00 | B16 | | Bnn | | | ABM_WORDBE
+-----+-----+-----+-----+ ... +-----+-----+-----+
| B31 | ... | B00 | B32 | | Bnn | | | ABM_DWORDBE
+-----+-----+-----+-----+ ... +-----+-----+-----+
| B63 | ... | B00 | B64 | | Bnn | | | ABM_LWORDBE
+-----+-----+-----+-----+ ... +-----+-----+-----+
Sostituisce VBitTest
Sostituisce la funzione VBitTest permettendo di operare su array di variabili e non solo su di una variabile DWORD.
// La precedente dichiarazione:
BValue:=VBitTest(DWVar, BNr);
// Diventa:
BValue:=ABRead(ABM_DWORDBE, ADR(DWVar), SIZEOF(DWVar), BNr);
Descrizione
| Parametro | Tipo | Descrizione |
|---|---|---|
| Mode | ARRAYBOOL | Definizione tipo array ed endianness (Definizione). |
| DBuffer | PVOID | Data buffer address, indirizzo array dati. |
| Size | UDINT | Dimensione array. |
| IDx | UDINT | Indice bit. |
| Out | BOOL | Stato del bit. |
Esempi
Come utilizzare gli esempi.
Nell'esempio vengono letti i bit di diversi tipi di array considerando diverse endianness. Tutti valori ritornati sono TRUE.
LogicLab (Ptp114, ST_ABRead)
PROGRAM ST_ABRead
VAR
BVal : ARRAY[0..15] OF BOOL; (* BOOL value *)
BBuffer : ARRAY[0..1] OF BYTE := [16#80, 16#01]; (* BYTE buffer *)
WBuffer : ARRAY[0..1] OF WORD := [16#8000, 16#0001]; (* WORD buffer *)
DWBuffer : ARRAY[0..1] OF DWORD := [16#80000000, 16#00000001]; (* DWORD buffer *)
LWBuffer : ARRAY[0..1] OF LWORD := [16#8000000000000000, 16#0000000000000001]; (* LWORD buffer *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_ABRead"
// *****************************************************************************
// This program shows the use of "ABRead" function.
// At program end all the BVal elements are TRUE.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// READ ARRAY BOOL VALUE
// -------------------------------------------------------------------------
// Read the BOOL value from BYTE array buffer.
BVal[0]:=ABRead(ABM_BYTEBE, ADR(BBuffer), SIZEOF(BBuffer), 0);
BVal[1]:=ABRead(ABM_BYTEBE, ADR(BBuffer), SIZEOF(BBuffer), 15);
BVal[2]:=ABRead(ABM_BYTELE, ADR(BBuffer), SIZEOF(BBuffer), 7);
BVal[3]:=ABRead(ABM_BYTELE, ADR(BBuffer), SIZEOF(BBuffer), 8);
// Read the BOOL value from WORD array buffer.
BVal[4]:=ABRead(ABM_WORDBE, ADR(WBuffer), SIZEOF(WBuffer), 0);
BVal[5]:=ABRead(ABM_WORDBE, ADR(WBuffer), SIZEOF(WBuffer), 31);
BVal[6]:=ABRead(ABM_WORDLE, ADR(WBuffer), SIZEOF(WBuffer), 15);
BVal[7]:=ABRead(ABM_WORDLE, ADR(WBuffer), SIZEOF(WBuffer), 16);
// Read the BOOL value from DWORD array buffer.
BVal[8]:=ABRead(ABM_DWORDBE, ADR(DWBuffer), SIZEOF(DWBuffer), 0);
BVal[9]:=ABRead(ABM_DWORDBE, ADR(DWBuffer), SIZEOF(DWBuffer), 63);
BVal[10]:=ABRead(ABM_DWORDLE, ADR(DWBuffer), SIZEOF(DWBuffer), 31);
BVal[11]:=ABRead(ABM_DWORDLE, ADR(DWBuffer), SIZEOF(DWBuffer), 32);
// Read the BOOL value from LWORD array buffer.
BVal[12]:=ABRead(ABM_LWORDBE, ADR(LWBuffer), SIZEOF(LWBuffer), 0);
BVal[13]:=ABRead(ABM_LWORDBE, ADR(LWBuffer), SIZEOF(LWBuffer), 127);
BVal[14]:=ABRead(ABM_LWORDLE, ADR(LWBuffer), SIZEOF(LWBuffer), 63);
BVal[15]:=ABRead(ABM_LWORDLE, ADR(LWBuffer), SIZEOF(LWBuffer), 64);
// [End of file]