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

Con il rilascio di LogicLab versione 5.22.x.xx è stata aggiunta la gestione del tipo PVOID per identificare un puntatore void. Per accedere ai dati all’indirizzo di questo tipo di puntatore occorre tipizzarlo al tipo dato desiderato. Per semplificarne l’accesso sono fornite funzioni apposite.

Get dati da void pointer

eGetBYTE: Ritorna una variabile intera ad un byte, può essere utilizzata per variabili BOOL, BYTE, SINT, USINT.

BYTE eGetBYTE(PVOID RAddress);

eGetWORD: Ritorna una variabile intera a 2 bytes, può essere utilizzata per variabili WORD, INT, UINT.

WORD eGetWORD(PVOID RAddress);

eGetDWORD: Ritorna una variabile intera a 4 bytes, può essere utilizzata per variabili DWORD, DINT, UDINT.

DWORD eGetDWORD(PVOID RAddress);

eGetREAL: Ritorna una variabile float a 4 bytes, può essere utilizzata per variabili REAL.

REAL eGetREAL(PVOID RAddress);

eGetLWORD: Ritorna una variabile intera a 8 bytes, può essere utilizzata per variabili LWORD, LINT, ULINT.

LWORD eGetLWORD(PVOID RAddress);

eGetLREAL: Ritorna una variabile float a 8 bytes, può essere utilizzata per variabili LREAL.

LREAL eGetLREAL(PVOID RAddress);

Set dati su void pointer

eSetBYTE: Trasferisce variabile intera ad un byte, può essere utilizzata per variabili BOOL, BYTE, SINT, USINT. La funzione ritorna TRUE.

BOOL eSetByte(PVOID WAddress, BYTE WValue);

eSetWORD: Trasferisce variabile intera a 2 bytes, può essere utilizzata per variabili WORD, INT, UINT. La funzione ritorna TRUE.

BOOL eSetWORD(PVOID WAddress, WORD WValue);

eSetDWORD: Trasferisce una variabile intera a 4 bytes, può essere utilizzata per variabili DWORD, DINT, UDINT. La funzione ritorna TRUE.

BOOL eSetDWORD(PVOID WAddress, DWORD WValue);

eSetREAL: Trasferisce una variabile float a 4 bytes, può essere utilizzata per variabili REAL. La funzione ritorna TRUE.

BOOL eSetREAL(PVOID WAddress, REAL WValue);

eSetLWORD: Trasferisce una variabile intera a 8 bytes, può essere utilizzata per variabili LWORD, LINT, ULINT. La funzione ritorna TRUE.

BOOL eSetLWORD(PVOID WAddress, LWORD WValue);

eSetLREAL: Trasferisce una variabile float a 8 bytes, può essere utilizzata per variabili LREAL. La funzione ritorna TRUE.

BOOL eSetREAL(PVOID WAddress, LREAL WValue);

Esempi

Come utilizzare gli esempi.
Nel programma di esempio sono riportati alcuni utilizzi delle funzioni.

LogicLab (Ptp201, ST_GetDataFromPointer)
PROGRAM ST_GetDataFromPointer
VAR
    pAV: PVOID; (* Auxiliary void pointer *)
    BVar : ARRAY[0..2] OF BYTE; (* Byte variable *)
    WVar : ARRAY[0..2] OF WORD; (* Word variable *)
    DWVar : ARRAY[0..2] OF DWORD; (* Double word variable *)
    RVar : ARRAY[0..2] OF REAL; (* Real variable *)
    LWVar : ARRAY[0..2] OF LWORD; (* Long word variable *)
    LRVar : ARRAY[0..2] OF LREAL; (* Long real variable *)
    BArray : ARRAY[0..1] OF BYTE := [16#12, 16#34]; (* Byte array *)
    WArray : ARRAY[0..1] OF WORD := [16#1234, 16#5678]; (* Word array *)
    DWArray : ARRAY[0..1] OF DWORD := [16#01234567, 16#89ABCDEF]; (* Double word array *)
    RArray : ARRAY[0..1] OF REAL := [1.23, 4.567]; (* Real array *)
    LWArray : ARRAY[0..1] OF LWORD := [16#0123456789ABCDEF, 16#FEDCBA9876543210]; (* Long word array *)
    LRArray : ARRAY[0..1] OF LREAL := [1.23, 4.567]; (* Long real array *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_GetDataFromPointer"
// *****************************************************************************

    // This is an use of "eGetBYTE" function.

    pAV:=ADR(BArray); //Auxiliary void pointer
    BVar[0]:=eGetBYTE(pAV); //16#12
    BVar[1]:=eGetBYTE(pAV+1); //16#34
    BVar[2]:=eGetBYTE(ADR(BArray)+1); //16#34

    // This is an use of "eGetWORD" function.

    pAV:=ADR(WArray); //Void pointer
    WVar[0]:=eGetWORD(pAV); //16#1234
    WVar[1]:=eGetWORD(pAV+2); //16#5678
    WVar[2]:=eGetWORD(ADR(WArray)+2); //16#5678

    // This is an use of "eGetDWORD" function.

    pAV:=ADR(DWArray); //Void pointer
    DWVar[0]:=eGetDWORD(pAV); //16#01234567
    DWVar[1]:=eGetDWORD(pAV+4); //16#89ABCDEF
    DWVar[2]:=eGetDWORD(ADR(DWArray)+4); //16#89ABCDEF

    // This is an use of "eGetREAL" function.

    pAV:=ADR(RArray); //Void pointer
    RVar[0]:=eGetREAL(pAV); //1.230
    RVar[1]:=eGetREAL(pAV+4); //4.567
    RVar[2]:=eGetREAL(ADR(RArray)+4); //4.567

    // This is an use of "eGetLWORD" function.

    pAV:=ADR(LWArray); //Void pointer
    LWVar[0]:=eGetLWORD(pAV); //16#0123456789ABCDEF
    LWVar[1]:=eGetLWORD(pAV+8); //16#FEDCBA9876543210
    LWVar[2]:=eGetLWORD(ADR(LWArray)+8); //16#FEDCBA9876543210

    // This is an use of "eGetLREAL" function.

    pAV:=ADR(LRArray); //Void pointer
    LRVar[0]:=eGetLREAL(pAV); //1.230
    LRVar[1]:=eGetLREAL(pAV+8); //4.567
    LRVar[2]:=eGetLREAL(ADR(LRArray)+8); //4.567

// [End of file]
LogicLab (Ptp201, ST_SetDataToPointer)
PROGRAM ST_SetDataToPointer
VAR
    pAV : PVOID; (* Auxiliary void pointer *)
    BArray : ARRAY[0..1] OF BYTE; (* Byte array *)
    WArray : ARRAY[0..1] OF WORD; (* Word array *)
    DWArray : ARRAY[0..1] OF DWORD; (* Double word array *)
    RArray : ARRAY[0..1] OF REAL; (* Real array *)
    LWArray : ARRAY[0..1] OF LWORD; (* Long word array *)
    LRArray : ARRAY[0..1] OF LREAL; (* Long real array *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SetDataToPointer"
// *****************************************************************************

    // This is an use of "eSetBYTE" function.

    pAV:=ADR(BArray); //Auxiliary void pointer
    eTO_JUNK(eSetBYTE(pAV, 16#12)); //[16#12, 16#00]
    eTO_JUNK(eSetBYTE(pAV+1, 16#34)); //[16#12, 16#34]
    eTO_JUNK(eSetBYTE(ADR(BArray)+1, 16#34)); //[16#12, 16#34]

    // This is an use of "eSetWORD" function.

    pAV:=ADR(WArray); //Auxiliary void pointer
    eTO_JUNK(eSetWORD(pAV, 16#1234)); //[16#1234, 16#0000]
    eTO_JUNK(eSetWORD(pAV+2, 16#5678)); //[16#1234, 16#5678]
    eTO_JUNK(eSetWORD(ADR(WArray)+2, 16#5678)); //[16#1234, 16#5678]

    // This is an use of "eSetDWORD" function.

    pAV:=ADR(DWArray); //Auxiliary void pointer
    eTO_JUNK(eSetDWORD(pAV, 16#01234567)); //[16#01234567, 16#00000000]
    eTO_JUNK(eSetDWORD(pAV+4, 16#89ABCDEF)); //[16#01234567, 16#89ABCDEF]
    eTO_JUNK(eSetDWORD(ADR(DWArray)+4, 16#89ABCDEF)); //[16#01234567, 16#89ABCDEF]

    // This is an use of "eSetREAL" function.

    pAV:=ADR(RArray); //Auxiliary void pointer
    eTO_JUNK(eSetREAL(pAV, 1.23)); //[1.230, 0.000]
    eTO_JUNK(eSetREAL(pAV+4, 4.567)); //[1.230, 4.567]
    eTO_JUNK(eSetREAL(ADR(RArray)+4, 4.567)); //[1.230, 4.567]

    // This is an use of "eSetLWORD" function.

    pAV:=ADR(LWArray); //Auxiliary void pointer
    eTO_JUNK(eSetLWORD(pAV, 16#0123456789ABCDEF)); //[16#0123456789ABCDEF, 16#0000000000000000]
    eTO_JUNK(eSetLWORD(pAV+8, 16#FEDCBA9876543210)); //[16#0123456789ABCDEF, 16#FEDCBA9876543210]
    eTO_JUNK(eSetLWORD(ADR(LWArray)+8, 16#FEDCBA9876543210)); //[16#0123456789ABCDEF, 16#FEDCBA9876543210]

    // This is an use of "eSetLREAL" function.

    pAV:=ADR(LRArray); //Auxiliary void pointer
    eTO_JUNK(eSetLREAL(pAV, LREAL#1.23)); //[1.230, 0.000]
    eTO_JUNK(eSetLREAL(pAV+8, LREAL#4.567)); //[1.230, 4.567]
    eTO_JUNK(eSetLREAL(ADR(LRArray)+8, LREAL#4.567)); //[1.230, 4.567]

// [End of file]
Was this article helpful?