WriteAsync (Methode)

Übersicht

Typ:

Methode

Verfügbar ab:

V1.5.4.0

Funktionsbeschreibung

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.

HINWEIS: Wenn Sie eine teilweise analysierte JSON-Zeichenfolge zurück in den Stammpuffer schreiben, geht der nicht analysierte Teil der JSON-Zeichenfolge verloren.

Schnittstelle

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.

HINWEIS: Aus Leistungsgründen wird die Gültigkeit der Eingangsparameter der Funktionsbausteine nur im ersten Zyklus nach dem Auslösen der Methodenausführung überprüft. Ändern Sie diese Werte nicht, während der Funktionsbaustein ausgeführt wird. Durch die Ausführung dieser Methode werden ein zuvor erkannter und von den entsprechenden Eigenschaften angegebener Fehler sowie Informationen zum vorhergehenden Schreibvorgang zurückgesetzt.

Beispiel

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