Grundsatzfrage Genauhalt und Programmvorlauf

  • Hallo zusammen.


    Als Umsteiger von ABB nach Kuka habe ich in diesem Forum schon Antworten auf so einige Fragen gefunden (danke dafür). Jetzt stehe ich jetzt vor einem Rätsel, zu dem ich noch nichts gefunden habe; wahrscheinlich, weil es für Kuka- Erfahrene selbstverständlich ist.


    Ich habe eine grundsätzliche Frage zum Verhalten des Programms, speziell des Programmvorlaufes bei einem Genauhalt.

    Edit: es geht um KSS 8.5 und KSS 8.6
    Es geht um ein Programm nach folgendem Muster:


    ;FOLD SLIN p4 Vel=0.1 m/s CPDAT51 Tool[1] Base[1]
    intVariable=4

    ;FOLD SLIN p3 Vel=0.1 m/s CPDAT51 Tool[1] Base[1]
    intVariable=3

    ;FOLD SLIN p2 Vel=0.1 m/s CPDAT51 Tool[1] Base[1]
    intVariable=2

    ;FOLD SLIN p1 Vel=0.1 m/s CPDAT51 Tool[1] Base[1]
    intVariable=1


    Da alle Punkte als Genauhalt programmiert sind (ohne CONT) hätte ich erwartet, das die Änderung der Variable jeweils nach Abschluss der Bewegung erfolgt.
    Also: Bewegung nach P4, intVariable=4, Bewegung nach P3, intVariable=3, Bewegung nach P2, intVariable=2 usw., wie ich es z.B. von ABB gewohnt bin.

    Tatsächlich ist es so, dass die Variable direkt nach dem Start einen Wert "weiter unten" annimmt, also offensichtlich im Programmvorlauf geändert wird. Die Bewegung stoppt brav an jedem Punkt.


    Dazu meine Frage: Ist es normal, das ein Genauhalt keinen Vorlaufstopp erzeugt, oder gibt es dazu eine Konfigurationsmöglichkeit?


    TIA,

    Jochen

    Einmal editiert, zuletzt von JxRx ()

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Jochen,


    normalerweise ist der Ablauf bei einem Genauhalt genauso wie du Ihn beschrieben hast, die folgende Anweisung wird erst nach Erreichen des Punktes ausgeführt.


    Zur Fehleranalyse wäre also ein richtiger Programmausschnitt hilfreich.



    Um eine Anweisung Bewegungsabhängig zu machen gäbe es übrigens noch den sog. "TRIGGER", damit lässt sich deklarieren wann eine Anweisung in Bezug zu der folgenden Bewegung ausgeführt wird (Start, Ende, Zeit, Distanz).


    Bsp

    TRIGGER WHEN DISTANCE = 1 DELAY = 0 DO int=1

    Beim Erreichen des Bewegungspunktes (Distance = 1, 0 wäre bei Start der Bewegung, Delay gibt einen Offset in Sekunden an) setze die Variable "int" auf 1. Auch Funktionen oder Unterprogramme lassen sich so ausführen.



    ____________

    EDIT

    Bei Trigger When Distance ist der Delay zeitlich und bei Trigger on Path ist der Delay über die Distanz ;)

    Einmal editiert, zuletzt von Jonas315 ()

  • Hallo JxRx


    Einfache Antwort Ja ... und Ja :)


    Den Vorlauf kannst du über dei Variable $ADVANCE beeinflussen. Der steht Standardmäßig auf 3, in deinem Fall auf 0 setzen und er geht Zeile für Zeile durch, danach wieder auf 3.


    Du könntes auch TRIGGER ON PATH benutzen (SYN OUT) wobei du hier noch die Schaltpunkte beeinflussen könntest (+/- mm). Oder du nutzt Trigger TRIGGER WHEN DISTANCE, wobei hier 0 bedeutet, wird gesetzt sobald du den Punkt anfährst und 1 wenn der Punkt erreicht ist.


    Die "dreckige" Lösung wäre einfach vor der Variablenzuweisung ein WAIT SEC 0 oder WAIT FOR TRUE (löst einen Vorlaufstop aus)


    Gruß Kasperkopp


    EDIT: ... war wohl jemand schneller ...

    ... mach Dir kein Kopp ... , Du hast schon einen

  • Die meisten Programmierer plagen sich mit dem entgegengesetzten Problem.


    Die Tatsache, dass man keinen Überschleifparameter hat, hält die Steuerung nicht davon ab, schon mal die nächsten Bewegungen zu planen. Man muss stattdessen zusätzlich tatsächlich den Vorlauf anhalten.


    Beim ABB ist das undefinierter, dort weiß man eigentlich grundsätzlich nicht, wo der Vorlaufzeiger gerade ist (beim Kuka ist das besser berechenbar), wehalb man sich bei "fine"-Punkten dort auch an einem Vorlaufstopp erfreuen kann.

  • Hm, das sind ja zwei relativ unterschiedliche Antworten.



    normalerweise ist der Ablauf bei einem Genauhalt genauso wie du Ihn beschrieben hast, die folgende Anweisung wird erst nach Erreichen des Punktes ausgeführt.


    Einfache Antwort Ja ... und Ja :)

    Die Triggerbefehle sind mir bekannt. Damit wird im Hauptablauf für die Grundstellungsfahrt mitgezählt, wo sich der Roboter befindet. Übliches und bekanntes Vorgehen, denke ich.


    Da ich im Grundstellungsprogramm alles mit Genauhalt fahre hatte ich gedacht, ich könnte mir das Leben mit einfachen Zuweisungen leichter machen. Für den Fall, das das nicht geht werde ich wohl die semidreckige Lösung wählen und ein UP mit "wait for false" und Zuweisung bauen. (Seitdem ich hier im Forum gelernt habe wie man ein KUKA Program NOSTEPIN macht finde ich das auch nicht mehr ganz so gruselig).


    $Advance hatte ich auch schon mal gelesen, möchte ich aber nicht ohne Not zur Laufzeit dran rumfummeln. Im Hauptablauf ist Überschleifen natürlich erwünscht.


    Vor dem Posten eines Programmauschnitts war ich zurückgeschreckt, weil jede Menge dieser :cursing: <X :sleeping: Inlineformulare genutzt werden. Aber vllt. hilft es ja:


  • Fuer Homing-Fahrt Geschwindikgeit ist normalerwsiese kein Problem. Da alle Punkte als Genauhalt programmiert sind (ohne CONT), INT Variable konte auch als SIGNAL deklariert um VL Stop ausloesen. Oder $ADVANCE auf 0 setzen... Oder am liebsten Trigger einsetzen.

  • INT Variable konte auch als SIGNAL deklariert um VL Stop ausloesen.

    =O Das klingt nach einer Todsünde, für die ich von den Kollegen gesteinigt würde- und für die ich die Kollegen steinigen würde.

    Aber als schnelle Rettung ohne das Programm ändern zu müssen funktioniert das sogar, danke für den Tipp. :thumbup:


    Edit: Da es hier im Faden unterschiedliche Aussagen zum Verhalten des Roboters gibt: Ein Bewegungsbefehl erzeugt bei Kuka grundsätzlich keinen Vorlaufstopp.


    Ich baue mir für die Zuweisungen jetzt ein UP, in dem der Vorlaufstopp ausgelöst wird. Das bekomme ich mit vertretbarem Aufwand und Suchen/Ersetzen in die vorhandenen Programme. In Zukunft werde ich mehr auf Trigger setzen.


    Danke an alle :thumbup:

    Einmal editiert, zuletzt von JxRx ()

  • Ich baue mir für die Zuweisungen jetzt ein UP, in dem der Vorlaufstopp ausgelöst wird. Das bekomme ich mit vertretbarem Aufwand und Suchen/Ersetzen in die vorhandenen Programme. In Zukunft werde ich mehr auf Trigger setzen.

    Ist doch total einfach mit Suchen / Ersetzen auf Trigger umzustellen. Dazu musst allerdings einen externen Editor wie Notepad++ oder Ultraedit, der reguläre Ausdrücke beherrscht, verwenden.

    Da kann man dann in deinem Beispiel nach

    intvariable=([0-9]*)

    suchen und durch

    trigger when distance=0 delay=0 do intvariable=\1

    ersetzen.

    Lohnt sich wirklich, sich mal mit regulären Ausdrücken auseinanderzusetzen. Damit kann man oft geniale Sachen machen, die einem massig Zeit sparen.

    Hab' so zum Beispiel schon mal ein funktionierendes Comau-Programm komplett auf Kuka, und diverse Kuka-Programme auf ABB umgesetzt, ohne die Funktionsweise der Programme komplett verstanden zu haben.

  • Ist doch total einfach mit Suchen / Ersetzen auf Trigger umzustellen. Dazu musst allerdings einen externen Editor wie Notepad++ oder Ultraedit, der reguläre Ausdrücke beherrscht, verwenden.

    Die regulären Ausdrücke um meine Zuweisungen per NP++ in den UP-Aufruf um zu wandeln habe ich mir zeigen lassen, klappt prima. Den Triggerbefehl müsste ich ja noch von "nach der Bewegung" nach "vor der Bewegung" verschieben...


    Lohnt sich wirklich, sich mal mit regulären Ausdrücken auseinanderzusetzen. Damit kann man oft geniale Sachen machen, die einem massig Zeit sparen.

    Definitiv. Ist auf der Agenda wieder ein paar Plätze nach oben gerutscht,,,

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