20. März 2019, 08:52:18
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

 Geschwindigkeit während Positionierung beeinflussen


hot_post Autor Thema:  Geschwindigkeit während Positionierung beeinflussen  (Gelesen 7075 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

12. Juli 2006, 10:31:18
Antwort #15
Offline

rmac


Hallo,

ich hab auch 'ne abstruse Idee dazu:
wenn der Pfad von der Presse zum Wartepunkt linear ist, könnte man diesen relativ leicht (per Programm) in kleine Teilstrecken aufteilen und diese Teilstrecken mit entsprechend großzügigen Zonen anfahren. Bei gut gewählten Werten würde dabei eine langsame durchgehende Bewegung zum Wartepunkt entstehen.
Bei jedem Teilstück wird nun überprüft ob die Entnahmefreigabe vorliegt (per TriggCheckIO/TriggL oder MoveLSync oder so).
Wenn ja, wird die (langsame Teilstück-)Schleife abgebrochen und über den Wartepunkt mit großer Zone und Geschwindigkeit zur Entnahme gefahren (=schnell). Wenn es die Gegebenheiten erlauben, könnte man vielleicht auch direkt zur Entnahme zurückfahren sobald die Freigabe vorliegt, ohne über den Wartepunkt fahren zu müssen (?)
Wenn die Freigabe während der langsamen Rückfahrt nicht gegeben wird, wird die Teilstückschleife bis zum Wartepunkt ausgeführt.

Die Zerlegung in lineare Teilstücke ist auch nicht schwer zu programmieren.  :beerchug:
Vielleicht eine Überlegung wert...

Grüße
Rainer
  • gefällt mir    Danke

Heute um 08:52:18
Antwort #16

Werbung

Gast

12. Juli 2006, 12:43:38
Antwort #16
Offline

heini0707


Hallöle,

ich hätte ein Trick17 auf Lager.

Was spricht dagegen, wenn die Presse bevor Rückhub anfängt ein Ausgang setzt und der Roboter entweder in einer Extra Task oder Ereigniss gesteuert einen Timer startet (vorausgesetzt Rückhub ist immer gleich). Und den Timer vor der Bewegung abfrägt und die Geschwindigkeit dadurch steuert. Z.B.:
IF cTimer1>2 THEN
  vVar0=vVar1
ELSEIF cTimer1>3 THEN
  vVar0=vVar2
ELSEIF cTimer1>4 THEN
  vVar0=vVar3
ELSE
  vVar0=vVar10
ENDIF
:oops: ÄÄHH Syntax könnte so aussehen.

MfG heini
  • gefällt mir    Danke

12. Juli 2006, 16:34:30
Antwort #17
Offline

irb6400R


Hallo zusammen,

 :grinser043:
ich muss sagen dass sind alles sehr gute Ideen. werde alle mal durchprobieren.
Melde mich wieder wenn die Ergebnisse vorliegen.

vielen Dank schon mal.


Grüße IRB6400R
  • gefällt mir    Danke

12. Juli 2006, 20:33:22
Antwort #18
Offline

maddin


Hallo zusammen,

@Rainer:

Du hast mich richtig neugierig gemacht.....

Wie zerlegt man denn eine lineare Bahn in kleine Teilstrecken?  :kopfkratz:

Ich komm einfach nicht drauf    :wallbash:

Vielleicht kann ichs ja mal brauchen  ;)

Gruß maddin

  • gefällt mir    Danke

12. Juli 2006, 21:03:58
Antwort #19
Offline

Spacefire


Ich würde die Differenz der XYZ von Start und Ziel durch die Anzahl der Teilstücke teilen und dann in einer Schleife das Ergebnis zur Start-Position zuaddieren. Sollte problemlos gehn solange sich die Orientierung nicht ändert aber auch das is lösbar...
  • gefällt mir    Danke

Heute um 08:52:18
Antwort #20

Werbung

Gast

13. Juli 2006, 01:37:20
Antwort #20
Offline

rmac


Hallo maddin,

wie Spacefire schon gesagt hat: XYZ-Achsendifferenzen der beiden Positionen durch Segmentanzahl teilen und per Offset auf die Endposition zubewegen.

