Rechnervorlauf/Hauptlauf

  • Hallo zusammen,


    ich habe eine Frage bzgl. folgendem Programmausschnitt:


    PTP ZuHome CONT Vel= 10 % ZuHome Tool[1]:Tool1 Base[0]


    REPEAT
    CONTINUE
    IF (IN_ABBRUCH==TRUE) THEN
    WAIT SEC 0 ; Vorlaufstopp
    VarAbbruch=TRUE
    GOTO Zyklus ; Abbruch - Zurück zum Zyklusanfang
    ENDIF
    CONTINUE
    WAIT SEC 0.01
    CONTINUE
    UNTIL ((IN1==TRUE) AND (IN2==FALSE))


    CONTINUE
    OUT1=TRUE


    Während der Roboter den Punkt ZuHome anfährt, werden die nachfolgenden Anweisungen durch den Rechnervorlauf interpretiert. Soweit so gut!
    Wenn ich das Programm starte, dann wird der Ausgang OUT1 gesetzt (Während der Roboter den Punkt ZuHome anfährt. Das sagt mir doch, dass
    IN_ABBRUCH=FALSE, IN1=TRUE und IN2=FALSE gewesen sein muss.


    Was passiert, wenn der Roboter immer noch den Punkt ZuHome anfährt (dort also der Hauptlauf ist), und sich nun der Eingäng IN_ABBRUCH auf TRUE ändert (OUT1 ist bereits im Vorlauf auf TRUE gesetzt worden)?
    Eigentlich müsste doch der Hauptlauf dem Vorlauf folgen, oder?


    DANKE!


    Gruß
    Stefan

    Einmal editiert, zuletzt von Schui74 ()

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Stefan,
    wass soll da schon passieren?
    Die Abfrage des Eingangs IN_Abbruch ist schon vorbei, also passiert da
    nichts, die Anweisungen wait sec 0, varabbruch=true ... werden NICHT
    ausgeführt.


    Der 'Hauptlauf' folgt dem Vorlauf, das stimmt schon. Du kannst Dir das so
    vorstellen, dass im Vorlauf die logischen Instruktionen schon mal durchgemacht
    werden, während im Hautplauf nur die Bewegungen ausgeführt werden.
    Ansonsten würden logischen Anweisungen ja doppelt ausgeführt,
    was würde denn da bei einer Aufsummierung ala
    wert=wert+1
    rauskommen?


    Gruss Hermann

  • Hallo!


    Danke! Eigentlich wusste ich das schon, aber:


    Hatte gestern nach einem sehr langen Arbeitstag ein Problem, das ich selbst nicht glauben konnte! (und Anlage eilt, wie immer)


    Es war so, dass der Vorlauf "drüber rast" (richtig) und der Hauptlauf zum Zyklusanfang sprang (wenn ich die Signale wie oben beschrieben gesetzt hatte). So sah es zumindest aus!


    Des Rätsels Lösung kam mir abends bei einem Bierchen zuhause :kopfkratz:


    Zur Ausprobe war nach dem obigen Programmausschnitt auch ein Goto Zyklus gestanden :wallbash:


    Das was ich beobachtet habe, war bereits der zweite Durchlauf!
    Bin auf diesem Wege meinem Kollegen sehr dankbar, der mir dieses Ei gelegt hat :waffen100:


    Manchmal ist es besser ne kurze Pause zu machen :)


    Also sorry, dass ich Euch hier "umstonst" belästigt hab.


    Gruß
    Stefan


    PS: Für einen kurzen Moment habe ich an mir gezweifelt.

  • Hallo,


    Funktion ist: Vorlauf wartet programmierte Zeit ohne Vorlaufstopp auszulösen. Kann sinnvoll sein, wenn man im Vorlauf ein bestimmtes Timing von Signalen braucht ohne den Überschleif auszubremsen.


    Gruss DiDi

  • DiDi,
    Das Continue bewirkt, das der Vorlauf nicht angehalten wird, wenn die Bedingung bereits erfuellt ist - das ist bei einem wait sec 0.1 sicher nicht der Fall. Werd´s morgen mal probieren.


    etwa so:

    Code
    ptp $pos_act
    continue
    wait sec 10
    PTP P1


    Dann sollte sich ja der Roboter bewegen, wahrend der Hauptlaufzeiger auf Wait sec 10 steht. Wuerde mich sehr wundern!


    Gruss Stefan

  • besseres Beispiel:


    $OUT[1]=FALSE
    PTP P1
    PTP P2 C_PTP
    CONTINUE
    $OUT[1]=TRUE
    CONTINUE
    WAIT SEC 0.2
    CONTINUE
    $OUT[1]=FALSE
    PTP P3


    oder ohne Überschleif
    $OUT[1]=FALSE
    PTP P1
    PTP P2
    Continue
    WAIT SEC 0.5
    $OUT[1]=TRUE
    PTP P3


    In beiden Fällen macht das CONTINUE vor dem WAIT SEC einen Unterschied.


    Gruss DiDi

  • Hallo,


    ein CONTINUE vor einem WAIT SEC 1 z.B. kann man sehr wohl brauchen!


    Z.B. eine Sprühdüse:


    CONTINUE
    $OUT[33]=TRUE ; Luftzufuhr
    CONTINUE
    WAIT SEC 1
    CONTINUE
    $OUT[34]=TRUE ; Materialzufuhr


    Damit wird im Vorlauf mit OUT[33] das Sprühen (Luft) eingeschaltet und mit OUT[34] die Materialzufuhr!
    Es wird quasi geblasen und eine Sekunde später die Stoffdüse geöffnet.
    Und das wichtigste: OHNE DASS EIN VORLAUFSTOPP ausgelöst wird (on the fly) ;)


    Gruß
    Stefan

  • DiDi
    Hab´s probiert und funktionieren tut´s -da musste ich mich wohl eines besseren belehren lassen.
    Aber: die Sache ist Geschwindigkeitsabhaengig. Das Wait sec wird im Vorlauf abgearbeitet, ist die Wartezeit entsprechend lang, holt der Hauptlaufzeiger der Vorlaufzeiger wieder ein, dann kannst du wieder nicht Ueberschleifen - bei kurzen Wartezeiten sicher kein Problem.


    Stefan
    Das mag schon sein. Der Zeitpunkt des Einschaltens der Klebeduese ist dann aber im Vorlauf - alles andere als genau.
    Genau dafuer gibt es eigentlich Bahnschaltfunktionen.


    Trigger when distance = 1 Delay = -2 do $out[33] = true
    Trigger when distance = 1 Delay = -1 do $out[34] = true


    einen Vorlaufstop gibt´s da auch nicht. Es fuehren bekanntlich viele Wege zum Ziel.


    Gruss ..Stefan

  • Hallo,
    aber Vorsicht, die Einheit der Zeitangabe beim Trigger sind Millisekunden!


    also eher
    Trigger when distance = 1 Delay = -2000 do $out[33] = true


    und der Triggerzeitpunkt muss noch hinter dem vorhergehenden Punkt liegen! Die
    Bewegung auf den Zielpunkt des Triggers muss im oo.g. Fall also mindestens
    zwei Sekunden dauern.


    Hermann

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