Passa al contenuto principale

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​

Immagine funzione ABWrite

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