FP_END_SCAN

Final condicional

Finaliza el ciclo de scan actual del código de programa en la posición de programa actual.

Parámetros

Entrada

EN (BOOL)

si la condición es TRUE, la instrucción se ejecuta

Salida

ENO (BOOL)

ajustar a TRUE si la instrucción ha sido procesada con éxito

Observaciones

  • Cuando la condición de ejecución pasa a TRUE, el programa finaliza el ciclo de scan actual e inicia el procesamiento de E/S. A continuación, el programa vuelve a la primera dirección.

  • Esta instrucción no se puede ejecutar en subprogramas tales como programas de subrutina o programas de interrupción. Usar la instrucción FP_END_SCAN solo en el área del programa principal.

  • Se pueden usar dos o más instrucciones FP_END_SCAN dentro del programa principal.

  • Se debe ir con cuidado al utilizar una de las instrucciones enumeradas a continuación, las cuales se ejecutan detectando el flanco ascendente de una condición de ejecución (trigger).

    • DF (flanco de subida diferencial)

    • Entrada de contaje para CT (contador)

    • Entrada de contaje para F118_UDC (contador ascendente/descendente)

    • Entrada de desplazamiento para SR (registro de desplazamiento)

    • Entrada de desplazamiento para F119_LRSR (registro de desplazamiento a izquierda/derecha)

    • Ejecución diferencial de instrucciones P (especificado por P y un número, p.ej., P20_ADD)

Ejemplo

Lista de tareas

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
		bEndCurrentScan: BOOL:=FALSE;
		iCounterExecuted: INT:=0;
		iCounterNotExecuted: INT:=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 := 4 ;
        NETWORK_BODY
B(B_F,FP_INC!,,20,0,26,4,,?DEN?Dd?Ad?AENO);
B(B_VARIN,,iCounterExecuted,18,2,20,4,);
L(1,2,20,2);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_F,FP_END_SCAN!,,19,0,27,3,,?DEN?AENO);
B(B_CONTACT,,bEndCurrentScan,6,1,8,3,);
L(1,2,6,2);
L(8,2,19,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 4 ;
        NETWORK_BODY
B(B_F,FP_INC!,,20,0,26,4,,?DEN?Dd?Ad?AENO);
B(B_VARIN,,iCounterNotExecuted,18,2,20,4,);
L(1,2,20,2);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Ejemplo Program_2

Cuerpo en ST

FP_INC(d := iCounterExecuted);
If (bEndCurrentScan) then
    FP_END_SCAN();
End_if;
FP_INC(d := iCounterNotExecuted);

Modificado el: 2023-03-22Comentarios sobre esta páginaLínea directa de Panasonic