Balu_der_Bär
Level-2
- Beiträge
- 120
- Reaktionspunkte
- 47
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe eine Lösung gefunden um 2 Structs miteinander zu vergleichen. Es gab dabei mehrere Probleme vorallem mit Strings die ihre vorherigen Einträge nicht löschen wenn dieser mit einem Kürzerer String überschrieben wurde
Ich benutze eine S7 1513-1 PN
Es wird ein "nicht bausteinoptimierter" DB benötigt der 2 Arrays mit jeweils einem Array[0..300] of Byte enthält ( die 300 kann natürlich variieren)
ich hoffe es nützt euch
Balu
*edit Anmerkungen von Harald eingebaut
*edit Anmerkungen von Peter eingebaut
ich habe eine Lösung gefunden um 2 Structs miteinander zu vergleichen. Es gab dabei mehrere Probleme vorallem mit Strings die ihre vorherigen Einträge nicht löschen wenn dieser mit einem Kürzerer String überschrieben wurde
Ich benutze eine S7 1513-1 PN
Es wird ein "nicht bausteinoptimierter" DB benötigt der 2 Arrays mit jeweils einem Array[0..300] of Byte enthält ( die 300 kann natürlich variieren)
Code:
IN:
IN_1 : Variant
IN_2 : Variant
OUT :
Unterschied_erkannt : Bool
Temp:
i : int
LEN_1 : dint
LEN_2 : dint
RET_VAL_1 : int
RET_VAL_1 : int
Unterschied : bool
//Structs in Array of byte kopieren
#RET_VAL_1 := Serialize(SRC_VARIABLE := #IN_A, DEST_ARRAY=>"GLB_HW_Vergleichs_DB".A , POS:= #LEN_1);
#RET_VAL_2 := Serialize(SRC_VARIABLE := #IN_B, DEST_ARRAY=>"GLB_HW_Vergleichs_DB".B, POS:= #LEN_2);
#Unterschied := false;
// arrays bytweise vergleichen und Array anschließend auf 0 setzen !Wichtig!
IF #LEN_1 = #LEN_2 THEN
FOR #i := 0 TO #LEN_1 DO
IF "GLB_HW_Vergleichs_DB".A[#i] <> "GLB_HW_Vergleichs_DB".B[#i] THEN
#Unterschied := true;
END_IF;
"GLB_HW_Vergleichs_DB".A[#i] := 0;
"GLB_HW_Vergleichs_DB".B[#i] := 0;
If #Unterschied then
EXIT;
END_IF;
END_FOR;
ELSE
// wenn Längen unterschiedlich dann sind die Structs eh unterschiedlich
#Unterschied := true;
END_IF;
Unterschied_erkannt := Unterschied;
ich hoffe es nützt euch
Balu
*edit Anmerkungen von Harald eingebaut
*edit Anmerkungen von Peter eingebaut
Zuletzt bearbeitet: