Moin zusammen 
ich habe ein paar Probleme. Und zwar programmiere ich gerade ein Programm im TIA Portal in SCL für eine kleine Modellanlage, die wie folgt abläuft:
Ein Zylinder schiebt aus einem Magazin eine Dose auf ein Förderband. Am Ende des Förderbandes nimmt ein Greifer sie mit Saugnapf auf und übergibt sie an einen Sortierer, dieser lagert sie in ein Hochregal ein und fährt dann wieder zurück zur Übergabeposition. Und dann alles von vorne.
Das ganze soll als Automatikbetrieb ablaufen und dazu muss das Programm irgendwie bei jedem Durchgang die Lagerplätze abfragen.
Der Sortierer steht vorne in der Übergabeposition und hat die Dose vom Greifer erhalten. Nun soll das Programm die Lagerplätze von unten nach oben und von vorne nach hinten abfragen und wenn der Lagerplatz als leer (FALSE) angegeben ist, soll der Sortierer die Dose dorthin einlagern.
Also wie folgt:
Als erstes LP0.1 abfragen, wenn FALSE, dann einlagern und zurück zur Übergabeposition fahren, wenn TRUE, dann LP.02 abfragen.
Wenn LP0.2 FALSE, dann einlagern und zur Übergabeposition zurück fahren, wenn TRUE, dann LP0.3 abfragen.
Wie man sieht, orientiert sich der Sortierer über die Gabellichtschranken BG10 und BG15 und die Bohrungen im Metall (Siehe Bilder).
Um zum Beispiel den LP1.3 (Siehe Bilder) anzufahren und dort einzulagern, soll der Sortierer drei positive Flanken in horizontaler Richtung (BG10) zählen und dann stehen bleiben und zwei positive Flanken in vertikaler Richtung zählen und dann stehen bleiben. Dieser Platz soll dann als belegt (TRUE) gespeichert werden. Das Einlagern selber kriege ich ebenfalls programmiert. Das gezielte Anfahren der Lagerposition kriege ich nicht hin.
Der bisherige Programmcode ist ebenfalls angehängt. Ab Zeile 150 bin ich mir mit der ganzen Sache nicht mehr sicher. Die While-Schleife scheint endlos zu laufen, der BG10_Zähler beginnt nicht zu zählen und der Sortierer fährt somit gar nicht erst vorwärts. Die SPS geht sofort in Stopp. Da scheint einiges nicht zu funktionieren.
Ich habs bisher nur für die untere Reihe versucht, nicht wundern.
Hat vielleicht jemand ein paar Tipps oder Hinweise für mich, was ich falsch mache?
Dankeschön!
Hier sind nochmal einige Bilder und der gesamte Code mit meiner Fehlerbeschreibung:
https://docdro.id/N65j0ml