Bezogen auf das Problem von irb6400R könnte das etwa so aussehen (nicht getestet = ohne Gewähr):
MODULE segment

  ! Globale Variablen
  ! RobTargets mit gleichem WerkObjekt/Tool teachen!
  VAR robtarget rtStart := ...;
  VAR robtarget rtEnd := ...
  ! Pos vor dem Entladen der Presse
  VAR robtarget rtVorEntnahme := ...
 
  VAR bool bContinue;

  PROC CkeckIO()
    bContinue := NOT TestDI(diPressenFreig);
  ENDPROC

  PROC Main()
    ! Teilstrecken-/Segmentlänge in [mm]
    CONST num nSegLen := 100;
    ! Geschw. und Zone für Teilstrecke; geeignete Werte durch ausprobieren ermitteln
    CONST speeddata vSeg := v500;
    CONST zonedata zSeg := z100;

    ! Hilfsvariablen
    VAR robtarget rtNext;
    VAR num i;
    VAR num nSteps;
    VAR pos pDiff;

    ! Starten an aktueller Pos. / ggfls. ändern
    rtStart := CRobT();

    ! Anzahl (ganzer=vollständiger) Teilstrecken bei gegebener Teilstreckenlänge ermitteln
    ! (Euklidische Distanz durch Segmentlänge)
    nSteps := Trunc(Distance(rtStart.trans, rtEnd.trans) / nSegLen);
    ! Schrittweite pro Achse pro Teilstrecke
    pDiff.x := (rtEnd.trans.x - rtStart.trans.x) / nSteps;
    pDiff.y := (rtEnd.trans.y - rtStart.trans.y) / nSteps;
    pDiff.z := (rtEnd.trans.z - rtStart.trans.z) / nSteps;

    rtNext := rtStart;
    i := 1;
    bContinue := TRUE;
    ! Teilstrecken in einer Schleife abarbeiten bis (fast) ans Ziel oder Abbruch durch Pressenfreig.
    WHILE (i <= nSteps) AND bContinue DO
      rtNext := Offs(rtNext, pDiff.x, pDiff.y, pDiff.z);
     
      ! Teilstrecke fahren und (ca.) am Ende "CheckIO" ausführen;
      ! bei Freigabe wird "bContinue" zurückgesetzt und die Scheife beendet
      MoveLSync rtNext, vSeg, zSeg, tool0, "CkeckIO";
      Incr i;
    ENDWHILE
   
    IF bContinue THEN
      ! keine Freigabe erhalten, also bis zum Ende fahren
      MoveL rtEnd, vSeg, fine, tool0;
    ELSE
      ! Freigabe erhalten, d.h schnell zur Warteposition, überschleifen...
      MoveL rtEnd, v3000, z200, tool0;
      ! ...und mit Vollgas zurück zur Entnahme
      MoveL rtVorEntnahme, v3000, z10, tool0;
    ENDIF

  ENDPROC

ENDMODULE

Irgendwie so ähnlich könnte das aussehen...  :supi:
Kann ja mal einer ausprobieren und Rückmeldung geben ob's gefunzt hat.
Gruß
Rainer
« Letzte Änderung: 13. Juli 2006, 09:51:49 von rmac »
  • gefällt mir    Danke

13. Juli 2006, 18:52:22
Antwort #21
Offline

Torsten


Hallo irb6400R,

ich würde mir einen eigenen Move-Befehl schreiben, sowas wie MoveLPresse. Dem übergiebst Du zwei Targets (Eines geht auch, wenn Du die aktuelle Position abfragst)  und machst dann in einer Schleife eine Geradeninterpolation zwischen den beiden Targets. Die Orientierung zu interpolieren könnte etwas kniffelig sein. Weiß im Moment nicht ob ABB da irgendwelche Funktionen für anbeitet. Wenn nicht einfach mal nach "QuatSlerp" suchen.  Mit jedem Interpolationsschritt in der Schleife rufst Du einen "kleinen" MoveL auf. Vorher fragst Du das Signal von der Presse ab, z.B. über eine Variable, die von einem Interrupt gesetzt wird. So kannst dann die Geschwindigkeit für jedes Teilsegment anpassen, hast aber in Deinem eigentlichen Programm nur einen einfachen Befehl drin stehen.

ciao,
  Torsten
  • gefällt mir    Danke

20. April 2007, 19:04:01
Antwort #22
Offline

irb6400R


Hallo zusammen,

wollte nur mal mitteilen dass ich es aufgegeben habe weiter an diesem "Problemchen" zu arbeiten.

Aber nicht weil ich nicht weiter komme sondern weil sich meine Firma entschlossen hat die von ABB angebotene Synchronisation zwischen Presse - Entladeroboter  & Entlader - Beladeroboter zu kaufen.  (nach langen Verhandlungen hat wohl der Preis gestimmt.)

Das ganze soll irgendwann Mitte oder Ende Sommer eingebunden werden.

Ich bin auf alle Fälle mal gespannt wie das ganze dann aussehen bzw. funktionieren wird.

Werde euch auf dem laufenden halten wenn es soweit ist.

Grüße irb6400r
  • gefällt mir    Danke


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH