-> Hier kostenlos registrieren
Hi Ihr,
so langsam bringt mich die Schrittkette zum verzweifeln. Folgendes SetUP liegt vor: Es sollen 5 Zuführbänder separat gesteuert werden. Deshalb war meine Vorstellung eine Hauptschrittkette in der verschiedene Modis realisiert werden und 3 unterschrittketten die die Bänder steuern sollen. Dies sollte alles in einem Baustein Programmiert werden. Somit habe ich 4 Case Anweisungen für die Schrittketten in einem Baustein. Die Krogs hierbei ist, dass die Hauptschrittkette wunderbar das tut was sie soll. Die Schrittkette zur Steuerung von Band 3,4 und 5 funktionier ebenfalls. Ausschließlich die Schrittkette für Band 1 und 2 wollen einfach nicht trotz erfüllter Transition. Von Case 0 auf 1 top, jedoch weiter will sie einfach nicht.
Screenshot sind beigefügt.
Hoffe ihr entdeckt den Fehler, bin mit meinem Latein am ende.
so langsam bringt mich die Schrittkette zum verzweifeln. Folgendes SetUP liegt vor: Es sollen 5 Zuführbänder separat gesteuert werden. Deshalb war meine Vorstellung eine Hauptschrittkette in der verschiedene Modis realisiert werden und 3 unterschrittketten die die Bänder steuern sollen. Dies sollte alles in einem Baustein Programmiert werden. Somit habe ich 4 Case Anweisungen für die Schrittketten in einem Baustein. Die Krogs hierbei ist, dass die Hauptschrittkette wunderbar das tut was sie soll. Die Schrittkette zur Steuerung von Band 3,4 und 5 funktionier ebenfalls. Ausschließlich die Schrittkette für Band 1 und 2 wollen einfach nicht trotz erfüllter Transition. Von Case 0 auf 1 top, jedoch weiter will sie einfach nicht.
Code:
REGION MainSequence
//Hauptschrittkette
CASE #mainStepchain OF
0:// initialschritt
IF #StationBasic.AutomaticOn & NOT #StationBasic.AutomaticOff THEN
#mainStepchain := 1;
END_IF;
#stepchainBelt1 := 0;
#stepchainBelt2 := 0;
#stepchainBelt3to5 := 0;
1: //Auswahl Hand-/Automatikverpacken
IF #StationBasic.AutomaticOn & #Basic.HandpackingOn THEN
#mainStepchain := 2;
ELSIF #DataSequence."Transport Bänder".Waagebereit & #DataSequence."Transport Bänder".FSSbereit & #DataSequence."Transport Bänder".SRSbereit & NOT #Basic.HandpackingOn THEN
#mainStepchain := 3;
END_IF;
2: //Auswahl Handverpacken
IF #TrigHandpacking.Q THEN
#stepchainBelt3to5 := 0;
ELSIF #StationBasic.AutomaticOff OR NOT #Basic.HandpackingOn THEN
#mainStepchain := 0;
END_IF;
3: //Auswahl Automatikverpacken
IF #TrigAutomaticpacking.Q THEN
#stepchainBelt1 := 0;
#stepchainBelt2 := 0;
#stepchainBelt3to5 := 0;
ELSIF #StationBasic.AutomaticOff OR #Basic.HandpackingOn THEN
#mainStepchain := 0;
END_IF;
END_CASE;
END_REGION
REGION Sequenz Band 1
// Schrittkette Band 1
CASE #stepchainBelt1 OF
0:
// Initialisirung
IF #StationBasic.AutomaticOff THEN
#DataSequence."Transport Bänder"."Band 1 vorwärts" := FALSE;
#DataSequence."Transport Bänder"."Band 1 rückwärts" := FALSE;
IF NOT #Basic.HandpackingOn THEN
#DataSequence."Transport Bänder".stoppPresse := TRUE;
END_IF;
ELSIF #StationBasic.AutomaticOn & NOT #Basic.HandpackingOn & #mainStepchain = 3 THEN
#DataSequence."Transport Bänder".stoppPresse := FALSE;
#DataSequence."Transport Bänder"."Start Ablauf" := TRUE;
#stepchainBelt1 := 1;
END_IF;
#DataSequence."Transport Bänder"."Sperre Ablauf" := FALSE;
#DataSequence."Transport Bänder"."Ende Ablauf" := FALSE;
1:
// start Ablauf
IF NOT #DataSequence."Transport Bänder".Waagebereit THEN
#stepchainBelt1 := 5;
ELSIF #DataSequence."Transport Bänder"."Brikett Aw. 1" OR #DataSequence."Transport Bänder"."Brikett Aw. 2" THEN
IF NOT (#"tempstückzahl vor Waage" >= 5) & NOT (#"tempstückzahl nach Waage" >= 5) THEN
#stepchainBelt1 := 6;
END_IF;
ELSIF NOT #StationBasic.AutomaticOn THEN
#DataSequence."Transport Bänder".stoppPresse := TRUE;
END_IF;
#DataSequence."Transport Bänder"."Start Ablauf" := FALSE;
#DataSequence."Transport Bänder"."Sperre Ablauf" := TRUE;
#DataSequence."Transport Bänder"."Ende Ablauf" := FALSE;
2:
// Prüfe Stau Band 1 behoben
IF NOT #DataSequence."Transport Bänder".Waagebereit THEN
#stepchainBelt1 := 5;
ELSIF NOT #BrikettStauBand1.Q THEN
#DataSequence."Transport Bänder".stoppPresse := FALSE;
#stepchainBelt1 := 6;
ELSIF #BrikettStauBand1.Q THEN
#stepchainBelt1 := 4;
ELSIF NOT #StationBasic.AutomaticOn THEN
#DataSequence."Transport Bänder".stoppPresse := TRUE;
END_IF;
#DataSequence."Transport Bänder"."Band 1 rückwärts" := FALSE;
3:
//Automatisch Anlauf nach Stopp
IF NOT #DataSequence."Transport Bänder".Waagebereit THEN
#stepchainBelt1 := 5;
ELSIF #LaufzeitBand1.Q THEN
#stepchainBelt1 := 6;
ELSIF NOT #StationBasic.AutomaticOn THEN
#DataSequence."Transport Bänder".stoppPresse := TRUE;
ELSE
#stepchainBelt1 := 1;
END_IF;
#DataSequence."Transport Bänder"."Ende Ablauf" := FALSE;
4:
// Brikett Stau
IF NOT #DataSequence."Transport Bänder".Waagebereit THEN
#stepchainBelt1 := 5;
ELSIF #StationBasic.ResetFault THEN
#DataSequence."Transport Bänder".stoppPresse := FALSE;
#stepchainBelt1 := 1;
ELSIF NOT #StationBasic.AutomaticOn THEN
#DataSequence."Transport Bänder".stoppPresse := TRUE;
END_IF;
#DataSequence."Transport Bänder"."Band 1 vorwärts" := FALSE;
#DataSequence."Transport Bänder"."Band 1 rückwärts" := FALSE;
5:
//Waage nicht bereit
IF #StationBasic.ResetFault OR #DataSequence."Transport Bänder".Waagebereit THEN
#stepchainBelt1 := 0;
END_IF;
#DataSequence."Transport Bänder".stoppPresse := TRUE;
#DataSequence."Transport Bänder"."Band 1 vorwärts" := FALSE;
#DataSequence."Transport Bänder"."Band 1 rückwärts" := FALSE;
#DataSequence."Transport Bänder"."Ende Ablauf" := TRUE;
6:
// Band 1 vorwärts
IF NOT #DataSequence."Transport Bänder".Waagebereit THEN
#stepchainBelt1 := 5;
ELSIF #BrikettStauBand1.Q THEN
#DataSequence."Transport Bänder".stoppPresse := TRUE;
#stepchainBelt1 := 7;
ELSIF NOT #LaufzeitBand1.Q OR ( #NFBvorWaage.Q & #DataSequence."Transport Bänder"."Brikett vor Waage") OR ((#"tempstückzahl vor Waage">=5) &#DataSequence."Transport Bänder"."Brikett vor Waage"&( #"tempstückzahl nach Waage">=5) ) THEN
#stepchainBelt1 := 9;
ELSIF NOT #StationBasic.AutomaticOn THEN
#DataSequence."Transport Bänder".stoppPresse := TRUE;
END_IF;
#DataSequence."Transport Bänder"."Band 1 rückwärts" := False;
#DataSequence."Transport Bänder"."Band 1 vorwärts" := TRUE;
7:
//Band 1 rückwäts
IF NOT #DataSequence."Transport Bänder".Waagebereit THEN
#stepchainBelt1 := 5;
ELSIF #LaufzeitBand1rückwärts.Q THEN
#stepchainBelt1 := 2;
ELSIF NOT #StationBasic.AutomaticOn THEN
#DataSequence."Transport Bänder".stoppPresse := TRUE;
END_IF;
#DataSequence."Transport Bänder"."Band 1 vorwärts" := FALSE;
#DataSequence."Transport Bänder"."Band 1 rückwärts" := TRUE;
9:
// Band 1 Aus
IF NOT #DataSequence."Transport Bänder".Waagebereit THEN
#stepchainBelt1 := 5;
ELSIF NOT #NFBvorWaage.Q & #DataSequence."Transport Bänder"."Brikett vor Waage"& NOT (#"tempstückzahl vor Waage">=5)& NOT (#"tempstückzahl nach Waage">=5) THEN
#stepchainBelt1 := 3;
ELSIF NOT #StationBasic.AutomaticOn THEN
#DataSequence."Transport Bänder".stoppPresse := TRUE;
END_IF;
#DataSequence."Transport Bänder"."Band 1 vorwärts" := FALSE;
#DataSequence."Transport Bänder"."Band 1 rückwärts" := FALSE;
#DataSequence."Transport Bänder"."Ende Ablauf" := TRUE;
END_CASE;
END_REGION
REGION Sequenz Band 2
// Schrittkett Band 2
CASE #stepchainBelt2 OF
0: // Initialisirung
IF #StationBasic.AutomaticOff THEN
#DataSequence."Transport Bänder"."Band 2 start" := FALSE;
ELSIF #StationBasic.AutomaticOn & NOT #Basic.HandpackingOn & #mainStepchain = 3 THEN
#DataSequence."Transport Bänder"."Start Ablauf" := True;
#stepchainBelt1 := 1;
END_IF;
#DataSequence."Transport Bänder"."Sperre Ablauf" := FALSE;
#DataSequence."Transport Bänder"."Ende Ablauf" := FALSE;
1: // start Ablauf
IF (#DataSequence."Transport Bänder"."Brikett nach Waage" & (#DataSequence."Transport Bänder"."Brikett Kontrolle IO 1" OR #DataSequence."Transport Bänder"."Brikett Kontrolle IO 2"))OR ((#"tempstückzahl nach Waage" >= 3)&(NOT #DataSequence."Transport Bänder"."Brikett Apos.1" OR NOT #DataSequence."Transport Bänder"."Brikett Apos.2" OR NOT #DataSequence."Transport Bänder"."Brikett Apos.3")) THEN
#DataSequence."Transport Bänder"."Sperre Ablauf" := TRUE;
#stepchainBelt2 := 6;
END_IF;
#DataSequence."Transport Bänder"."Start Ablauf" := False;
6: //Band 2 Ein
IF NOT #DataSequence."Transport Bänder"."Brikett Kontrolle IO 1" & NOT #DataSequence."Transport Bänder"."Brikett Kontrolle IO 2" OR NOT #LaufzeitBand2.Q THEN
#stepchainBelt2 := 7;
END_IF;
#DataSequence."Transport Bänder"."Band 2 start" := TRUE;
7: //Band 2 Aus
IF #DataSequence."Transport Bänder"."Brikett Kontrolle IO 1" OR #DataSequence."Transport Bänder"."Brikett Kontrolle IO 2" THEN
#stepchainBelt2 := 0;
END_IF;
#DataSequence."Transport Bänder"."Band 2 start" := FALSE;
#DataSequence."Transport Bänder"."Ende Ablauf" := TRUE;
#DataSequence."Transport Bänder"."Sperre Ablauf" := TRUE;
END_CASE;
END_REGION
REGION Sequenz Belt 3-5
// Schrittkette Band 3 bis 5
CASE #stepchainBelt3to5 OF
0: // Initialisirung
IF #StationBasic.AutomaticOn & (#mainStepchain = 3 OR #mainStepchain = 2) & NOT #StationBasic.AutomaticOff THEN
#DataSequence."Transport Bänder"."Start Ablauf" := TRUE;
#stepchainBelt3to5 := 1;
END_IF;
#DataSequence."Transport Bänder"."Sperre Ablauf" := FALSE;
#DataSequence."Transport Bänder"."Ende Ablauf" := FALSE;
#DataSequence."Transport Bänder"."Band 3 start" := FALSE;
#DataSequence."Transport Bänder"."Band 4 start" := FALSE;
#DataSequence."Transport Bänder"."Band 5 start" := FALSE;
1: // Band 3 ein
IF #DataSequence."Transport Bänder"."Brikettpaket ende Band 4" & NOT #DataSequence."Transport Bänder"."Brikettpaket ende Band 5" THEN
#stepchainBelt3to5 := 4;
ELSIF #DelayswitchOnbelt3.Q THEN
#DataSequence."Transport Bänder"."Band 3 start" := TRUE;
#stepchainBelt3to5 := 2;
END_IF;
#DataSequence."Transport Bänder"."Start Ablauf" := FALSE;
#DataSequence."Transport Bänder"."Sperre Ablauf" := TRUE;
2: // Band 4 ein
IF #DelayswitchOnbelt4.Q THEN
#DataSequence."Transport Bänder"."Band 4 start" := TRUE;
#stepchainBelt3to5 := 3;
END_IF;
3: // Band 3 Aus
IF NOT #DelayShutdownbelt3.Q THEN
#DataSequence."Transport Bänder"."Band 3 start" := FALSE;
#stepchainBelt3to5 := 4;
END_IF;
4: // Band 5 ein
IF #DataSequence."Transport Bänder"."Brikettpaket ende Band 4" & NOT #DataSequence."Transport Bänder"."Brikettpaket ende Band 5" THEN
#DataSequence."Transport Bänder"."Band 5 start" := TRUE;
#stepchainBelt3to5 := 5;
ELSIF #DataSequence."Transport Bänder"."Brikettpaket ende Band 5" THEN
#stepchainBelt3to5 := 5;
END_IF;
5: // Band 4 aus
IF NOT #DelayShutdownbelt4.Q THEN
#DataSequence."Transport Bänder"."Band 4 start" := FALSE;
#stepchainBelt3to5 := 6;
END_IF;
6: // Band 5 aus
IF #DataSequence."Transport Bänder"."Brikettpaket ende Band 5" THEN
#DataSequence."Transport Bänder"."Band 5 start" := FALSE;
#stepchainBelt3to5 := 0;
END_IF;
#DataSequence."Transport Bänder"."Ende Ablauf" := TRUE;
END_CASE;
END_REGION
REGION Timer
//Zeiten Band 1
#LaufzeitBand1(IN := #PFAuswurfschächte.Q,
PT := T#6s);
#BrikettStauBand1(IN := #DataSequence."Transport Bänder"."Brikett Aw. 1" OR #DataSequence."Transport Bänder"."Brikett Aw. 2",
PT := T#1.5s);
#LaufzeitBand1rückwärts(IN := #DataSequence."Transport Bänder"."Band 1 rückwärts",
PT := T#1s);
#BrikettStauFehler(IN := #DataSequence."Transport Bänder"."Brikett Aw. 1" OR #DataSequence."Transport Bänder"."Brikett Aw. 2",
PT := T#3s);
//Zeiten Waage
#NFBvorWaage(IN := #NFvorWaage.Q,
PT := T#1.7s);
// Zeiten Band 2
#LaufzeitBand2(IN := #PFnachWaage.Q,
PT := T#5s);
//Zeiten Band 3-5
#DelayswitchOnbelt3(IN := #DataSequence."Transport Bänder"."Brikettpaket anfang Band 3",
PT := T#0.5s);
#DelayShutdownbelt3(IN := #DelayswitchOnbelt3.Q,
PT := T#1.6s);
#DelayswitchOnbelt4(IN := #DataSequence."Transport Bänder"."Band 3 start",
PT := T#1.5s);
#DelayShutdownbelt4(IN := #DelayswitchOnbelt4.Q,
PT := T#1.5s);
END_REGION
REGION Counter
//Zähler vor Waage
IF #NFBvorWaage.Q THEN
#"tempstückzahl vor Waage" += 1;
ELSIF #NFNIOStoßer.Q THEN
#"tempstückzahl vor Waage" -= 1;
ELSIF #PFRücksetzeZählervonRoboter.Q THEN
#"tempstückzahl vor Waage" -= 3;
END_IF;
//Zähler nach Waage
IF "PFnachWaage".Q THEN
#"tempstückzahl nach Waage" += 1;
ELSIF #PFRücksetzeZählervonRoboter.Q THEN
#"tempstückzahl nach Waage" -= 3;
END_IF;
END_REGION
REGION Flaggs
//Flanken Auswertung
#PFAuswurfschächte(CLK := #DataSequence."Transport Bänder"."Brikett Aw. 1" OR #DataSequence."Transport Bänder"."Brikett Aw. 2");
#NFvorWaage(CLK := #DataSequence."Transport Bänder"."Brikett vor Waage");
#PFnachWaage(CLK := #DataSequence."Transport Bänder"."Brikett nach Waage");
#NFNIOStoßer(CLK := #DataSequence."Transport Bänder"."NIO Ausstoßer Waage");
#PFRücksetzeZählervonRoboter(CLK := #DataSequence."Transport Bänder".ResetCounterFromRobot);
#TrigHandpacking(CLK := #mainStepchain = 2);
#TrigAutomaticpacking(CLK := #mainStepchain = 3);
END_REGION
Screenshot sind beigefügt.
Hoffe ihr entdeckt den Fehler, bin mit meinem Latein am ende.
Anhänge
Zuletzt bearbeitet: