Evaluar la condición de "recepción completa" por tiempo de espera
Este bloque de función evalúa la condición de tiempo de espera para detectar el fin de recepción, en las cadenas de datos que no contienen un código de fin de trama, por ejemplo, durante la transferencia de datos binarios.
Entrada
Especificar los puertos de comunicación (dependiendo del tipo de PLC):
Puerto COM, por ejemplo SYS_COM0_PORT
Puerto Ethernet, por ejemplo SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU por ejemplo 16#xx01 (xx = número de slot) en COM01
Una vez transcurrido este periodo de tiempo sin recibir más datos, IsDone pasa a TRUE.
Se asigna a la dirección de inicio del buffer de recepción. Esta dirección contiene el número de bytes recibidos. (Solamente para la CPU)
Salida
Pasa a TRUE si se han recibido uno o más bytes y el número de bytes recibidos no ha variado durante el tiempo especificado en TimeOutForCPU o en el cuadro de diálogo "Configuración de la MCU".
Para el puerto de comunicación de una CPU, la primera palabra del buffer de recepción se asigna a NoOfBytesReceived (número de bytes recibidos). Si el número de bytes recibidos no varía durante el tiempo especificado en TimeOutForCPU, IsDone pasa a TRUE.
En el caso del módulo MCU y FP7, se evalúa la bandera de "recepción completa". Para establecer el tiempo de espera en modo PROG, utilizar el cuadro de diálogo Configuración de la MCU o en modo RUN, utilizar la instrucción F159_MWRT_PARA (solo para el FP2).
Evaluación de la bandera de "recepción completa"
Cuando durante el tiempo especificado no se reciben más bytes o lse ejecuta a instrucción ClearReceiveBuffer, la salida IsDone pasa a TRUE. No es posible la recepción de más datos. F159_MTRN o ClearReceiveBuffer pone la bandera "IsDone" a FALSE.
El fin de recepción solo se puede determinar comprobando el contenido del buffer de recepción (por ejemplo, el número de bytes recibidos). El número de bytes recibidos puede cambiar dentro del ciclo de scan. Por ejemplo, si el número de bytes recibidos se lee más de una vez, se pueden dar estados diferentes dentro de un ciclo de scan.
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
VAR
IsReceptionDone1: IsReceptionDoneByTimeOut;
END_VAR
VAR_EXTERNAL
g_awReceiveBuffer: ARRAY [0..10] OF WORD;
END_VAR
VAR
bIsRecDone1: BOOL:=FALSE;
wPort: WORD:=0;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_FB,IsReceptionDoneByTimeOut!,IsReceptionDone1,11,1,24,6,,?BPort?BTimeOutForCPU?BNoOfBytesReceived?AIsDone);
B(B_VARIN,,wPort,9,2,11,4,);
B(B_VARIN,,T#20ms,9,3,11,5,);
B(B_VAROUT,,IsRecDone1,24,2,26,4,);
B(B_VARIN,,g_awReceiveBuffer[0],9,4,11,6,);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IsReceptionDone1(Port := wPort,
TimeOutForCPU := T#20ms,
NoOfBytesReceived := g_awReceiveBuffer[0],
IsDone => bIsRecDone1);