División de 8-dígitos BCD, con especificación de destino
El resultado se almacena en d y el resto se almacena en la variable del sistema sys_diDDivRemainder.
Entrada
Dividendo, área de 32 bits para el dato BCD de 8 dígitos o constante BCD equivalente
Divisor, área de 32 bits para el dato BCD de 8 dígitos o constante BCD equivalente
Salida
Cociente, área de 32 bits para almacenar el dato BCD (el resto se almacena en la variable del sistema sys_diDDivRemainder)
En lugar de utilizar esta instrucción F, se recomienda utilizar la instrucción FP7 correspondiente:
FP_MOD_BCD,FP_DIV_MOD_BCD,FP_DIV_BCDSi el resultado calculado es 0.
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: DWORD:=16#00001110;
(*dividend*)
divisor: DWORD:=16#00000011;
(*divisor*)
output_value: DWORD:=0;
(*result after 0->1 leading edge
from start: 16#00000100*)
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,10,1,12,3,);
B(B_VARIN,,dividend,12,2,14,4,);
B(B_VARIN,,divisor,12,3,14,5,);
B(B_VAROUT,,output_value,21,2,23,4,);
B(B_F,F53_DBDIV!,Instance,14,0,21,5,,?DEN?D@'s1'?Ds2?AENO?Cd);
L(1,2,10,2);
L(12,2,14,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
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
F53_DBDIV(dividend, divisor, output_value);
END_IF;