Schrittketten in SCL

Zagatho

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen!

Wir haben heute in der Schule ein Transportband mit Stanze programmiert (FUP und GRAPH).
Wie ist es möglich, Schritte in SCL zu realisieren?
Kann ich das mit WHILE oder so anders lösen?

Hier unten mein Programm, das nicht ganz funktioniert (EIN- bzw. AUSSCHALTEN und Betriebsarten werden in anderen FB´s gemacht.

VAR_INPUT
// Eingangsparameter
Taster_Stanze_fahren: BOOL; //Taster wird als Toogle-Funktion realisiert. Jeder Tastendruck ändert die Richtung
//der Stanze.
Taster_Band_fahren: BOOL; //Taster wird als Toogle-Funktion realisiert. Jeder Tastendruck ändert die Richtung
//des Bandes.
Endschalter_Oben: BOOL; //Oberer Endschalter der Stanze. Realisiert durch einen Öffner.
Endschalter_Unten: BOOL; //Unterer Endschalter der Stanze. Realisiert durch einen Öffner.
Lichtschranke_1: BOOL; //Lichtschranke am Beginn des Bandes. Nur im Automatikbetrieb relevant.
//Die Unterbrechung der Lichtschranke startet den Automatikbetrieb.
Lichtschranke_2: BOOL; //Lichtstranke an der Stanze. Nur im Automatikbetrieb relevant.
//Die Unterbrechung der Lichtschranke startet den Stanzvorgang.
Anlagenzustand_2: BOOL; //Anlagenzustand=1 dann ist die Anlage ein.
AnlagenBetriebsart: BOOL; //AnlageBetriebsart=1 dann ist der Automatikbetrieb ein.
END_VAR

VAR_OUTPUT
// Ausgangsparameter
Stanze_fahren: BOOL; //Stanze fährt
Stanze_Richtung: BOOL; //bestimmt die Richtung der Stanze
Band_fahren: BOOL; //Band fährt
Band_Richtung: BOOL; //bestimmt die Richtung der Stanze
END_VAR
VAR
//statische Variablen
Zaehlfunktion_3: INT; //Zähler für die Richtungsdeklaration des Bandes
Zaehlfunktion_4: INT; //Zähler für die Richtungsdeklaration der Stanze
Schrittzaehler: INT; //Schrittzähler
M_Band_fahren: BOOL; //Merker
M_Band_Richtung: BOOL; //Merker
M_Stanze_fahren: BOOL; //Merker
M_Stanze_Richtung: BOOL; //Merker
END_VAR

// Anweisungsteil
//In diesem Baustein wird die Funktion einerseits im Automatikbetrieb, andererseits im Handbetrieb realisiert. Nur möglich, wenn die Anlage (Anlagenzustand=1)
//überhaupt ein ist.
//Zum Bewegungsablauf des Automatikbetriebs:
//Der erste Schritt realisiert den Initialisierungsschritt. (Referenz: Lichtschranke_1=1, Lichtschranke_2=1 und Endschalter_Oben=1)
//Schritt2: Wird die Lichtschranke_1 unterbrochen, startet die Automatisierung und das Band läuft (Band_fahren=1, Band_Richtung=0).
//Schritt3: Wird die Lichtschranke_2 unterbrochen, hält das band an (Band_fahren=0, Band_Richtung=0) und die Stanze fährt nach unten (Stanze_fahren=1, Stanze_Richtung=0)
//Schritt4: Die Stanze unterbricht den Endschalter_Unten und fährt nach oben (Stanze_fahren=1, Stanze_Richtung=1)
//Schritt5: Wird der Endschalter_Oben unterbrochen, beginnt das Band sich in die andere Richtung zu bewegen (Band_fahren=1, Band_Richtung=1)
//Schritt6: Wird die Lichtschranke_1 unterbrochen, bleibt das Band stehen und das Bauteil kann entnommen werden. Durch das Entnehmen geht die Automatisierung wieder in Schritt1

//Transitionsbedingungen:
//Start_Schritt1: Endschalter_Oben=1;Endschalter_Unten=0;Lichtschranke_1=1;Lichtschranke_2=1;Schrittzähler=0;
//Schritt1_Schritt2: Endschalter_Oben=1;Endschalter_Unten=0;Lichtschranke_1=0;Lichtschranke_2=1;Schrittzähler=1;
//Schritt2_Schritt3: Endschalter_Oben=1;Endschalter_Unten=0;Lichtschranke_1=1;Lichtschranke_2=0;Schrittzähler=2;
//Schritt3_Schritt4: Endschalter_Oben=0;Endschalter_Unten=1;Lichtschranke_1=1;Lichtschranke_2=0;Schrittzähler=3;
//Schritt4_Schritt5: Endschalter_Oben=1;Endschalter_Unten=0;Lichtschranke_1=1;Lichtschranke_2=0;Schrittzähler=4;
//Schritt5_Schritt6: Endschalter_Oben=1;Endschalter_Unten=0;Lichtschranke_1=0;Lichtschranke_2=1;Schrittzähler=5;
//Schritt6_Schritt1: Endschalter_Oben=1;Endschalter_Unten=0;Lichtschranke_1=1;Lichtschranke_2=1;Schrittzähler=6;
IF Anlagenzustand_2=0
THEN Zaehlfunktion_3:=0; Zaehlfunktion_4:=0;
END_IF;

IF Schrittzaehler=6
THEN Schrittzaehler:=0;
END_IF;

IF Anlagenzustand_2=1 AND
AnlagenBetriebsart=1
THEN

IF Lichtschranke_1=0 AND //Schritt1_Schritt2 Band fährt
Endschalter_Oben=1 AND
Endschalter_Unten=0 AND
Lichtschranke_2=1
THEN M_Band_fahren:=1;
M_Band_Richtung:=0;
M_Stanze_Richtung:=0;
M_Stanze_fahren:=0;
ELSIF Lichtschranke_1=1 AND //Schritt2_Schritt3 Stanzvorgang beginnt
Endschalter_Oben=0 AND
Endschalter_Unten=1 AND
Lichtschranke_2=0
THEN M_Band_fahren:=0;
M_Band_Richtung:=0;
M_Stanze_Richtung:=0;
M_Stanze_fahren:=1;
ELSIF Lichtschranke_1=1 AND //Schritt3_Schritt4 Stanze fährt nach oben
Endschalter_Oben=0 AND
Endschalter_Unten=1 AND
Lichtschranke_2=0
THEN M_Band_fahren:=0;
M_Band_Richtung:=0;
M_Stanze_Richtung:=1;
M_Stanze_fahren:=1;
ELSIF Lichtschranke_1=1 AND //Schritt4_Schritt5 Band fährt zurück
Endschalter_Oben=1 AND
Endschalter_Unten=0 AND
Lichtschranke_2=0
THEN M_Band_fahren:=1;
M_Band_Richtung:=1;
M_Stanze_Richtung:=0;
M_Stanze_fahren:=0;
ELSIF Lichtschranke_1=0 AND //Schritt5_Schritt6 Band bleibt stehen
Endschalter_Oben=1 AND
Endschalter_Unten=0 AND
Lichtschranke_2=1
THEN M_Band_fahren:=1;
M_Band_Richtung:=0;
M_Stanze_Richtung:=0;
M_Stanze_fahren:=0;
END_IF;

ELSE M_Band_fahren:=0;
M_Band_Richtung:=0;
M_Stanze_Richtung:=0;
M_Stanze_fahren:=0;
END_IF;
//Zuweisungen der Schrittzaehlernummern auf die deklarierten Merker (Zuweisung der Ausgänge erfolgt am Ende des Programms):
//1: M_Band_fahren:=1
//2: M_Stanze_fahren:=1
//3: M_Stanze_fahren:=1; M_Stanze_Richtung:=1
//4: M_Bahn_fahren:=1; M_Bahn_Richtung:=1
IF M_Band_fahren=1
THEN Band_fahren:=1;
ELSE Band_fahren:=0;
END_IF;

IF M_Band_Richtung=1
THEN Band_Richtung:=1;
ELSE Band_Richtung:=0;
END_IF;

IF M_Stanze_fahren=1
THEN Stanze_fahren:=1;
ELSE Stanze_fahren:=0;
END_IF;

IF M_Stanze_Richtung=1
THEN Stanze_Richtung:=1;
ELSE Stanze_Richtung:=0;
END_IF;

Vielen dank im Voraus
 
Zurück
Oben