zwei DB´s direkt vergleichen

Grimsey

Level-2
Beiträge
543
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich würde gern überprüfen, ob zwei DB´s inhaltlich identisch sind ohne dabei jedoch jedes Wort oder Byte vergleichen zu müssen.

Gibt es da eventuell eine Möglichkeit? Ich halte das nach meinen bisherigen Recherchen für eher unwahrscheinlich, aber versuchen kann man es ja mal :)

Danke schonmal, falls jemand eine Idee hat.
 
Hallo

du gehst in deine Bausteinübersicht wo alle von dir erstellten Bausteine angezeigt sind.
wähle deinen Baustein den du vergleichen möchtest mit rechter maustaste an.
dann steht da bausteine vergleichen...

das wählst du aus und stellst dann anstatt online Pfad1 / Pfad 2 aus dann drückst du auswählen und wählst den Baustein mit dem der anderer verglichen werden soll.

Ist das getan klickst du auf vergleichen.

Das wars.

MfG Roos
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du das einmalig tun willst für 2 DBs in verschiedenen Projekten oder online offline dann nimm Roos seinen Vorschlag ansonsten
könntest du von beiden DBs die Checksumme bilden und diese vergleichen.
Ob das aber sinnvoll ist, kann bezweifelt werden. Vergleiche lieber doppelwort für Doppelwort. Soviel Arbeit ist das nicht :ROFLMAO:
 
Zuletzt bearbeitet:
:)

Danke für Eure Tipps, aber ich wollt die DB´s eigentlich im Programm vergleichen und nicht im Simatic-Manager. ;-) Das war mir schon klar.
 
Meine Lösung

Must halt mal probieren ob Du damit klarkommst
mfg Lesoc

:cool:

FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1

VAR_INPUT
DBNr1 : BLOCK_DB ;
DBNr2 : BLOCK_DB ;
Laenge : INT ;
END_VAR
VAR_OUTPUT
Gleich : BOOL ;
Ungleich : BOOL ;
END_VAR
VAR_TEMP
db1Wert : BYTE ;
db2Wert : BYTE ;
X : INT ;
END_VAR
BEGIN
NETWORK
TITLE =Alte Werte Löschen
SET ;
R #Gleich;
R #Ungleich;
NETWORK
TITLE =
L #Laenge;
Next: T #X;
AUF #DBNr1;
L DBB [AR1,P#0.0];
T #db1Wert;
AUF #DBNr2;
L DBB [AR1,P#0.0];
T #db2Wert;
L #db1Wert;
L #db2Wert;
<>I ;
SPBB Feh;
L P#1.0;
+AR1 ;
L #X;
LOOP Next;
SET ;
S #Gleich;
BEA ;
Feh: S #Ungleich;
END_FUNCTION_BLOCK
DATA_BLOCK DB 1
TITLE =
VERSION : 0.0
FB 1
BEGIN
DBNr1 := DB 1;
DBNr2 := DB 1;
Laenge := 0;
Gleich := FALSE;
Ungleich := FALSE;
END_DATA_BLOCK
DATA_BLOCK DB 100
TITLE =
VERSION : 0.1

STRUCT
DB_VAR : ARRAY [0 .. 20 ] OF //vorläufige Platzhaltervariable
INT ;
END_STRUCT ;
BEGIN
DB_VAR[0] := 0;
DB_VAR[1] := 0;
DB_VAR[2] := 0;
DB_VAR[3] := 0;
DB_VAR[4] := 0;
DB_VAR[5] := 0;
DB_VAR[6] := 0;
DB_VAR[7] := 0;
DB_VAR[8] := 0;
DB_VAR[9] := 0;
DB_VAR[10] := 0;
DB_VAR[11] := 0;
DB_VAR[12] := 0;
DB_VAR[13] := 0;
DB_VAR[14] := 0;
DB_VAR[15] := 0;
DB_VAR[16] := 0;
DB_VAR[17] := 0;
DB_VAR[18] := 0;
DB_VAR[19] := 0;
DB_VAR[20] := 0;
END_DATA_BLOCK
DATA_BLOCK DB 101
TITLE =
VERSION : 0.1

STRUCT
DB_VAR : ARRAY [0 .. 20 ] OF //vorläufige Platzhaltervariable
INT ;
END_STRUCT ;
BEGIN
DB_VAR[0] := 0;
DB_VAR[1] := 0;
DB_VAR[2] := 0;
DB_VAR[3] := 0;
DB_VAR[4] := 0;
DB_VAR[5] := 0;
DB_VAR[6] := 0;
DB_VAR[7] := 0;
DB_VAR[8] := 0;
DB_VAR[9] := 0;
DB_VAR[10] := 0;
DB_VAR[11] := 0;
DB_VAR[12] := 0;
DB_VAR[13] := 0;
DB_VAR[14] := 0;
DB_VAR[15] := 0;
DB_VAR[16] := 0;
DB_VAR[17] := 0;
DB_VAR[18] := 0;
DB_VAR[19] := 0;
DB_VAR[20] := 0;
END_DATA_BLOCK
ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1

VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =
CALL FB 1 , DB 1 (
DBNr1 := DB 100,
DBNr2 := DB 101,
Laenge := 20,
Gleich := A 0.0,
Ungleich := A 0.1);

END_ORGANIZATION_BLOCK
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1

L #Laenge;
Next: T #X;
AUF #DBNr1;
L DBB [AR1,P#0.0];
T #db1Wert;
AUF #DBNr2;
L DBB [AR1,P#0.0];
T #db2Wert;
L #db1Wert;
L #db2Wert;
<>I ;
SPBB Feh;
L P#1.0;
+AR1 ;
L #X;
LOOP Next;

Grimsey sucht eine Lösung für den Vergleich von zwei DBs, ohne jedes Wort oder Byte vergleichen zu müssen.

Siehe dazu auch hier:

http://www.sps-forum.de/showthread.php?t=15519

Gruß Kai
 
Zurück
Oben