-> Hier kostenlos registrieren
Hallo;
Ich habe eine Schrittkette die soweit ja funktioniert
Nun würde ich gerne einen Rücksprung von CASE 14 auf CASE 9 machen falls die Messung nicht i.O.
Erst beim 2 oder 3x nicht i.O. soll die Fehlermeldung kommen.
Ablauf --> Teileeinschub vor --> Messen --> i.o next Step; niO --> Teileeinschub nochmals vor --> iO next step; immer noch nicht iO --Fehlermeldung
Wie könnte ich dies anstellen?
Mit FOR-Schleife etwa oder lieber REPEAT?
FOR #Laufvariable :=??? TO ???? BY ???? DO ????
Ich habe eine Schrittkette die soweit ja funktioniert
Code:
FUNCTION_BLOCK FB32
TITLE='Ablauf Einschub'
VAR
bTeilEinschubGesehen:BOOL;
END_VAR
// Überwachung Teileeinschub
IF NOT oLinearschiene_eFrei THEN //UN E7.5 Linearschiene Übergang Rundschalttisch frei
bTeilEinschubGesehen := true; //Bedingung Einschub gesehen
END_IF;
// Schrittkette
CASE BYTE_TO_INT(a1c_step) OF
1: // Warten auf Start
IF (a1c_sync = 0) THEN
sm_wsb := false;
END_IF;
//oVereinzelung2(bewegung := 1); //Teilezuführung neues Teil auf
9: //FC32 Einschubachse vor
oEinschubachse(bewegung := 1);
10: // Klaus "Warten bis Endlage wirklich erreicht"
sf_wait(wait_time := T#1000ms);
11: // Gegenprüfung Sensor Spalt Linearschiene Rundschalttisch
IF bTeilEinschubGesehen = false THEN
IF a2m_sync <> 0 THEN // Wenn Bohren aktiv sollte kein Fehler gemeldet werden um Spindel zu schützen
;
ELSE
sf_fehler(Fehlernummer := 1323, Fehlerart := sk_Fehler, Diagnosenummer := BYTE_TO_INT(a1c_step));
END_IF;
sc_nextstep := a1c_step;
END_IF;
12:
xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 1 + 6) MOD 6].bVorhanden := true;
xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 1 + 6) MOD 6].bGebohrt := false;
xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 1 + 6) MOD 6].bAbgeblasen := false;
xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 1 + 6) MOD 6].bGemessen := false;
xa0_run.aoTeile[(xa0_run.iAktuelleStellung - 1 + 6) MOD 6].bBewertungGO := false;
13: // TWE@20160128 - Versuch von Nils Teilmitnehmer während Bewegung Einschubachse nach oben zu fahren.
// oEinschub_aGS := true;
// oEinschub_aAS := false;
// sf_wait(wait_time := DINT_TO_TIME(XXD_ALLG_DATEN.iVerzoegerungTeilemitneh));
// TWE@20160330 - Neuer Versuch von Nils mit Ventil "Mittelstellung entlüftet" für Einschubachse
oEinschub_aGS := false; //A11.4 Einschubachse NICHT Grundstellung
oEinschub_aAS := false; //A11.5 Einschubachse NICHT Arbeitsstellung
sf_wait(wait_time := T#1000ms);
14: //Teilemessung beim Einschub
IF NOT oTeileeinschub_eGO THEN
IF a2m_sync = 0 THEN // Wenn Bohren aktiv sollte kein Fehler gemeldet werden um Spindel zu schützen
sf_fehler(Fehlernummer := 1328, Fehlerart := sk_Fehler, Diagnosenummer := BYTE_TO_INT(a1c_step)); //Messung Teil im Teileeinschub außerhalb der Toleranz
END_IF;
sc_nextstep := a1c_step;
END_IF;
//Vereinzelung 1 schließen
oVereinzelung1(bewegung := 0);
15: //FC39 Teilemitnehmer auf
oTeilemitnehmer(bewegung := 0);
sf_wait(wait_time := T#1000ms);
//Vereinzelung 2 öffnen für neues Teil Einschub
oVereinzelung2(bewegung := 1);
16: //FC32 Einschubachse zurück
oEinschubachse(bewegung := 0);
END_CASE;
END_FUNCTION_BLOCK
Nun würde ich gerne einen Rücksprung von CASE 14 auf CASE 9 machen falls die Messung nicht i.O.
Erst beim 2 oder 3x nicht i.O. soll die Fehlermeldung kommen.
Ablauf --> Teileeinschub vor --> Messen --> i.o next Step; niO --> Teileeinschub nochmals vor --> iO next step; immer noch nicht iO --Fehlermeldung
Wie könnte ich dies anstellen?
Mit FOR-Schleife etwa oder lieber REPEAT?
FOR #Laufvariable :=??? TO ???? BY ???? DO ????