FP_MOVE_DIGITS

Transferencia de dígitos

Estas instrucciones FP mueven n_Digits números de dígitos del valor fuente s_Source desde la posición de dígitos n_SourcePos a la posición de dígitos de destino n_DestPos de los datos de 16 bits especificados por d_Dest.

Parámetros

Entrada

s_Source (WORD)

Área de datos fuente

n_SourcePos (INT, DINT, UINT, UDINT)

Especifica la posición fuente de los dígitos hexadecimales (0–3)

n_Digits (INT, DINT, UINT, UDINT)

Número de dígitos hexadecimales (1–4)

n_DestPos (INT, DINT, UINT, UDINT)

Especifica la posición de destino de los dígitos hexadecimales (0–3)

Salida

d_Dest (WORD)

área de datos de destino

Observaciones

  • Si el número de dígitos de la posición de dígitos de inicio supera el número máximo de dígitos (n_SourcePos + n_Digits > 4), los dígitos restantes se desplazan a la posición de dígitos comenzando desde 0 de la misma palabra.

  • Las áreas s1_Start y s2_End deben cumplir:

    • en la misma área de memoria, p. ej., DT, WR, FL, LD ...

    • s1_Start £ s2_End

Ejemplo

  • Transferir varios dígitos

    • s_Source...WX0
    • n_Digits...U2
    • d_Dest...WY0
    • n_SourcePos...U0
    • n_DestPos...U2
  • Transferir cuatro dígitos

    • s_Source...WX0
    • n_Digits...U4
    • d_Dest...WY0
    • n_SourcePos...U0
    • n_DestPos...U4

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • si el área especificada utilizando el modificador índice supera el límite.
  • si una de las variables de entrada/variables de salida está fuera de rango

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • si el área especificada utilizando el modificador índice supera el límite.
  • si una de las variables de entrada/variables de salida está fuera de rango

Temas relacionados

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
		bStart: BOOL:=FALSE;
			(*activates the function*)
		wInput_value: WORD:=2#1000100010001000;
		iSourceBitPosition: INT:=0;
			(*digit no.0 locates the position of the source bit (here: 2)*)
		iNumberofDigit: INT:=1;
		iDestinationBitPosition: INT:=2;
			(*digit no.2 locates the position of the destination bit (here: 15)*)
		wOutput_value: WORD:=2#1111111111111111;
			(*result after a 0->1 leading
edge from start:
2#0111111111111111*)
	END_VAR

Cuerpo de la POU

Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.

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_F,FP_MOVE_DIGITS!,,13,1,22,8,,?DEN?Ds_Source?Dn_SourcePos?Dn_Digits?Dn_DestPos?AENO?Cd_Dest);
B(B_VARIN,,wInput_value,11,3,13,5,);
B(B_CONTACT,,bStart,7,2,9,4,);
B(B_VARIN,,iSourceBitPosition,11,4,13,6,);
B(B_VARIN,,iNumberofDigit,11,5,13,7,);
B(B_VARIN,,iDestinationBitPosition,11,6,13,8,);
B(B_VAROUT,,wOutput_value,22,3,24,5,);
L(1,3,7,3);
L(9,3,13,3);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

If (bStart) then
    FP_MOVE_DIGITS(s_Source := wInput_value,
                   n_SourcePos := iSourceBitPosition,
                   n_Digits := iNumberofDigit,
                   n_DestPos := iDestinationBitPosition,
                   d_Dest => wOutput_value);
End_if;

Modificado el: 2021-09-27Comentarios sobre esta páginaLínea directa de Panasonic