IsReceptionDoneByTimeOut

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.

Parámetros

Entrada

Port (WORD, INT, UINT)

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

TimeOutForCPU (TIME)

Una vez transcurrido este periodo de tiempo sin recibir más datos, IsDone pasa a TRUE.

NoOfBytesReceived (WORD, INT, UINT)

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

IsDone (BOOL)

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".

Observaciones

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.

Ejemplo

Cabecera de la POU

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

Cuerpo LD

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

Cuerpo en ST

IsReceptionDone1(Port := wPort,
                 TimeOutForCPU := T#20ms,
                 NoOfBytesReceived := g_awReceiveBuffer[0],
                 IsDone => bIsRecDone1);

Modificado el: 2022-04-19Comentarios sobre esta páginaLínea directa de Panasonic