-> Hier kostenlos registrieren
Hallo, momentan versuche ich ein kleines Programm zu schreiben. Aber irgendwie funktioniert das nicht. Vielleicht könnt ihr mir ja weiterhelfen bzw. seht woran es liegt.
Als INPUT bekomm ich folgende Daten:
Im FB hab ich selber diese Daten gespeichert.
Im Programm selber will ich das Array nach diesem String absuchen:
Sollte ein String nicht vorhanden sein, soll das Programm ihn eintragen:
Ist hier irgendetwas falsch? Kann ich es überhaupt so in SCL programmieren?
Hier nochmal der ganze Baustein:
Als INPUT bekomm ich folgende Daten:
Code:
suchobjekt:STRING[10];
Im FB hab ich selber diese Daten gespeichert.
Code:
daten : ARRAY[1..10] OF STRUCT
kennnummer : STRING[10];
zaehler_gasse1 : INT;
zaehler_gasse2 : INT;
zaehler_gasse3 : INT;
END_STRUCT;
Im Programm selber will ich das Array nach diesem String absuchen:
Code:
FOR i := 1 TO 10 BY 1 DO
IF (daten[i].kennnummer = suchobjekt) THEN
END_IF;
END_FOR;
Sollte ein String nicht vorhanden sein, soll das Programm ihn eintragen:
Code:
daten[i].kennnummer := suchobjekt;
Ist hier irgendetwas falsch? Kann ich es überhaupt so in SCL programmieren?
Hier nochmal der ganze Baustein:
Code:
FUNCTION_BLOCK FB100
VAR_TEMP
i:INT; // Zähler für For-Schleifen
END_VAR
VAR
daten : ARRAY[1..10] OF STRUCT
kennnummer : STRING[10];
zaehler_gasse1 : INT;
zaehler_gasse2 : INT;
zaehler_gasse3 : INT;
END_STRUCT;
END_VAR
//Eingänge
VAR_INPUT
suchobjekt:STRING[10];
gasse1_ok:BOOL; //1=OK=Gasse ist betriebsbereit und hat min. 1 leeren Platz
gasse2_ok:BOOL; //1=OK=Gasse ist betriebsbereit und hat min. 1 leeren Platz
gasse3_ok:BOOL; //1=OK=Gasse ist betriebsbereit und hat min. 1 leeren Platz
END_VAR
//Ausgänge
VAR_OUTPUT
zielgasse: INT;
END_VAR
//Programm
zielgasse:=0; //Rücksetzen der Zielgasse
//Nach Kennummer Suchen und eintragen, falls vorhanden
FOR i := 1 TO 10 BY 1 DO
IF (daten[i].kennnummer = suchobjekt) THEN
//Überprüfen welche Gasse am meisten Typen der gesuchten Kennnummer gelagert hat
IF (gasse1_ok AND
daten[i].zaehler_gasse1 < daten[i].zaehler_gasse2 AND
daten[i].zaehler_gasse1 < daten[i].zaehler_gasse3) THEN
zielgasse:=1;
daten[i].zaehler_gasse1:=daten[i].zaehler_gasse1 +1;
ELSIF (gasse2_ok AND daten[i].zaehler_gasse2 < daten[i].zaehler_gasse3) THEN
zielgasse:=2;
daten[i].zaehler_gasse2:=daten[i].zaehler_gasse2 +1;
ELSIF (gasse3_ok) THEN
zielgasse:=3;
daten[i].zaehler_gasse3:=daten[i].zaehler_gasse3 +1;
EXIT;
END_IF;
END_IF;
END_FOR;
//wenn kein passendes Kennnummer gefunden wurden
IF (zielgasse = 0) THEN
FOR i := 1 TO 10 BY 1 DO
IF daten[i].zaehler_gasse1 = 0 AND //Nach Kennnummer suchen, die in keiner der Gassen eingelagert ist
daten[i].zaehler_gasse2 = 0 AND
daten[i].zaehler_gasse3 = 0 THEN
daten[i].kennnummer := suchobjekt; //Wenn eine nicht mehr eingelagerte Kennummer gefunden, neue Nummer eintragen
IF gasse1_ok THEN //...und Wert für die entsprechende Gasse erhöhen
daten[i].zaehler_gasse1:=daten[i].zaehler_gasse1 +1; //Priorität ist hier Gasse 1>2>3
EXIT;
END_IF;
IF gasse2_ok THEN
daten[i].zaehler_gasse2:=daten[i].zaehler_gasse2 +1;
EXIT;
END_IF;
IF gasse3_ok THEN
daten[i].zaehler_gasse3:=daten[i].zaehler_gasse3 +1;
EXIT;
END_IF;
END_IF;
END_FOR;
END_IF;
END_FUNCTION_BLOCK