ABWrite, write BOOL to array
Questa funzione scrive 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 VBitSet
Sostituisce la funzione VBitSet permettendo di operare su array di variabili e non solo su di una variabile DWORD.
// La precedente dichiarazione:
DWVar:=VBitSet(BValue, DWVar, BNr);
// Diventa:
eTO_JUNK(ABWrite(ABM_DWORDBE, ADR(DWVar), SIZEOF(DWVar), BNr, BValue));
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. |
| Value | BOOL | Valorre da scrivere. |
| Out | BOOL | FALSE: Errore esecuzione, TRUE: Esecuzione Ok. |
Esempi
Come utilizzare gli esempi.
Nell’esempio vengono scritti i bit in diversi tipi di array considerando diverse endianness. Al termine dell'esecuzione avremo:
-
BBuffer:=[16#81, 16#81]
-
WBuffer:=[16#8001, 16#8001]
-
DWBuffer:=[16#80000001, 16#80000001]
-
LWBuffer:=[16#8000000000000001, 16#8000000000000001]
LogicLab (Ptp114, ST_ABWrite)
PROGRAM ST_ABWrite
VAR
BVal : BOOL; (* BOOL value *)
BBuffer : ARRAY[0..1] OF BYTE; (* BYTE buffer *)
WBuffer : ARRAY[0..1] OF WORD; (* WORD buffer *)
DWBuffer : ARRAY[0..1] OF DWORD; (* DWORD buffer *)
LWBuffer : ARRAY[0..1] OF LWORD; (* LWORD buffer *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_ABWrite"
// *****************************************************************************
// This program shows the use of "ABWrite" function.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// WRITE ARRAY BOOL VALUE
// -------------------------------------------------------------------------
// Write the BOOL value to BYTE array buffer.
BVal:=ABWrite(ABM_BYTEBE, ADR(BBuffer), SIZEOF(BBuffer), 0, TRUE);
BVal:=ABWrite(ABM_BYTEBE, ADR(BBuffer), SIZEOF(BBuffer), 15, TRUE);
BVal:=ABWrite(ABM_BYTELE, ADR(BBuffer), SIZEOF(BBuffer), 0, TRUE);
BVal:=ABWrite(ABM_BYTELE, ADR(BBuffer), SIZEOF(BBuffer), 15, TRUE);
// Write the BOOL value to WORD array buffer.
BVal:=ABWrite(ABM_WORDBE, ADR(WBuffer), SIZEOF(WBuffer), 0, TRUE);
BVal:=ABWrite(ABM_WORDBE, ADR(WBuffer), SIZEOF(WBuffer), 31, TRUE);
BVal:=ABWrite(ABM_WORDLE, ADR(WBuffer), SIZEOF(WBuffer), 0, TRUE);
BVal:=ABWrite(ABM_WORDLE, ADR(WBuffer), SIZEOF(WBuffer), 31, TRUE);
// Write the BOOL value to DWORD array buffer.
BVal:=ABWrite(ABM_DWORDBE, ADR(DWBuffer), SIZEOF(DWBuffer), 0, TRUE);
BVal:=ABWrite(ABM_DWORDBE, ADR(DWBuffer), SIZEOF(DWBuffer), 63, TRUE);
BVal:=ABWrite(ABM_DWORDLE, ADR(DWBuffer), SIZEOF(DWBuffer), 0, TRUE);
BVal:=ABWrite(ABM_DWORDLE, ADR(DWBuffer), SIZEOF(DWBuffer), 63, TRUE);
// Write the BOOL value to LWORD array buffer.
BVal:=ABWrite(ABM_LWORDBE, ADR(LWBuffer), SIZEOF(LWBuffer), 0, TRUE);
BVal:=ABWrite(ABM_LWORDBE, ADR(LWBuffer), SIZEOF(LWBuffer), 127, TRUE);
BVal:=ABWrite(ABM_LWORDLE, ADR(LWBuffer), SIZEOF(LWBuffer), 0, TRUE);
BVal:=ABWrite(ABM_LWORDLE, ADR(LWBuffer), SIZEOF(LWBuffer), 127, TRUE);
// [End of file]