Nibble-Transfer
Die Nibbles des Speicherregisters oder der Speicherkonstante s werden, wie im Speicherregister n festgelegt, in das Speicherregister d transferiert.
Eingang
16-Bit-Quellregister
Legt die Nibble-Ausgangs- und die -Zielposition sowie die Anzahl der Nibbles fest.
Ausgang
16-Bit-Zielregister
Wir empfehlen, anstelle von diesem F-Befehl den entsprechenden FP7-Befehl zu verwenden: FP_MOVE_DIGITS
Nibbles sind Einheiten von 4 Bits, die zum Datentransfer verwendet werden. Mit diesem Befehl werden 16-Bit-Daten in 4 Nibbles aufgeteilt. Die Nibbles werden der Reihe nach Nibble 0, Nibble 1, Nibble 2 und Nibble 3 benannt, angefangen von den vier niedrigsten signifikanten Bits:
16-Bit-Daten
bit
Nibble
n legt die (3) Ausgangsposition der Nibbles, die (2) Anzahl der Nibbles und die (1) Zielposition der zu kopierenden Nibbles wie folgt fest:
0 Nibble 0
1 Nibble 1
2 Nibble 2
3 Nibble 3
0 Kopiert 1 Nibble (4 Bits)
1 Kopiert 2 Nibbles (8 Bits)
2 Kopiert 3 Nibbles (12 Bits)
3 Kopiert 4 Nibbles (16 Bits)
0 Nibble 0
1 Nibble 1
2 Nibble 2
3 Nibble 3
Nachstehend einige Beispiele für den Digit-Transfer mit unterschiedlichen Eingaben bei n.
n: 16#101 kopiert Nibble 1 der Quelle in Nibble 1 des Ziels.
n: 16#003 (Kurzform: 16#3) kopiert Nibble 3 der Quelle in Nibble 0 des Ziels.
n: 16#212 kopiert mehrere Nibbles (Nibble 2 und Nibble 3) der Quelle in mehrere Nibbles (Nibble 2 und Nibble 3) des Ziels.
n: 16#210 kopiert mehrere Nibbles (Nibble 0 und Nibble 1) der Quelle in mehrere Nibbles (Nibble 2 und Nibble 3) des Ziels.
n: 16#130 kopiert 4 Nibbles (Nibbles 0 bis 3) der Quelle in 4 Nibbles (Nibbles 0 bis 3) des Ziels.
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;
source: INT:=329;
(*decimal 329 = 16#149*)
specify_n: WORD:=16#111;
(*Beginning from the end:
1: first hex. digit is digit 1, i.e. 4
1: copies 2 hex. digits, i.e. 14
1: destination is hex. digit 1*)
output: INT:=0;
(*16#140 = decimal 320*)
END_VAR
Wenn die Variable start auf TRUE gesetzt wird, wird die Funktion ausgeführt. Die Werte für source und output in dem “POE-&Kopf-Monitor” des Kontaktplanrumpfes müssen eingestellt werden, damit der Hexadezimalwert durch Aktivieren des “Hex”-Symbols in der Werkzeugleiste angezeigt werden kann.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,F6_DGT!,Instance,12,0,18,5,,?DEN?D@'s'?Dn?AENO?Cd);
B(B_VARIN,,source,8,2,10,4,);
B(B_VARIN,,specify_n,8,3,10,5,);
B(B_VAROUT,,output,18,2,20,4,);
B(B_CONTACT,,start,6,1,8,3,);
L(10,3,12,3);
L(10,4,12,4);
L(8,2,12,2);
L(1,2,6,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F6_DGT( s:= source,
n:= specify_n,
d=> output);
END_IF;