Continue vor If-Anweisungen

  • Hallo,


    hab nur ne kurze Frage die mir hoffentlich einfach beantwortet werden kann. :hilfe:


    Und zwar wie Verhält sich ein Continue vor einer If-Schleife wenn innerhalb dieser ein Wait befehl steht, kann das die Steuerung überschleifen wenn schon im vorlauf klar ist das die Bedingungen erfüllt sind?!


    Also zum Beispiel so:


    continue
    IF Bedingung 1==FALSE and Bedingung 2==FALSE THEN


    Wait sec 0.1


    ENDIF


    Kann es leider nicht testen da der Robby schon beim Kunden läuft.


    Danke

  • Schritt für Schritt zum Roboterprofi!
  • Befehle die einen Vorlaufstop verhindern
    continue
    In Anwendungsfällen, bei denen dieser Vorlaufstop verhindert werden soll, muß direkt vor
    der betreffenden Anweisung der Befehl CONTINUE programmiert werden. Die Steuerung
    setzt dann den Vorlauf fort. Die Wirkung ist aber nur auf die nächste Programmzeile beschränkt
    (auch Leerzeile!!).

  • Weniger kurzum:
    Wenn du diesen Code verwendest, wird der Vorlaufzeiger(!!!) die IF-Bedingung prüfen. Wenn diese nicht erfüllt ist, überspringt er den gesammten IF-Block Inhalt und macht ohne Vorlaufstopp nach dem ENDIF oder dem ELSE weiter. Das CONTINUE braucht es hier nur, wenn die IF-Bedingung selbst einen Vorlaufstopp auslösen würde.


    Code
    CONTINUE
    IF ((Bedingung1==FALSE) AND (Bedingung2==FALSE)) THEN
      WAIT SEC 0.1
    ENDIF


    Ich würde bei KRL Bedingungen immer in solche Klammern setzten, da ersparst du dir manches Buggfixing.


    gruss
    drudge

    Einmal editiert, zuletzt von Drudge ()

  • ich geh doch mal schwer davon aus das gundi sich nur auf die abweisende schleife bezieht.
    ein continue vor WAIT SEC 0.1 macht im programmablauf keinen sinn...

  • Doch ein CONTINUE vor einer WAIT SEC 0.1 macht durchaus einen Sinn. Nehmen wir mal an du willst ein Handshaking mit dem Vorlaufzeiger machen, da braucht es oft ein paar Millisekunden Pause zwischen den Zustandsänderungen. Oder bei MSGs absetzten kann man das auch ab und zu gebrauchen etc.

  • Code
    PTP P1 C_PTP
    
    
    WAIT SEC 0.1


    Vorlaufzeiger bleibt vor der Wait-Zeile stehen, bis der Roboter exakt auf dem Punkt P1 steht. Dann wartet der Vorlaufzeiger die 0.1 Sekunden und arbeitet die folgenden Codezeilen ab und führt die Bahnplanung für den Roboter weiter. Sobald die Bahnplanung genug weit erstellt ist, fährt der Roboter weiter.


    Code
    PTP P1 C_PTP
    CONTINUE
    WAIT SEC 0.1


    Vorlaufzeiger bleibt auf der Wait-Zeile für 0.1 Sekunden stehen, egal wo der Roboter steht. Dann arbeitet der Vorlaufzeiger die folgenden Codezeilen weiter ab. D.h. der Vorlaufzeiger kann die Überschleifbahn beim P1 berechnen und der Roboter wird den Punkt P1 überschleifen ohne Genauhalt. (Sofern der Vorlaufzeiger genug Vorsprung hatte und der Roboter ihn nicht in den 0.1 Sekunden eingeholt hat.)


    Kurz: Der Vorlaufzeiger wartet in jedem Fall die 0.1 Sekunden. Doch wenn ein CONTINUE auf der vorhergehenden Zeile steht, kann er das machen ohne erst auf den Roboter(Hauptlaufzeiger) zu warten.

    Einmal editiert, zuletzt von simeonw ()

  • Guten abend,


    ich muss soma recht geben ich bezieh das jetzt nur auf die If-Schleife, d.h. ein wait löst doch im normalfall ein vorlaufstopp für mindestens die zeit aus, aber wenn schon im Vorlauf klar ist, dass die Bedingungen nicht erfüllt ist und er zum Endif springen könnte, hat er dann trotzdem einen Vorlaufstop?!

  • Das hängt davon ab, was sich konkret hinter Bedingung1 und Bedingung2 verbirgt


    1. Fall
    Annahme: Bedingung1 und Bedingung2 sind lokale oder globale Variable:


    Code
    IF ((Bedingung1==FALSE) AND (Bedingung2==FALSE)) THEN
      WAIT SEC 0.1
    ENDIF


    Bedingung1 und Bedingung2 werden im Vorlauf ausgewertet, kein Vorlaufstop


    2. Fall
    Annahme: Bedingung1 und Bedingung2 sind Signalvereinbarungen auf digitale Eingänge, also z.B.
    SIGNAL Bedingung1 $IN[33]
    SIGNAL Bedingung2 $IN[34]


    Code
    IF ((Bedingung1==FALSE) AND (Bedingung2==FALSE)) THEN
      WAIT SEC 0.1
    ENDIF


    Der Lesezugriff auf Bedingung1 und Bedingung2 löst einen Vorlaufstop aus, die Bedingungen werden ausgewertet, wenn der Hauptlauf den Vorlauf erreicht hat.


    3. Fall
    wie 2. Fall, aber mit CONTINUE vor der IF-Zeile


    Code
    CONTINUE
    IF ((Bedingung1==FALSE) AND (Bedingung2==FALSE)) THEN
      WAIT SEC 0.1
    ENDIF


    Das CONTINUE hebt den Vorlaufstop auf, Bedingung1 und Bedingung2 werden im Vorlauf ausgewertet.


    Gruß Hinky


  • Guten abend,


    ich muss soma recht geben ich bezieh das jetzt nur auf die If-Schleife, d.h. ein wait löst doch im normalfall ein vorlaufstopp für mindestens die zeit aus, aber wenn schon im Vorlauf klar ist, dass die Bedingungen nicht erfüllt ist und er zum Endif springen könnte, hat er dann trotzdem einen Vorlaufstop?!


    hmm manchmal habe ich den Eindruck ihr lest die Antworten gar nicht ... oder einfach nur gerade den letzten Post.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden