JSONEncode, encodes a JSON message

Home / Knowledge Base / Manualistica / Programmazione IEC 61131-3 / Libreria comunicazione HTTP / JSONEncode, encodes a JSON message

Questo blocco funzione effettua la codifica di una variabile in un oggetto JSON. Il FB ha esecuzione atomica, può essere eseguito come una funzione.

In Object definire l'indirizzo ed in OSize definire la dimensione del buffer che contiene l'oggetto JSON. Definendo in Name il nome, in VType il tipo, ed in VAddress l'indirizzo della variabile, eseguendo il FB all'oggetto JSON definito in Object verrà aggiunta la variabile. Se la variabile è scalare Count sarà impostato a 1, se è un array occorre definire il numero degli elementi di cui è composto l'array.

In ECode viene ritornato l'eventuale codice errore di esecuzione.

Function block
CODESYS: Non disponibile
LogicLab: eLLabHTTPLib

Object (@STRING) Indirizzo stringa definizione oggetto JSON.

OSize (UDINT) Definizione dimensione massima oggetto JSON.

Name (@STRING) Definizione nome variabile da inserire in oggetto.

VType (VR_TYPE) Tipo variabile da inserire in oggetto (Vedi definizione).

VAddress (@BYTE) Indirizzo variabile da inserire in oggetto.

Count (UDINT) Se variabile scalare impostare 1. Se variabile array definire numero elementi.

ECode (USINT) Codice errore esecuzione:
0: Nessun errore.
1: Oggetto JSON non inizia con “{“.
2: Oggetto JSON non finisce con “{“.
10: Tipo variabile non gestito.

Esempi

Come utilizzare gli esempi.
Viene creato un oggetto JSON che contiene coppie chiave/valore per rappresentare una serie di variabili. Tutti i tipi di variabili sono riportate, in configurazione scalare ed array in modo da dare un esempio completo di utilizzo.

Rimando al FB RESTClient per altri esempi di utilizzo.

LogicLab (Ptp156)
PROGRAM ST_JSONEncode
VAR
    i : UDINT; (* Auxiliary variable *)
    SVariable : UDINT; (* Scalar variable *)
    AVariable : ARRAY[0..1] OF UINT; (* Array variable *)
    SString : STRING[ 32 ]; (* String variable *)
    AString : ARRAY[0..1] OF @STRING; (* String array variable *)
    PString : @STRING; (* String pointer variable *)
    JSONObject : STRING[ 128 ]; (* JSON object *)
    JEncode : JSONEncode_v1; (* JSON encode *)
END_VAR

// ****************************************************************************
// PROGRAM "ST_JSONEncode"
// ****************************************************************************
// A JSON objcect with many key/value pairs has been created.
// ----------------------------------------------------------------------------

    // ------------------------------------------------------------------------
    // INITIALIZATIONS
    // ------------------------------------------------------------------------
    // Initialize the variables.

    SVariable:=12; //Scalar variable
    AVariable[0]:=34; //Array variable
    AVariable[1]:=56; //Array variable
    SString:='Hello!'; //String variable
    PString:=ADR('World'); //String pointer variable
    AString[0]:=ADR('one'); //String array variable
    AString[1]:=ADR('two'); //String array variable

    // ------------------------------------------------------------------------
    // CREATE JSON OBJECT
    // ------------------------------------------------------------------------
    // Create a JSON object.
    // '{"SVariable":12,"AVariable":[34, 56],"SString":"Hello!","PString":"World","AString":["one", "two"]}'

    i:=Sysmemset(ADR(JSONObject), 0, SIZEOF(JSONObject)); //Initialize the JSON object
    JEncode(Object:=ADR(JSONObject), OSize:=SIZEOF(JSONObject), Name:=ADR('SVariable'), VType:=UDINT_TYPE, VAddress:=ADR(SVariable), Count:=1);
    JEncode(Object:=ADR(JSONObject), OSize:=SIZEOF(JSONObject), Name:=ADR('AVariable'), VType:=UINT_TYPE, VAddress:=ADR(AVariable), Count:=2);
    JEncode(Object:=ADR(JSONObject), OSize:=SIZEOF(JSONObject), Name:=ADR('SString'), VType:=STRING_TYPE, VAddress:=ADR(SString), Count:=1);
    JEncode(Object:=ADR(JSONObject), OSize:=SIZEOF(JSONObject), Name:=ADR('PString'), VType:=STRING_TYPE, VAddress:=PString, Count:=1);
    JEncode(Object:=ADR(JSONObject), OSize:=SIZEOF(JSONObject), Name:=ADR('AString'), VType:=STRING_TYPE, VAddress:=ADR(AString), Count:=2);

// [End of file]

Ti è stato utile questo articolo ?