-> Hier kostenlos registrieren
Wenn es ein Array of Byte als Input benötigt, macht es die Sache für mich noch einfacher. So funktioniert der Code wie gewünscht. Danke an Alle.
Code:
FUNCTION FC2 : VOID
VAR_INPUT
// Eingangsparameter
ToCheckArray: array [0..31] OF BYTE
Start_DB_Nummer: INT; //Beginn der Suche bei DB
END_VAR
VAR_OUTPUT
DB_Nummer: INT;
gefunden: BOOL;
END_VAR
VAR_IN_OUT
Start: Bool;
END_VAR
VAR_TEMP
I, J, K: INT;
EQ: BOOL;
DoExit: BOOL;
Temp_String1: STRING[32];
atTemp_String1 AT Temp_String1 : struct
Header : array [0..1] of byte ;
Daten : array [0..31] OF BYTE;
end_struct ;
Temp_String2: STRING[32];
atTemp_String2 AT Temp_String2 : struct
Header : array [0..1] of byte ;
Daten : array [0..31] OF BYTE;
end_struct ;
Quell_DB, Quell_DW: INT;
END_VAR
IF Start THEN
//Anfangswerte setzen
EQ := False;
DB_Nummer := 0;
gefunden := False;
atTemp_String1.Daten := ToCheckArray;
atTemp_String1.Header[0] := 32 ; atTemp_String1.Header[1] := 32 ;
DoExit := False;
FOR I := 0 TO 5 DO
Quell_DB := Start_DB_Nummer + J;
Quell_DW := (16 * I) + (1 * I); // 32byteArray + 2 byteBuffer = 34 Byte => 1 Array of Struckt
FOR K := 0 TO 31 DO
atTemp_String2.Daten[K] :=WORD_TO_BLOCK_DB(INT_TO_WORD(Quell_DB)).DB[Quell_DW + K];
END_FOR;
atTemp_String2.Header[0] := 32 ; atTemp_String2.Header[1] := 32 ;
//Die Teilstringvergleiche benötige ich nicht.
EQ := EQ_STRNG(S1 := Temp_String1,S2 := Temp_String2);
IF EQ THEN
gefunden := True;
Start := False;
DoExit := True;
EXIT;
END_IF;
END_FOR;
IF DoExit THEN
EXIT;
END_IF;
Start := False;
DoExit := False;
END_IF;
END_FUNCTION