Diese Methode wird zum asynchronen Erstellen und Schreiben von JSON-formatierten Daten verwendet. Die Ausführung kann mehrere Zyklen in Anspruch nehmen. Voraussetzung ist, dass die Daten erfolgreich analysiert wurden. Siehe Analysieren (Methode). Während des Schreibvorgangs können keine weiteren Methoden oder Eigenschaften des Funktionsbausteins verarbeitet werden.
Der globale Parameter GPL.Gc_udiJsonMaxNumOfBytesPerCycle gibt die Anzahl der in einem Zyklus verarbeiteten Bytes an.
Der Schreibvorgang ist abgeschlossen, wenn einer der Ausgänge q_xDone oder q_xError TRUE entspricht. Sie müssen die Methode zyklisch aufrufen, während der Ausgang q_xBusy TRUE ist.
Die Diagnoseausgänge geben an, ob die Ausführung erfolgreich verarbeitet wurde. Wenn ein Fehler erkannt wird, finden Sie weitere Informationen in den Eigenschaften Result und ResultMsg.
Eingang |
Datentyp |
Beschreibung |
---|---|---|
i_anyBufferToWrite |
ANY |
In der Anwendung zugeordneter Puffer. |
Ausgang |
Datentyp |
Beschreibung |
---|---|---|
q_xBusy |
BOOL |
Wenn dieser Ausgang auf TRUE gesetzt ist, wird die Methode ausgeführt. |
q_xDone |
BOOL |
Wenn dieser Ausgang auf TRUE gesetzt ist, wurde die Methodenausführung erfolgreich abgeschlossen. |
q_xError |
BOOL |
Wenn dieser Ausgang auf TRUE gesetzt wird, wurde ein Fehler identifiziert. Für weitere Informationen, siehe q_etResult und q_etResultMsg. |
Das folgende Beispiel zeigt, wie ein Analyseprozess, die Änderung eines Werts aus der analysierten JSON-Zeichenfolge und ein asynchrones Schreiben implementiert werden:
PROGRAM SR_Main_Async
VAR
iState : INT;
xWriteModifiedJsonString : BOOL;
sCountry : STRING := 'Deutschland';
sJsonString : STRING[500] := '{"Library": "FileFormatUtility","Namespace": "FFU","Forward Compatible": true,"Supported Formats": ["JSON", "XML", "CSV"],"Company": "Schneider Electric","Address":{"Street": "Schneiderplatz","House Number": 1,"Postal Code": "97828","City": "Marktheidenfeld","Country": "Germany"}}'
fbJsonUtilities : FFU.FB_JsonUtilities;
xBusy : BOOL;
etResult : FFU.ET_Result;
sResultMsg : STRING;
END_VAR
CASE iState OF
0:
IF xWriteModifiedJsonString THEN
xWriteModifiedJsonString := FALSE;
//Parse JSON formatted string
IF NOT (fbJsonUtilities.Parse(i_anyDataToParse := sJsonString, i_sJPath := '')) THEN
//Error handling for failed Parse process.
etResult := fbJsonUtilities.Result;
sResultMsg := fbJsonUtilities.ResultMsg
RETURN;
END_IF
//Select element containing requested value
IF NOT (fbJsonUtilities.Select(i_sJPath := '.Address.Country')) THEN
//Error handling for failed Parse process.
etResult := fbJsonUtilities.Result;
sResultMsg := fbJsonUtilities.ResultMsg
RETURN;
END_IF
//Modify value of item
IF NOT ((fbJsonUtilities.ModifyValueTypeOfSelected(i_anyValue := sCountry)) THEN
//Error handling for failed Modify process.
etResult := fbJsonUtilities.Result;
sResultMsg := fbJsonUtilities.ResultMsg
RETURN;
END_IF
iState := 10;
END_IF
10:
//Write modified JSON formatted string
(fbJsonUtilities.WriteAsync(i_anyBufferToWrite := sJsonString, q_xBusy => xBusy);
IF NOT xBusy THEN
IF fbJsonUtilities.Error THEN
//Error handling for failed Write process.
etResult := fbJsonUtilities.Result;
sResultMsg := fbJsonUtilities.ResultMsg
END_IF
iState :=0;
END_IF
END_CASE