If Anweisung ohne Vorlaufstopp

  • Hallo zusammen!

    Ich habe mal eine Frage zum Vorlaufstopp vor einem IF Aufruf.

    Ich habe hier ein Programm eines fremden Programmierers und ich soll es ein wenig optimieren.

    In einem übergeordnetem Ablauf ist eine If Anweisung im NIO Fall

    An dieser bleibt der Roboter immer kurz stehen.

    Jetzt meine Frage: Wenn ich ein Continue vor die IF Anweisung ($IN36==true entspricht NIO) schreibe, prüft er es ja mit einem Vorlauf. Er würde aber das Unterprogramm "holen_schweissen..." erst noch komplett durchfahren, oder kann es passieren, dass er auch dies überspringt?

    Ich muss lediglich den kurzen Stopp (fett gedruckt) von "holen_schweissen..." zu "praegen_ablegen.." weg bekommen. Oder habe ich da einen Denkfehler??


    Für einen Tipp wäre ich sehr dankbar!


    DEF ablauf_links_5( )

    continue

    if (not $ext) then

    ;FOLD INI;%{PE}

    ;FOLD BASISTECH INI

    GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )

    INTERRUPT ON 3

    BAS (#INITMOV,0 )

    ;ENDFOLD (BASISTECH INI)

    ;FOLD SPOTTECH INI

    USERSPOT(#INIT)

    ;ENDFOLD (SPOTTECH INI)

    ;FOLD GRIPPERTECH INI

    USER_GRP(0,DUMMY,DUMMY,GDEFAULT)

    ;ENDFOLD (GRIPPERTECH INI)

    ;FOLD USER INI

    ;Make your modifications here


    ;ENDFOLD (USER INI)

    ;ENDFOLD (INI)

    endif


    ;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT

    $BWDSTART = FALSE

    PDAT_ACT=PDEFAULT

    FDAT_ACT=FHOME

    BAS (#PTP_PARAMS,100 )

    $H_POS=XHOME

    PTP XHOME

    ;ENDFOLD



    holen_schweissen_li_5 ()


    if $in[36]==true then

    goto fehler_links

    endif


    ;Signieren linkes Teil


    praegen_ablegen_li_5 ()



    if $in[36]==false then

    goto end_li

    endif


    fehler_links:

    ;Fehlschweissung links

    fehlteil_li_5 ()

    end_li:

    ;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT

    $BWDSTART = FALSE

    PDAT_ACT=PDEFAULT

    FDAT_ACT=FHOME

    BAS (#PTP_PARAMS,100 )

    $H_POS=XHOME

    PTP XHOME

    ;ENDFOLD


    END

  • Schritt für Schritt zum Roboterprofi!
  • Das wird vermutlich helfen ob es das wirklich ist oder in fehlteil_li_5() auch noch was ist kann man jetzt nicht erkennen...

    Ansonsten mit $Stopnoaproax das Programm in T1 / T2 durchfahren dann bleibt er dir da wo er nicht überschleifen kann stehen und dann kannst du die stelle ändern je nachdem was da los ist...

  • Er würde aber das Unterprogramm "holen_schweissen..." erst noch komplett durchfahren, oder kann es passieren, dass er auch dies überspringt?

    Das wird definitiv nicht übersprungen, warum sollte es das auch?

    Der Vorlauf ändert nichts an der prinzipiellen Reihenfolge der Befehle, die entsprechenden Zeilen werden nur ausgeführt bevor der vorhergehende Punkt angefahren wurde.

  • Danke für eure Antworten.

    Es war gestern einfach schon zu spät um vernünftig zu denken.

    Habe es heute einfach probieren können und es klappt. Gestern war es leider nicht möglich.

    Ich gebe dir recht Herman, das ist natürlich quatsch. 34 grad und 12 Stunden weichen das Hirn auf.


    Danke trotzdem

  • Hallo Erich!

    Ich denke das hängt davon ab, wann du die Bedingung auslesen musst.

    Bei mir ist die Bedingung schon viel früher gesetzt, wodurch es kein Problem gibt.

    Vielleicht wurde bei dir die Bedingung zu früh abgefragt?

  • Servus,


    Auf welchem Wert steht $ADVANCE?


    Wenn ein Bauteil n.i.O. ist, Prüfe ich das immer in der Greifposition (bei dir im "holen_schweissen_li_5 ()

    " und schreibe ich mir den Teilestatus in eine Variable.

    Vorteile:

    1. der Roboter steht sowieso in der Abholpos => kein Zeitverlust

    2. kannst sauber einen Handshake machen mit der SPS => Eingang muss nicht dauernd anstehen

    3. leichter zu Programmieren für den späteren Ablauf


    Gruss

    Martl

  • Wenn Sie an einer bestimmten Stelle der Bahn überprüfen müssen, ist es besser, dies über einen Trigger zu tun. Die Trigger-Funktion setzt die Flagge. Das Flag ist intrrrupt konfiguriert.

  • Hallo Erich!

    Ich denke das hängt davon ab, wann du die Bedingung auslesen musst.

    Bei mir ist die Bedingung schon viel früher gesetzt, wodurch es kein Problem gibt.

    Vielleicht wurde bei dir die Bedingung zu früh abgefragt?

    Nee, also das war so, dass der Robbi erstmal auf Freigabe von SPS warten sollte und auf die hat er dann nicht mehr gewartet. Die Freigabe dürfte zu dem Zeitpunkt nicht aktiv gewesen sein. Ist aber auch schwer nachzuvollziehen welche Signale zu dem Zeitpunkt wie geschalten waren (Fehler ist aber nach dem Löschen vom CONTINUE nicht mehr aufgetreten). Gibs da eigentlich ne Möglichkeit zur Auswertung von Signalen zu Zeitpunkt x?

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