Get

  1. Der Funktionsbaustein wird gestartet, indem die Variable bGetOpenWeatherMap im Hauptprogramm auf TRUE geschrieben wird.
  2. Die steigende Flanke wird dann verwendet, um eine GET-Anfrage mit dem Funktionsbaustein IotHttpRequest zu senden.
  3. Nachdem die Anfrage abgeschlossen ist, wird die Fehlerbehandlung durchlaufen. Wenn weder der Funktionsbaustein selbst noch der HTTP-Statuscode einen Fehler aufweisen, wird die JSON-Antwort vom Webserver geparst.
FUNCTION_BLOCK FB_TestHTTP_Get_openWeatherMap
VAR_INPUT
    bSend             : BOOL;
END_VAR
VAR_IN_OUT
    fbClient          : FB_IotHttpClient;
END_VAR
VAR_OUTPUT
    bBusy             : BOOL;
    bError            : BOOL;
END_VAR
VAR
    fbRequest         : FB_IotHttpRequest;
    fbJson            : FB_JsonDomParser;
    nState            : UDINT;
    RisingEdge        : R_TRIG;

    bGetContentResult : BOOL;
    sContent          : STRING(511);

    bGetJsonResult    : BOOL;
    jsonDoc           : SJsonValue;
    jsonVal           : SJsonValue;
    sResultValue      : STRING;

    nReqCount         : UDINT;
    nResCount         : UDINT;
    nValidResCount    : UDINT;
    nErrCount         : UDINT;
END_VAR
RisingEdge(CLK:= bSend);
CASE nState OF
0:
    IF RisingEdge.Q THEN
        IF fbRequest.SendRequest(sUri:= '/data/2.5/weather?id=123456&APPID=123456abcdef',
                                 fbClient:= fbClient, 
                                 eRequestType:= ETcIotHttpRequestType.HTTP_Get, 0, 0, 0) THEN
            nState:= 1;
            nReqCount:= nReqCount+1;
            bBusy:= TRUE;
            bError:= FALSE;
        END_IF
    END_IF
1:
    IF NOT fbRequest.bBusy THEN
        bError:= TRUE;
        IF NOT fbRequest.bError THEN
            bGetContentResult:= fbRequest.GetContent(pContent:= ADR(sContent), 
                                                     nContentSize:= SIZEOF(sContent), 
                                                     bSetNullTermination:= TRUE);
            IF fbRequest.nStatusCode >= 200 AND fbRequest.nStatusCode < 300 THEN
                bGetJsonResult:= FALSE;
                jsonDoc:= fbRequest.GetJsonDomContent(fbJson);
                IF jsonDoc <> 0 THEN
                    ; //do something with the weather data
                    nValidResCount:= nValidResCount+1;
                    bError:= FALSE;
                END_IF
                nResCount:= nResCount+1;
            END_IF
        END_IF
        nState:= 0;
        bBusy:= FALSE;
        IF bError THEN
            nErrCount:= nErrCount+1;
        END_IF
    END_IF
END_CASE