The function block is started by writing the variable bPost in the main program to TRUE.
The rising edge is then used to send a POST request with the IotHttpRequest function block.
After the request has been finished, the error handling is processed. When neither the function block itself nor the HTTP status code display an error, the JSON response from the webserver is parsed. The JSON response contains the nReqCount variable that has been send to the webserver.
RisingEdge(CLK:= bSend); CASE nState OF 0: IF RisingEdge.Q THEN sContent:= UDINT_TO_STRING(nReqCount+1); IF fbRequest.SendRequest(sUri:= '/post?hello=world', fbClient:= fbClient, eRequestType:= ETcIotHttpRequestType.HTTP_POST, pContent:= ADR(sContent), nContentSize:= LEN2(ADR(sContent)), 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 bGetJsonResult:= TRUE; IF fbJson.HasMember(jsonDoc, 'data') THEN jsonVal:= fbJson.FindMember(jsonDoc, 'data'); sResultValue:= fbJson.GetString(jsonVal); IF STRING_TO_UDINT(sResultValue)= nReqCount THEN nValidResCount:= nValidResCount+1; bError:= FALSE; END_IF END_IF 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