zwei DB-S vergleichen

puehri

Level-2
Beiträge
44
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hab folgendes Problem. Ich habe in einem Projekt wiederkehrend zwei DBs die in ihrer Struktur irgendwo gleiche Datensätze enthalten
zb: DB300 ab Byte 50 -- 10 Byte
Vergleichs-DB: DB450 ab Byte 70 -- 10 Byte


ich hätte mir für die Suchfunktion einen schönen FC mit Pointern und allen drum herum gemalt.

Jetzt habe ich ein Problem. wie kann ich in der indirketen Adressierung zwei DBs aufschlagen und vergleichen. Oder muss ich den Inhalt eines DBs erst zwischenspeichern und dann vergleichen.
Es ist halt so das dieser Vergleichsbaustein in alle Richtungen universell sein muss.

Vielleicht hat irgendwer eine Idee wie das am chnellsten zu lösen ist.

Dankeschön im voraus

Andy
 
Hallo,

speichere doch die Werte temporär zwischen und vergleiche dann

Wie:

AUF #DB_1
L DBB [AR1,P#0.0]
T #VAL1

AUF #DB_2
L DBB [AR1,P#0.0]
T #VAL2

L #VAL1
L #VAL2
==I
SPBN M001
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man kann auch über die Instanz-DB's arbeiten.
Z.B. an eine FB/FC die beiden zu vergleichendnen Bausteine
als Block-DB Parameter angeben, Start-Adresse der jeweiligen
DB's und die zu vergleichende Länge sichern.
Wichtig ist nur, zuvor den Global und den Instanz-DB zu sichern und am Ende des FB/FC wiederherzustellen

Code:
//sichern des aufgeschlagenen DB's
L DBNO
T tSAV_DB
L DINO
T tSAV_DI

AUF DB[#BLOCK_DB1]
AUF DI[#BLOCK_DB2]

L DBB[#START_DB1]
L DIB[#START_DB2]
==I

...//weitere Anweisungen zum Vergleichen Schleife o.ä.


//wiederherstellen der vor Aufruf aufgeschlagenen DB's
AUF DB[tSAV_DB]
AUF DI[tSAV_DI]

Funktioniert ohne Zwischenpuffern !
 
Schleife für Vergleich DB-Bausteine

Hallo puehri,

hier ein kleines AWL-Programm das du dir für deine Zwecke anpassen kannst.



Code:
// Schleifen Voreinstellung

      AUF   DB     1                    // Erster DB zum vergleichen
      AUF   DI     2                    // Zeiter DB zum vergleichen als Instanz geöffnet

      L     L#0                         // Schleifen anfangswert laden
      T     #DIT_Schleifenwert          // Schleifenanfangswert laden

      L     L#1234                      // Letzte Adresse zum bearbeiten
      T     #DIT_Schleifenende          // Schleifenende speichern



// Schleifenausführung

RS50: SET                               // VKE-1 laden
      L     DBB [#DIT_Schleifenwert]    // DB-Bytewert laden
      L     DIB [#DIT_Schleifenwert]    // DB-Bytewert laden
      ==D                               // Wenn Werte gleich, dann
      SPB   RS60                        // Überspringe Aktion

// --- Aktion wenn Wert ungleich ---




// --- Ende ---



// Kontrolle auf Schleifenende

RS60: SET                               // VKE-1 laden
      L     #DIT_Schleifenwert          // Schleifenanfangswert laden
      L     L#32                        // Wert für Adressanpassung laden
      +D                                // Adresse anpassen
      T     #DIT_Schleifenwert          // Schleifenanfangswert speichern
      SRD   3                           // Adresse für Schleifenende Kontrolle anpassen
      L     #DIT_Schleifenende          // Schleifenende laden
      <D                                // Wenn noch nicht alle Werte bearbeitet, dann
      SPB   RS50                        // Sprung für erneuten Schleifendurchlauf
Wenn du noch fragen haben solltest, melde dich einfach.
 
@matthias

wenn die zu vergleichenden DB's allerdings nicht fest im FB
programmiert werden, kannst du den Baustein immer wieder
verwenden. Allerdings nicht vergessen Instanz- und Global DB sichern
und wiederherstellen, sonst kann man den Baustein nicht in Alarm oder Weck-OB's verwenden ;)

cu, nairolf
 
Zurück
Oben