2 Arrays aus 2 DBs vergleichen

Günni1977

Level-1
Beiträge
232
Reaktionspunkte
25
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte folgendes realisieren. Ich habe 2 DBs (z.B. DB1, DB2) mit jeweils einigen Arrays(Byte) drin. Nun will ich einen Baustein schreiben, der ein Array mit Länge X aus DB1 mit einem Array mit Länge X aus DB2 vergleicht und Gleichheit oder Ungleichheit rückmeldet. Wahrscheinlich geht das über Pointer, aber das habe ich noch nicht gemacht. Ich will halt nur einen allgemeinen Baustein für solch einen Array-Vergleich haben.

Danke schonmal
 
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
 
Zurück
Oben