Vai al contenuto
Vai all indice del manuale di programmazione
Tipo: Funzione
Libreria LogicLab: eLLabUtyLib
Libreria Codesys: Non disponibile

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

Mode (ARRAYBOOL) Definizione tipo array ed endianness (Definizione).
DBuffer (PVOID) Data buffer address, indirizzo array dati.
Size (UDINT) Dimensione array.
IDx (UDINT) Indice bit.

La funzione ritorna lo stato del bit (BOOL).

Immagine funzione ABRead

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.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // 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]
Was this article helpful?