ich habe ein paar Probleme. Und zwar programmiere ich gerade ein Programm im TIA Portal in SCL für eine kleine Modellanlage, die wie folgt abläuft:
Ein Zylinder schiebt aus einem Magazin eine Dose auf ein Förderband. Am Ende des Förderbandes nimmt ein Greifer sie mit Saugnapf auf und übergibt sie an einen Sortierer, dieser lagert sie in ein Hochregal ein und fährt dann wieder zurück zur Übergabeposition. Und dann alles von vorne.
Das ganze soll als Automatikbetrieb ablaufen und dazu muss das Programm irgendwie bei jedem Durchgang die Lagerplätze abfragen.
Der Sortierer steht vorne in der Übergabeposition und hat die Dose vom Greifer erhalten. Nun soll das Programm die Lagerplätze von unten nach oben und von vorne nach hinten abfragen und wenn der Lagerplatz als leer (FALSE) angegeben ist, soll der Sortierer die Dose dorthin einlagern.
Also wie folgt:
Als erstes LP0.1 abfragen, wenn FALSE, dann einlagern und zurück zur Übergabeposition fahren, wenn TRUE, dann LP.02 abfragen.
Wenn LP0.2 FALSE, dann einlagern und zur Übergabeposition zurück fahren, wenn TRUE, dann LP0.3 abfragen.
Wie man sieht, orientiert sich der Sortierer über die Gabellichtschranken BG10 und BG15 und die Bohrungen im Metall (Siehe Bilder).
Um zum Beispiel den LP1.3 (Siehe Bilder) anzufahren und dort einzulagern, soll der Sortierer drei positive Flanken in horizontaler Richtung (BG10) zählen und dann stehen bleiben und zwei positive Flanken in vertikaler Richtung zählen und dann stehen bleiben. Dieser Platz soll dann als belegt (TRUE) gespeichert werden. Das Einlagern selber kriege ich ebenfalls programmiert. Das gezielte Anfahren der Lagerposition kriege ich nicht hin.
Der bisherige Programmcode ist ebenfalls angehängt. Ab Zeile 150 bin ich mir mit der ganzen Sache nicht mehr sicher. Die While-Schleife scheint endlos zu laufen, der BG10_Zähler beginnt nicht zu zählen und der Sortierer fährt somit gar nicht erst vorwärts. Die SPS geht sofort in Stopp. Da scheint einiges nicht zu funktionieren.
Ich habs bisher nur für die untere Reihe versucht, nicht wundern.
Hat vielleicht jemand ein paar Tipps oder Hinweise für mich, was ich falsch mache?
Dankeschön!
Hier sind nochmal einige Bilder und der gesamte Code mit meiner Fehlerbeschreibung:
https://docdro.id/N65j0ml
Code:
#Positive_Flanke_BG10 := NOT #bg10 AND #Stat_BG10;
#Stat_BG10 := #bg10; // Positive Flanke BG10 definiert
IF
#Positive_Flanke_BG10 = TRUE
THEN
#BG10_Zähler := #BG10_Zähler + 1;
#Positive_Flanke_BG10 := FALSE;
ELSE
#Positive_Flanke_BG10 := FALSE;
END_IF; // BG10_Zähler zählt bei jeder positiven Flanke hoch
#Positive_Flanke_BG10 := NOT #bg10 AND #Stat_BG10;
#Stat_BG10 := #bg10; // Positive Flanke BG15 definiert
IF
#Positive_Flanke_BG10 = TRUE
THEN
#BG10_Zähler := #BG10_Zähler + 1;
#Positive_Flanke_BG10 := FALSE;
ELSE
#Positive_Flanke_BG10 := FALSE;
END_IF; // BG15_Zähler zählt bei jeder positiven Flanke hoch
IF
#Schritt = 12 AND
#"LP0.1" = FALSE
THEN
#Einlagerung := 1;
#"LP0.1" := TRUE;
ELSIF
#Schritt = 12 AND
#"LP0.2" = FALSE
THEN
#Einlagerung := 2;
#"LP0.2" := TRUE;
ELSIF
#Schritt = 12 AND
#"LP0.3" = FALSE
THEN
#Einlagerung := 3;
#"LP0.3" := TRUE;
ELSIF
#Schritt = 12 AND
#"LP0.4" = FALSE
THEN
#Einlagerung := 4;
#"LP0.4" := TRUE;
ELSIF
#Schritt = 12 AND
#"LP0.5" = FALSE
THEN
#Einlagerung := 5;
#"LP0.5" := TRUE;
ELSIF
#Schritt = 12 AND
#"LP0.6" = FALSE
THEN
#Einlagerung := 6;
#"LP0.6" := TRUE;
END_IF; // Lagerplatz-Abfrage
CASE #Einlagerung OF
1:
WHILE #BG10_Zähler < 1 DO
#kr1 := TRUE;
END_WHILE;
#kr1 := FALSE;
2:
WHILE #BG10_Zähler < 2 DO
#kr1 := TRUE;
END_WHILE;
#kr1 := FALSE;
3:
WHILE #BG10_Zähler < 3 DO
#kr1 := TRUE;
END_WHILE;
#kr1 := FALSE;
4:
WHILE #BG10_Zähler < 4 DO
#kr1 := TRUE;
END_WHILE;
#kr1 := FALSE;
5:
WHILE #BG10_Zähler < 5 DO
#kr1 := TRUE;
END_WHILE;
#kr1 := FALSE;
6:
WHILE #BG10_Zähler < 6 DO
#kr1 := TRUE;
END_WHILE;
#kr1 := FALSE;
END_CASE; // Einlagervorgang