Passa al contenuto principale

JSONEncoder, encodes a JSON message

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

Descrizione​

Immagine Fct JSONEncoder

ParametroTipoDescrizione
Object@STRINGIndirizzo stringa definizione oggetto JSON.
OSizeUDINTDefinizione dimensione massima oggetto JSON.
Name@STRINGDefinizione nome variabile da inserire in oggetto.
VTypeVR_TYPETipo variabile da inserire in oggetto (Vedi definizione).
VAddressPVOIDIndirizzo variabile da inserire in oggetto.
CountUDINTDefinire numero elementi variabile. Definire 1 se variabile scalare.
OutUSINTLa 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.

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

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

eTO_JUNK(SysWrSpyData(SPY_ASCII, 0, 16#00000001, ADR('ST_JSONEncode'), ADR(JSONObject)));

// [End of file]