FP_GET_UNIT_OFFSETS1

Calcular el offset de E/S de una unidad de expansión

Esta instrucción calcula los valores de offset relevantes de una unidad de expansión en el número de slot especificado por iSlot para acceder a la entrada/salida o a memorias a través de modificadores índice.

Parámetros

Entrada

iSlot (WORD, INT, UINT)

Número de slot

Salida

diOffset_WX0_WY0 (DWORD, DINT, UDINT, DATE, TOD, DT)

El número de palabra de E/S inicial

diOffset_X0_Y0 (DWORD, DINT, UDINT, DATE, TOD, DT)

El número de palabra de E/S inicial multiplicado por 16

diOffset_S1 (DWORD, DINT, UDINT, DATE, TOD, DT)

Número de slot menos 1

Observaciones

iSlot = 5 y número de palabra inicial = 16

Número de palabra inicial

Dirección correspondiente

Aplicaciones ejemplo

Explicación

diOffset_WX0_WY0 = 16

DIX

DIXWX1 o DIXWY1

Acceso a palabra de E/S 1 de la unidad en el slot 5

diOffset_X0_Y0 = 16*16=256

DIY

DIYX12 o DIYY12

Acceso a bit hexadecimal de E/S 12 de la unidad en el slot 5

diOffset_S1 = 4

DI2

DI2S1:UM1A

Acceso a palabra hexadecimal de memoria 1A de la unidad en el slot 5

Ejemplo

Cabecera de la POUCopy code to clipboard

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
		iSlot: INT:=1;
		bEnable: BOOL:=FALSE;
		wSlotFirstInputWord: WORD:=0;
		bSlotFirstInputFlag: BOOL:=FALSE;
		wSlotFirstUnitMemoryWord: WORD:=0;
		bGetSlotFirstInputWord: BOOL:=FALSE;
		bGetSlotFirstInputFlag: BOOL:=FALSE;
		bGetSlotFirstMemoryWord: BOOL:=FALSE;
	END_VAR

Cuerpo de la POU

Cuando la variable bEnable pasa a TRUE, se ejecuta la función.

Cuerpo LDCopy code to clipboard

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_F,FP_GET_UNIT_OFFSETS1!,,17,0,30,6,,?DEN?DiSlot?AENO?AdiOffset_WX0_WY0?AdiOffset_X0_Y0?AdiOffset_S1);
B(B_VARIN,,iSlot,15,2,17,4,);
B(B_VAROUT,,DIX,30,2,32,4,);
B(B_VAROUT,,DIY,30,3,32,5,);
B(B_VAROUT,,DI2,30,4,32,6,);
B(B_CONTACT,,bEnable,6,1,8,3,);
L(1,2,6,2);
L(8,2,17,2);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 4 ;
        NETWORK_BODY
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,DIXWX0,15,2,17,4,);
B(B_VAROUT,,wSlotFirstInputWord,23,2,25,4,);
B(B_CONTACT,,bGetSlotFirstInputWord,6,1,8,3,);
L(8,2,17,2);
L(1,2,6,2);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 4 ;
        NETWORK_BODY
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,DIYX0,15,2,17,4,);
B(B_VAROUT,,bSlotFirstInputFlag,23,2,25,4,);
B(B_CONTACT,,bGetSlotFirstInputFlag,6,1,8,3,);
L(8,2,17,2);
L(1,2,6,2);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 4 ;
        NETWORK_BODY
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,DI2S1:UM0,15,2,17,4,);
B(B_VAROUT,,wSlotFirstUnitMemoryWord,23,2,25,4,);
B(B_CONTACT,,bGetSlotFirstMemoryWord,6,1,8,3,);
L(8,2,17,2);
L(1,2,6,2);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en STCopy code to clipboard

if (bEnable) then
    FP_GET_UNIT_OFFSETS1(iSlot := iSlot, 
                                  diOffset_WX0_WY0 => DIX, 
                                  diOffset_X0_Y0 => DIY, 
                                  diOffset_S1 => DI2);
end_if;
if (bGetSlotFirstInputWord) then
    wSlotFirstInputWord := DIXWX0;
end_if;
if (bGetSlotFirstInputFlag) then
    bSlotFirstInputFlag := DIYX0;
end_if;
if (bGetSlotFirstMemoryWord) then
    wSlotFirstUnitMemoryWord := DI2S1:UM0;
end_if;

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