Hallo Günni,
ich hab' mal auf die schnelle eine AWL-Quelle erstellt:
Code:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
DB_Nr1 : BLOCK_DB ;
DB_Nr2 : BLOCK_DB ;
Start_DB_Nr1 : INT ;
Start_DB_Nr2 : INT ;
Laenge : INT ;
END_VAR
VAR_OUTPUT
Vergleich_OK : BOOL ;
END_VAR
VAR_TEMP
LoopCounter : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
AUF #DB_Nr1; // 1. DB öffnen
TDB ; // als DI aufmachen
AUF #DB_Nr2; // 2. DB öffnen
L #Start_DB_Nr1; // 1. zu vergleichendes Byte vom 1.DB laden
SLD 3; // => ins Pointerformat
LAR1 ; // und ins Adressregister 1 schieben
L #Start_DB_Nr2; // 1. zu vergleichendes Byte vom 1.DB laden
SLD 3; // => ins Pointerformat
LAR2 ; // und ins Adressregister 1 schieben
L #Laenge; // zu vergleichende Länge laden
LOOP: T #LoopCounter; // Schleifenzähler
L DIB [AR1,P#0.0]; // Byte vom 1.DB laden
L DBB [AR2,P#0.0]; // Byte vom 2.DB laden
<>I ;
SPB Ungl; // Wenn ungleich, dann raus aus der Schleife
L P#1.0; // Beide Adressregister um 1 Byte erhöhen
+AR1 ;
+AR2 ;
L #LoopCounter; // Schleifenzähler
LOOP LOOP; // Schleife fortsetzen
SET ; // Wenn beim Vergleich keine Unterschiede aufgetreten sind
= #Vergleich_OK; // dann ist Vergleich in Ordnung
Ungl: NOP 0;
END_FUNCTION
FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1
BEGIN
NETWORK
TITLE =
CALL FC 1 (
DB_Nr1 := DB 1,
DB_Nr2 := DB 2,
Start_DB_Nr1 := 0,// Vergleich ab Byte 0
Start_DB_Nr2 := 4,// Vergleich ab Byte 4
Laenge := 10,// 10 Bytes vergleichen
Vergleich_OK := M 0.0);// Wenn M 0.0 = 1 => keine Unterschiede
END_FUNCTION
Das sollte für einen einfachen Vergleich reichen.
Grüße
Gebs
Bookmarks