División de 4-dígitos BCD, con especificación de destino
Divide la constante BCD o el dato BCD de 4 dígitos especificado en el área de 16 bits s1 entre la constante BCD o el dato BCD de 4 dígitos especificado por s2 si la entrada de trigger EN está a TRUE.
Entrada
Dividendo, área de 16 bits para el dato BCD de 4 dígitos o constante BCD equivalente
Divisor, área de 16 bits para el dato BCD de 4 dígitos o constante BCD equivalente
Salida
Cociente, área de 16 bits para almacenar el dato BCD (el resto se almacena en la variable del sistema sys_iDivRemainder)
El cociente se almacena en d y el resto se almacena en la variable del sistema sys_iDivRemainder.
Si el resultado calculado es 0.
En lugar de utilizar esta instrucción F, se recomienda utilizar la instrucción FP7 correspondiente: FP_MOD_BCD Resto de división de datos BCD, FP_DIV_MOD_BCD División de datos BCD con resto, FP_DIV_BCD División de datos BCD
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
start: BOOL:=FALSE;
(*activates the fuction*)
dividend: WORD:=16#0037;
(*dividend*)
divisor: WORD:=16#0015;
(*divisor*)
output_value: WORD:=0;
(*result after 0->1 leading edge
from start: 16#0002*)
END_VAR
Cuando la variable start está ajustada a TRUE, se ejecuta la función.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,start,5,1,7,3,);
B(B_VARIN,,dividend,7,2,9,4,);
B(B_VARIN,,divisor,7,3,9,5,);
B(B_VAROUT,,output_value,15,2,17,4,);
B(B_F,F52_BDIV!,Instance,9,0,15,5,,?DEN?D@'s1'?Ds2?AENO?Cd);
L(1,2,5,2);
L(7,2,9,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F52_BDIV(dividend, divisor, output_value);
END_IF;
LD |
start |
(* EN = start; Starting signal for the F52_BDIV function. *) |
F52_BDIV |
dividend, divisor, output_value |
(* s1 = dividend (source1) *) (* s2 = divisor (source2) *) (* d = output_value (destination) *) |
(* s1 / s2 = d *) |
||
ST |
out |
(* option *) |