Roboterbewegung zu langsam!(Problem gelöst)

  • Hey Leute.


    ich habe mir ein Programm geschrieben in dem der Roboter in X -0.5 fährt, solange das Signal $in47 ansteht! Wie man sieht ´überschleife ich den Punkt einfach, damit ich kein Stop bekomme!


    Hier meine Frage: Das überschleifen Funktioniert eigentlich ganz gut soweit, das Problem ist nur das er nicht mehr schnell genug fährt. Es könnte denke ich an dem Zustellwert liegen?!.


    DEF Zustellwert


    PDAT_ACT=PPDAT3
    FDAT_ACT=FP3
    BAS(#PTP_PARAMS,100)
    PTP XP3 C_PTP
    ;ENDFOLD
    LOOP
    $OV_PRO=100
    $ADVANCE=1
    $APO.CDIS=1
    ;##########################
    IF $IN[47] Then
    LOOP
    PTP_REL{x -0.5} C_PTP
    CONTINUE
    IF NOT $IN[47] then
    EXIT
    ENDIF
    ENDLOOP
    ENDIF
    ;#########################


    Oder was meint ihr? Bekomme ich das i-wie hin das der Roboter schneller noch fährt? Durch ein fehlenden Befehl oder so?


    Danke schonmal=)

    Solange mein Chef so tut als würde er mich richtig bezahlen solange tue ich so als würde ich Arbeiten

    Einmal editiert, zuletzt von **ROB__KUKA** ()

  • Schritt für Schritt zum Roboterprofi!
  • Vermutlich liegt es an der Beschleunigung und dem Bremsen pro PTP Bewegung. Ist jetzt so'n Vermutung. Was ist, wenn du das ganze LIN fährst. Das habe ich mal gemacht.
    Siehe: http://www.roboterforum.de/rob…13.0.html;msg3688#msg3688


    Ich würde deine Problematik eher per Interrupt Routine lösen. Das folgende Beispiel führt eine LIN-Bewegung 1000mm in negative X-Richtung aus. Sollte während dieser bewegung $IN[47] abfallen, wird die Bewegung abgebrochen und das Programm springt zurueck ins Hauptprogramm.


    HAUPTPROGRAMM:

    Code
    INI
    INTERRUPT DECL 10 WHEN $IN[47]==FALSE DO STOP_BEWEGUNG() ;Interrupt deklarieren
    PTP HOME
    ;blablaba usw.
    PTP Startposition 
    Zustellwert() ;Sub aufrufen
    INTERRUPT OFF 10 ;Interrupt ausschalten, falls nie ausgelöst
    $ADVANCE=DEF_ADVANCE ;Vorlaufzeiger auf Standardwert
    ;Mach weiter...
    END


    Zustellwert:

    Code
    DEF ZUSTELLWERT()
    WAIT FOR $IN[47] ;Bedingung zum Ausloesen des Interrupts darf bei Einschalten des Interrupts nicht geegeben sein!
    INTERRUPT ON 10 ;Interrupt einschalten
    $ADVANCE=0 ;Vorlaufzeige stoppen
    BAS(#VEL_CP,0.5) 
    BAS(#ACC_CP,100)
    $TOOL=TOOL_DATA[1]
    $BASE=BASE_DATA[1]
    LIN_REL {x -1000} ;oder wie auch immer
    END


    Stop_Bewegung:

    Code
    DEF STOP_BEWEGUNG()
    INTERRUPT OFF 10 ;Interruot ausschalten, damit Routine nicht mehrfach aufgerufen wird
    BRAKE ;Bewegung abbrechen
    RESUME ;zurueck ins Hauptprogramm


    In der Doku steht die Interrupt-programmierung sehr gut beschrieben.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

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