IF NOT fbTcpClient.xActive THEN
ipAddress.SetInitialValue(ipAddress := gvlSetting.gc_stIpAddr);
END_IF
fbTcpClient(xEnable := xConnect, itfIPAddress := ipAddress, uiPort := gvlSetting.gc_uiPort, udiTimeOut := 0);
fbBlink(ENABLE := TRUE);
IF (fbBlink.OUT AND (xBlink <> fbBlink.OUT) ) THEN
udiVal := udiVal + 1;
FOR iIndex := 0 TO gvlSetting.gc_wMaxTelegram DO
abyTx[iIndex] := 0;
END_FOR
// 'WD: ' = Watchdog-Telegram
abyTx[0] := 87;
abyTx[1] := 68;
abyTx[2] := 58;
abyTx[3] := 32;
// Counter
pudiVal := ADR(udiVal);
abyTx[4] := pudiVal^;
pudiVal := pudiVal + 1;
abyTx[5] := pudiVal^;
pudiVal := pudiVal + 1;
abyTx[6] := pudiVal^;
pudiVal := pudiVal + 1;
abyTx[7] := pudiVal^;
fbTcpWrite(xExecute := xConnect,itfConnection := fbTcpClient.itfConnection, udiTimeOut := 0, udiSize := SIZEOF(abyTx), pData := ADR(abyTx));
ELSE
fbTcpWrite(xExecute := FALSE);
END_IF
xBlink := fbBlink.OUT;
fbTcpRead(xEnable := xRead AND xConnect, itfConnection := fbTcpClient.itfConnection, udiSize := SIZEOF(abyRx), pData := ADR(abyRx), udiCount => udiRead);
IF fbTcpRead.xReady THEN
IF (fbTcpRead.udiCount = (gvlSetting.gc_wMaxTelegram + 1)) THEN
IF ((abyRx[0] = 65) AND (abyRx[1] = 67) AND (abyRx[2] = 75) AND (abyRx[3] = 58) AND (abyRx[4] = 32)) THEN // 'WD: ' = Watchdog-Telegram
udiLastAck := SysTimeRtc.SysTimeRtcGet(udiResult);
END_IF
END_IF
ELSIF fbTcpRead.xError THEN
fbTcpRead(xEnable := FALSE);
END_IF
IF NOT fbTcpClient.xActive AND NOT fbTcpClient.xBusy AND NOT fbTcpClient.xDone THEN
xConnect := TRUE;
ELSIF fbTcpClient.xDone THEN
xConnect := FALSE;
END_IF
udiNow := SysTimeRtc.SysTimeRtcGet(udiResult);
IF (udiNow > (udiLastAck + c_udiInterval)) THEN
xMissingAck := TRUE;
ELSE
xMissingAck := FALSE;
END_IF |