Liefert die FL-Adresse aus einem Adressenoffset einer Ein-/Ausgangsvariable
Diese Funktion generiert aus dem Wert am Eingang Offs am Ein-/Ausgang AdrFL eine 16-Bit-Adresse im FL-Bereich. Dieser Ein-/Ausgang muss unmittelbar an einem 16-Bit-Ein- oder -Ausgang einer FP-Funktion angeschlossen sein. Der Wert am Ein-/Ausgang Offs stellt den Adressenoffset innerhalb des FL-Datenbereichs dar. Mit GetPointer kann er zusammen mit einem Wert für den Speicherbereich ermittelt und an eine benutzerdefinierte Funktion oder einen benutzerdefinierten Funktionsbaustein übergeben werden.
Eingang
Liefert 16-Bit-FL-Adressenoffset
Dieser Pin muss am Ein-/Ausgang einer FP-Funktion angeschlossen sein, an dem der Typ INT, WORD zulässig ist.
Ausgang
Offset zur Adresse FL0
Wichtig ist, dass die Ausführung der FP-Funktion, die mit der erzeugten Adresse im FL-Bereich arbeiten soll, durch Anlegen der Funktion Is_AreaFL mit dem Wert für den Speicherbereich der Variablen am EN-Eingang gesteuert wird.
Diese Funktion greift intern auf eines der Index-Register zu, die auch für Array-Berechnungen verwendet werden. Ist auf einer Steuerung der FL-Bereich nicht verfügbar, wird automatisch statt der FL-Adresse die Adresse DT0 generiert.
Die Funktion Is_AreaFL liefert dann immer FALSE zurück und verhindert somit die Ausführung des Kommandos mit dieser unsinnigen Adresse. Somit können mit dieser Funktion geschriebene benutzerdefinierte Funktionen und Funktionsbausteine auch auf Steuerungen laufen, die den FL-Bereich nicht unterstützen.
Nur für KOP- und FBS-Editoren: Wählen Sie im Fenster “Befehle” die Option “Eingangsbefehl” oder “Ausgangsbefehl”, um den erforderlichen Befehl in das Programmierfenster einzufügen.
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
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
Hier wurde die Variable DutNonBoolean vom Typ des oben angelegten SDT deklariert. Die Belegung der Elemente der Variablen DutNonBoolean mit Werten wurde im POE-Kopf bzw. Rumpf nicht vorgenommen, da die Werte der Variablen DutNonBoolean nach Ausführung der Funktion ReadFromIcCard überschrieben werden.
Wenn die Variable start von FALSE auf TRUE gesetzt wird, wird die Funktion ReadFromIcCard ausgeführt. Sie liest Werte auf der IC-Karte ab der Adresse ActualPosition und schreibt die Information in die Variable DutNonBoolean. Beachten Sie, dass vorher die IC-Karte über das Menü entsprechend formatiert sein muss und ggf. Werte ab der Adresse ActualPosition auf der IC-Karte vorhanden sein sollten.
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