Passa al contenuto principale

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​

Immagine funzione ABRead

ParametroTipoDescrizione
ModeARRAYBOOLDefinizione tipo array ed endianness (Definizione).
DBufferPVOIDData buffer address, indirizzo array dati.
SizeUDINTDimensione array.
IDxUDINTIndice bit.
OutBOOLStato 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]