Да именно UDP. После приёма пустого пакета использую тот же сокет и отправляю на PC:
cln_adr.sin_family := SOCKET_AF_INET;
bytes_received := SysSockRecvFrom(sock, ADR(R2_BUF[0]), 36, 0, ADR(cln_adr), SIZEOF(cln_adr));
IF bytes_received > 0 THEN
S_BUF.SIZE := 0;
R2_BUF.SIZE := DINT_TO_UINT(bytes_received);
mbas_inPLC(S_BUF:= S_BUF, R2_BUF:=R2_BUF , DATA:= DATA, ERROR=> ERROR);
bytes_sent := SysSockSendTo(sock, ADR(S_BUF.BUFFER), S_BUF.SIZE, 0, ADR(cln_adr), SIZEOF(cln_adr));
.....
mbas_inPLC заглушка заполняющая S_BUF поскольку R2_BUF пуст.
Приходит пакет.