JSONEncoder, encodes a JSON message

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

Questa funzione effettua la codifica di una variabile in un oggetto JSON. 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 la funzione all’oggetto JSON verrà aggiunta la variabile. Se la variabile è scalare Count và impostato a 1, se è un array occorre definire il numero degli elementi di cui è composto l’array.

Upgrade list

JSONEncoder

Il precedente FB JSONEncode_v1 è stato trasformato in funzione con il nuovo nome. La funzione è identica nel funzionamento al FB, stesso ordine di variabili in ingresso. Il precedente valore ECode diventa il valore di ritorno.

// La precedente dichiarazione:

    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);

// Diventa:

    i:=Sysmemset(ADR(JSONObject), 0, SIZEOF(JSONObject)); //Initialize the JSON object
    i:=JSONEncoder(ADR(JSONObject), SIZEOF(JSONObject), ADR('SVariable'), UDINT_TYPE, ADR(SVariable), 1);
Information Circle

Funzione

CODESYS: Non disponibile

LogicLab: eLLabHTTPLib

Descrizione

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 (PVOID) Indirizzo variabile da inserire in oggetto.
Count (UDINT) Definire numero elementi variabile. Definire 1 se variabile scalare.

La funzione ritorna un USINT:
0: Nessun errore.
1: Oggetto JSON non inizia con “{“.
2: Oggetto JSON non finisce con “{“.
10: Dimensione OSize del buffer Object non sufficente a contenere oggetto JSON.

Immagine Fct JSONEncoder

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.

LogicLab (Ptp156, ST_JSONEncoder)
PROGRAM ST_JSONEncoder
VAR
    i : UDINT; (* Auxiliary variable *)
    Encode : BOOL; (* Encode command *)
    SVariable : UDINT; (* Scalar variable *)
    AVariable : ARRAY[0..1] OF UINT; (* Array variable *)
    AString : ARRAY[0..1] OF @STRING; (* String array variable *)
    SString : STRING[ 32 ]; (* String variable *)
    PString : @STRING; (* String pointer variable *)
    JSONObject : STRING[ 128 ]; (* JSON object *)
    ENr : ARRAY[0..5] OF USINT; (* Error number *)
END_VAR

// ****************************************************************************
// PROGRAM "ST_JSONEncoder"
// ****************************************************************************
// 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"]}'

    IF NOT(Encode) THEN RETURN; END_IF;
    Encode:=FALSE; //Encode command

    i:=Sysmemset(ADR(JSONObject), 0, SIZEOF(JSONObject)); //Initialize the JSON object

    ENr[0]:=JSONEncoder(ADR(JSONObject), SIZEOF(JSONObject), ADR('SVariable'), UDINT_TYPE, ADR(SVariable), 1);
    ENr[1]:=JSONEncoder(ADR(JSONObject), SIZEOF(JSONObject), ADR('SVariable'), UDINT_TYPE, ADR(SVariable), 1);
    ENr[2]:=JSONEncoder(ADR(JSONObject), SIZEOF(JSONObject), ADR('AVariable'), UINT_TYPE+44, ADR(AVariable), 2);
    ENr[3]:=JSONEncoder(ADR(JSONObject), SIZEOF(JSONObject), ADR('SString'), STRING_TYPE, ADR(SString), 1);
    ENr[4]:=JSONEncoder(ADR(JSONObject), SIZEOF(JSONObject), ADR('PString'), STRING_TYPE, PString, 1);
    ENr[5]:=JSONEncoder(ADR(JSONObject), SIZEOF(JSONObject), ADR('AString'), STRING_TYPE, ADR(AString), 2);

    i:=SysWrSpyData(SPY_ASCII, 0, 16#00000001, ADR('ST_JSONEncode'), ADR(JSONObject));

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