Спасибо за совет, я придумал такой таймер (ниже). Но таймер как и цикл плк останавливается после Recv и ждет данных . Как только Recv закрыват (* *), то таймер каждые 2 секунды как задумывалось закрывает Сокет. Это приводит к первому условию ветвления HandleSOCKET<0 и создате новый. Но при появлении Recv таймер не работает как хотелось бы. Я такое поведение понял бы, если не SysSockIoctl, который должне был перевести в неблокирующее состояние сокеты и цикл шел как обычно.
IF start THEN
IF HandleSocket<0 THEN
HandleSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, 0);
result:= SysSockIoctl (HandleSocket, SOCKET_FIONBIO, ADR(mode));
sa.sin_family:=SOCKET_AF_INET;
sa.sin_addr:=SOCKET_INADDR_ANY;
sa.sin_port:=SysSockHtons(1300);

result_bind:=SysSockBind(HandleSocket, ADR(sa), SIZEOF(sa)) ;
ELSE
tik(IN:=tik.IN,PT:=T#2s);
Tik.in:=TRUE;
numberOfBytes := SysSockRecvFrom (HandleSocket,ADR(MessageFromPC),1600,0,ADR(sa),SI ZEOF(sa));

IF numberofbytes<>-1 THEN SysSockClose(HandleSocket);
END_IF
END_IF

ELSE
IF HandleSocket<>SOCKET_INVALID THEN
SysSockClose(HandleSocket);
HandleSocket:=SOCKET_INVALID;
MessageFromPC:=Zero;
END_IF
END_IF

IF tik.Q THEN
SysSockClose(HandleSocket);
tik(IN:=FALSE);
HandleSocket := SOCKET_INVALID;
END_IF;