FP_GET_UNIT_OFFSETS1

E/A-Offset eines Erweiterungsmoduls berechnen

Dieser Befehl berechnet die entsprechenden Offsetwerte eines Erweiterungsmoduls in der durch iSlot angegebenen Steckplatznummer, um auf den Ein-/Ausgang oder die Modulspeicher über Index-Modifizierer zuzugreifen.

Parameter

Eingang

iSlot (WORD, INT, UINT)

Steckplatznummer

Ausgang

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

Die E/A-Anfangswortadresse

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

Die E/A-Anfangswortadresse multipliziert mit 16

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

Steckplatznummer minus 1

Anmerkungen

iSlot = 5 und Anfangswortadresse = 16

Anfangswortadresse

Entsprechende Adresse

Anwendungsbeispiel

Erläuterung

diOffset_WX0_WY0 = 16

DIX

DIXWX1 oder DIXWY1

Zugriff auf E/A-Wort 1 des Moduls an Steckplatz 5

diOffset_X0_Y0 = 16*16=256

DIY

DIYX12 oder DIYY12

Zugriff auf E/A-Hexadezimal-Bit 12 des Moduls an Steckplatz 5

diOffset_S1 = 4

DI2

DI2S1:UM1A

Zugriff auf Modulspeicher-Hexadezimal-Wort 1A des Moduls an Steckplatz 5

Beispiel

POE-KopfCopy code to clipboard

Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.

	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

POE-Rumpf

Wenn die Variable bEnable auf TRUE gesetzt wird, wird die Funktion ausgeführt.

KOP-RumpfCopy 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

ST-RumpfCopy 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;

Letzte Änderung am: 2021-06-01Feedback zu dieser SeitePanasonic Hotline