Move Befehl an Programmende nicht ausgeführt

  • Hallo zusammen,


    könnt ihr mir mit folgendem Problem / Verständisproblem helfen:


    Ein Programm hat folgenden Ablauf (ScaraRoboter)

    moveJ(appro(PosX)

    moveJ PosX

    waitEndMove

    Teil ablegen

    nMoveID = moveJ(appro(PosX)

       waitEndMove

    wait(GetMoveId()>=nMoveID + 0.5)

    Danach ist das Programm beendet und falls Teil Abholen ansteht wird das ähnliche Programm zum abholen aufgerufen.

    Zuerst hatte ich nur waitEndMove: Bewegung wird komplett ausführt und Programm beendet -> Problem: Taktzeitverlust da letzte Bewegung nicht überschliffen wird.

    Ohne die beiden Wait-Befehle die letzte Bewegung nicht ausgeführt und Programm beendet -> erst wenn nächstes Programm gestartet wird wird die Bewegung ausgeführt

    (Ich verstehe nicht was den Roboter zum anhalten bringt)

    Mit wait(GetMoveID) bleibt der Roboter in dieser Zeile stehen. Ich würde erwarten nach 50% der Bewegung wird Programm beendet.


    Ziel:
    Roboter soll am Ende vom Programm auf eine bestimmte Vorposition fahren. Falls zu diesem Zeitpunkt schon ein neuer Auftrag ansteht überschleifen.

    Ich hofe ihr versteht mein Problem.

    Wäre es evtl. besser alles in ein Programm zu packen?

  • ANZEIGE
  • Da wirst du am Ende wohl nicht um eine Verzweigung, neuer Auftrag Ja/Nein, herumkommen um es einmal verschleifen und einmal genau anzufahren.

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Ich würde bei der Abfrage, ob ein neuer Auftrag ansteht (Hauptprogramm) einfach einen waitEndMove aufrufen solange nix ansteht.

    Damit würde der Roboter seinen Bewegung aus dem Unterprogramm zu Ende fahren oder gleich ins nächste Programm überschleifen.


    Du schreibst auch noch, dass der moveJ(appro(PosX) ohne die wait Anweisung nicht ausgeführt wird.

    Das könnte von einem zu großen Blending Wert kommen. Wenn der Blendingwert größer ist, als die zu fahrende Stecke von Teil ablegen zu moveJ(appro(PosX), kann es zu diesem Effekt kommen.

  • Hallo al3x,


    Wie mein Vorredner es schon beschrieben hatte, wird das blending wohl zu groß sein.

    Der Roboter benötigt nicht zwingend einen "waitendmove" Befehl, aber dieser wird den Weg bis zur Endposition abzüglich der Einstellung für das Blending fahren.

    Angenommen du hast von der aktuellen Position bis zur anfahrenden Position 100mm und hast im Blending 50mm stehen, dann wird dieser, solange kein "waitendmove" oder ein nächster Fahrbefehl ansteht auf den 50mm davor stehen bleiben.

    Falls dieser nicht dort verharren sollte, dann sollte anschließend eine Abfrage stattfinden ob ein neuer Auftrag ansteht, ansonsten "waitendmove" aufrufen.

    Wichtig hierbei wäre, dass das Verhältnis von Blendung zu MoveId passt. Falls das blending bei einem Weg von 100mm auf 51mm eingestellt ist, dann wird die MoveId nicht "+0,5" erreichen, da der Start für das blending theoretisch ab 49% erreicht ist. Bei der MovId ist die Zahl hinter dem Komma der zurückgelegte Weg in %.

    Oder du stellst das blending auf off, dann verschleift er diese approPosirion aber nicht.


    Ich hoffe das war verständlich und ich konnte dir damit weiterhelfen.


    Grüße Manu

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