FUNCTION FC249 : INT
Title = 'Artikel'
//
// Zuordnung der Artikelnummer an Hand eines Namens aus DB suchen
// die Daten der erste Fundstelle werden ausgegeben
//
Version : '1.0'
author : ralle
name : Artikel
family : SYSTEM
VAR_INPUT
// Eingangsparameter
Artikelname: STRING[30]; //gesuchter Artikelname
Start_DB_Nummer: INT; //Beginn der Suche bei DB
Anzahl_DB: INT; //Anzahl der zu durchsuchenden DB
END_VAR
VAR_OUTPUT // Ausgangsparameter
Artikelnummer: INT; //Artiklenummer gesamt
DB_Nummer: INT; //DB-Nummer, in dem der Artikel zu finden ist
Artikelnummer_im_DB: INT; //Artikelnummer im DB
gefunden: BOOL; //Artikel wurde gefunden
END_VAR
VAR_IN_OUT // Durchgangsparameter
Start: Bool;
END_VAR
VAR_TEMP
// temporäre Variablen
I, J, K: INT;
EQ: BOOL;
DoExit: BOOL;
Temp_String1: STRING[30];
atTemp_String1 AT Temp_String1: ARRAY[0..31] OF BYTE;
Temp_String2: STRING[30];
atTemp_String2 AT Temp_String2: ARRAY[0..31] OF BYTE;
Quell_DB, Quell_DW: INT;
END_VAR
// Anweisungsteil
IF Start THEN
//Anfangswerte setzen
FC249 := 0;
EQ := False;
Artikelnummer := 0;
DB_Nummer := 0;
Artikelnummer_im_DB := 0;
gefunden := False;
Temp_String1 := Artikelname;
Temp_String2 := Artikelname;
DoExit := False;
//Über alle Artikel-DB
FOR J := 0 TO Anzahl_DB - 1 DO
//je DB 50 Artikel
FOR I := 0 TO 49 DO
Quell_DB := Start_DB_Nummer + J;
Quell_DW := (300 * I) + 366;
//Umkopieren des Artikelnamens aus dem Artikel-DB in den Temp_String2; byteweise mit Kopf
FOR K := 0 TO 31 DO
atTemp_String2[K] := WORD_TO_BLOCK_DB(INT_TO_WORD(Quell_DB)).DB[Quell_DW + K];
// DB10.Temp_String2[K] := atTemp_String2[K]; //nur zum Beobachten im DB10, sonst abschalten!!!!!
END_FOR;
//Länge des gefundenen Strings mit Länge des Suchstrings gleichsetzen,
//dadurch werden auch Teilstrings gefunden, das erste Vorkommen wird dann ausgegeben
atTemp_String2[1] := atTemp_String1[1];
//Stringvergleich
EQ := EQ_STRNG(S1 := Temp_String1
,S2 := Temp_String2
);
//wenn Stringvergleich ok, dann Werte schreiben und Ende der gesamten Funktion über Exit
IF EQ THEN
Artikelnummer_im_DB := I + 1;
DB_Nummer := Quell_DB;
Artikelnummer := (J * 50) + Artikelnummer_im_DB;
gefunden := True;
FC249 := Artikelnummer;
Start := False;
DoExit := True;
EXIT;
END_IF;
END_FOR;
IF DoExit THEN
EXIT;
END_IF;
END_FOR;
Start := False;
DoExit := False;
END_IF;
END_FUNCTION