Stäubli CS9 Steuerung

  • Hallo Stäubli Spezialisten,


    wie kann ich einen Ausgang bei erreichen eines Punktes für die Dauer von z.B. 500ms auf True schalten aber ohne das der Roboter stoppt sondern die folgenden Bewegungen weiter ausführt.

    Bei erreichen geht ja mit "wait(getMoveId()>=nMoveID+1.0)".

    Wenn ich dann den Ausgang setze und ein Delay(0.5) einfüge bleibt aber auch der Roboter stehen.

    Kenne es von KUKA mit $PULSE finde aber nichts vergleichbares.

  • ANZEIGE
  • Hallo,


    das mit dem Dealy sollte eigentlich funktionieren.. Ich vermute Du schreibst die aktuelle MoveID in die nMoveID und wartest dann, das der Roboter eine die übernächste Bewegung ausführt.. hat der denn genug Moves die er noch ausführen kann, bevor er im Vorlauf an der Stelle ist? Ich würde mal prüfen, welchen Wet die nMoveID hat wenn er stehen bleibt und welchen Wert Du zu dem zeitpunkt über getMoveID bekommst.. Evtl. hast Du dann schon Deine Antwort


    VG und gutes Gelingen!

  • Hallo Robotnix,


    wir erstellen hierfür einen eigenen Task, der dann an entsprechender Stelle im Programmablauf ausgelöst wird. Dieser führt ein Unterprogramm aus, in dem das Signal gesetzt und nach Zeit X wieder zurückgesetzt wird. Durch den eigenen Task hast du dann keinen Vorlaufstopp, da dieser nebenher läuft.


    Schau in der Hilfe mal nach dem Befehl "taskCreate".

  • Hallo.


    Mal eine kurze Rückmeldung:

    Hallo,


    das mit dem Dealy sollte eigentlich funktionieren.. Ich vermute Du schreibst die aktuelle MoveID in die nMoveID und wartest dann, das der Roboter eine die übernächste Bewegung ausführt.. hat der denn genug Moves die er noch ausführen kann, bevor er im Vorlauf an der Stelle ist? Ich würde mal prüfen, welchen Wet die nMoveID hat wenn er stehen bleibt und welchen Wert Du zu dem zeitpunkt über getMoveID bekommst.. Evtl. hast Du dann schon Deine Antwort


    VG und gutes Gelingen!

    Das funktioniert nicht. Der Task bleibt zwar "Running" wird aber für die gewählt Zeit nicht ausgeführt was einen Stopp des Roboters bedeutet.



    Hallo Robotnix,


    wir erstellen hierfür einen eigenen Task, der dann an entsprechender Stelle im Programmablauf ausgelöst wird. Dieser führt ein Unterprogramm aus, in dem das Signal gesetzt und nach Zeit X wieder zurückgesetzt wird. Durch den eigenen Task hast du dann keinen Vorlaufstopp, da dieser nebenher läuft.


    Schau in der Hilfe mal nach dem Befehl "taskCreate".

    Hier mal etwas Code wie es in der Simulation läuft:


    Der Task (tskImpuls):


    begin

    // Impulsausgabe


    switch x_sOutput

    case "S1"

    bImpulsOutS1=true

    delay(x_nTime)

    bImpulsOutS1=false

    break


    case "S2"

    bImpulsOutS1=true

    delay(x_nTime)

    bImpulsOutS1=false

    break


    endSwitch

    end


    Und der Aufruf hierzu:

    wait(getMoveId()>=nMoveID+0.8)

    taskCreate"tskImpulsS1",100,tskImpuls("S1",2)

    und bzw. oder

    wait(getMoveId()>=nMoveID+0.2)

    taskCreate"tskImpulsS2",100,tskImpuls("S2",0.5)

  • Hallo,


    AlexJobo und Robotnix haben recht. Beide Varianten können Funktionieren. Bei der Antwort von AlexJobo muss darauf geachtet werden, dass genügend Bewegungen im Motion Stack zum ausführen bereitstehen. Diese können dann in der Zeit in der Task wartet, ausgeführt werden. Der Rotorbewegung ist grundsätzlich egal ob ein Task pausiert ist oder nicht solange noch ein Task existiert (das muss nicht mal der sein der die Bewegung verlangt hat).

    Aber klar ist die Variante von Robotnix flexibler und vermutlich auch nachvollziehbarer.


    Gruss

    Psyril

    Der Unterschied zwischen Theorie und Praxis ist in der Praxis weit grösser als in der Theorie.

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