AdrDT_Of_Offs

Devuelve la dirección DT de la entrada o de la salida con un offset

A partir del valor en la entrada/salida Offs, la función genera una dirección de 16 bits en el área DT y la envía a la entrada/salida AdrDT. Esta entrada tiene que estar directamente conectada a la entrada o salida de 16 bits de una función básica. El valor en la entrada/salida Offs representa la dirección offset dentro del área de datos DT. Utilizando GetPointer se puede transferir un valor del área de memoria a una función de usuario o a un bloque de función.

Parámetros

Entrada

AdrDT (INT)

Proporciona la dirección de offset DT de 16 bits en un área

Este pin debe estar conectado a la entrada o salida de una función básica para la que estén permitidos los tipos de datos INT, WORD

Salida

Offs (WORD, INT, UINT)

Offset para la dirección DT0

Observaciones

  • Recordar que la ejecución de la función básica que usa la dirección creada en el área DT, está determinada por la asignación de la función Is_AreaDT con el valor para el área de memoria de la variable a la entrada EN.

  • Esta función accede internamente a uno de los registros índice que también se usan para cálculos con arrays.

  • Solo para los editores LD y FBD: Para insertar la instrucción en la ventana de programación, seleccionar Instrucción de entrada o Instrucción de salida desde el panel Instrucciones.

Ejemplo

DUT

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
		start: BOOL:=FALSE;
			(*activation of the function*)
		DutNonBoolean: @'Dut_NonBoolean';
			(*structured data type*)
		ActualPosition: DINT:=0;
			(*beginning position from which the data should be read to the IC card*)
	END_VAR

En este caso se declara la variable DutNonBoolean del tipo de dato DUT. No se asigna ningún valor a los elementos de la variable DutNonBoolean puesto que les valores de la variable DutNonBoolean se sobrescriben después de ejecutar la función ReadFromIcCard.

Cuerpo de la POU

Cuando la variable start pasa de FALSE a TRUE, se ejecuta la función ReadFromIcCard. La función lee los valores de la tarjeta IC a partir de la dirección ActualPosition y escribe la información en la variable DutNonBoolean. No olvidar que la tarjeta IC tiene que estar debidamente formateada a través del menú Online > Tarjeta IC... y debe contener los valores a partir de la dirección ActualPosition.

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_CONTACT,,start,6,1,8,3,);
B(B_F,ReadFromIcCard!,Instance,18,1,27,8,,?DEN?DArea?DOffset?DSize?DPosition?AENO?C);
B(B_VARIN,,2,16,4,18,6,);
B(B_VARIN,,ActualPosition,16,6,18,8,);
B(B_VAROUT,,ActualPosition,27,3,29,5,);
B(B_F,GetPointer!,Instance,11,3,18,5,,?D?C);
B(B_VARIN,,Dut_NonBoolean,7,3,9,5,);
B(B_F,Size_Of_Var!,Instance,9,5,16,7,,?D?C);
L(18,2,18,3);
L(8,2,18,2);
L(1,2,6,2);
L(9,4,11,4);
L(9,4,9,6);
L(16,6,18,6);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Ejemplo: programación de la función de usuario ReadFromIcCard:

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_INPUT
		p32Pointer: POINTER32;
			(*area, offset and size of data values*)
		diPosition: DINT:=0;
			(*beginning position from which the data should be read from the IC card*)
	END_VAR
	VAR_OUTPUT
		p32ActualPosition: POINTER32;
			(*shows the area, offset and size where the data of the IC card is stored*)
	END_VAR
	VAR
	END_VAR

Cuerpo de la POU

Si el valor de las variables Area y Offset que se proporciona a través del programa de llamada, está dentro del área DT- o FL (es decir, el compilador ha asignado una dirección DT- o FL a la variable p32Pointer), el dato se lee a partir de la dirección p32ActualPosition en la tarjeta IC. Se incrementa la posición con el tamaño de esta variable.

Cuerpo LD

	BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_VARIN,,2,20,3,22,5,);
B(B_VARIN,,1000,20,4,22,6,);
B(B_VARIN,,awProcessDataToGet[0],10,5,12,7,);
B(B_CONTACT,,bGetData,5,2,7,4,R);
B(B_F,Size_Of_Var!,Instance,12,5,19,7,,?D?C);
B(B_F,E_ReadFromIcCard!,Instance,22,1,37,7,,?DEN?DBankNumber?DBankOffset?DDataNumberOfWords?AENO?CDataStartAddress);
B(B_F,Adr_Of_Var_O!,Instance,37,3,45,5,,?D?C);
B(B_VAROUT,,awProcessDataToGet,45,3,47,5,);
L(1,3,5,3);
L(19,6,22,6);
L(1,0,1,9);
L(7,3,22,3);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY
Temas relacionados

Se pueden obtener más ejemplos desde el directorio "Ejemplos" del CD de instalación del FPWIN :

Read, write IC card (REAL, DUT, FP10SH, FP2SH)

Read, write shared memory (REAL, DUT, FP10SH, FP2SH, FP2)

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