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

[offen] Kreisbogen abfahren mit nicht konstanten Geschwindigkeit


normal_post Autor Thema: [offen] Kreisbogen abfahren mit nicht konstanten Geschwindigkeit  (Gelesen 629 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

17. Januar 2019, 10:03:10
Gelesen 629 mal
Offline

padostms


Hallo Community

Brauche Eure Hilfe.

Ist es möglich bei eine Kreisbewegung die geschwindigkeit zum regulieren so das es am Anfang Beschleuningt und am Ende langsamer fährt?Im Anhang ist eine skizze was ich abfahren muss.Beim Linearen bewegung kann ich so segmentweise fahren das beim Start langsam ist und bis am Ende beschleuningt.Da möchte ich auch  machen nur umgekehrt.

Hoffe das es verständlich ist

Danke im Voraus


« Letzte Änderung: 21. Januar 2019, 08:12:37 von padostms »
  • gefällt mir    Danke

Heute um 19:18:22
Antwort #1

Werbung

Gast

17. Januar 2019, 14:03:26
Antwort #1
Offline

Robiman

Global Moderator
Aufteilen in mehrere Segmente
+ Zonen
+ unterschiedliche Geschwindigkeiten
  • gefällt mir    Danke

17. Januar 2019, 16:17:50
Antwort #2
Offline

padostms



Das habe ich schon vorher geschrieben beim linearen bewegung geht.

PROC Spindel2()

VAR num nSegment;
      VAR speeddata vSegment:=[30,10,5000,1000];
   
        MoveL pVor_Takttisch_Seiten_IR, v100, fine, toAktuell\WObj:=woAktuell;
        Takttisch_breit;
        Bewegung_Takttisch\blockiert;
        ! Aufteilung der Strecke zw. Aussen und Innen in n_Segmentanzahl Segmente
        nSegment:=(pIR_TT_Oben_Aussen.trans.x-pIR_TT_Oben_Innen.trans.x)/n_Segmentanzahl;
        vSegment:=vcoat;
        MoveL Offs(pIR_TT_Oben_Aussen,0,-nLagerdurchmesser / 2 - 50,0), v100, z10, toAktuell\WObj:=woAktuell;
        MoveL pIR_TT_Oben_Aussen, v100, fine, toAktuell\WObj:=woAktuell;
        ! Bearbeitung Takttisch Innenring
        FOR i FROM 1 TO nAnz_Oben DO
             FOR j FROM 1 TO n_Segmentanzahl DO
                 vSegment.v_tcp:=vSegment.v_tcp+nSektorGeschw_Korrektur;
                 MoveL Offs(pIR_TT_Oben_Aussen,-j*nSegment,0,0), vSegment, z0, toAktuell\WObj:=woAktuell;
             ENDFOR
             FOR k FROM n_Segmentanzahl TO 1  DO
                 vSegment.v_tcp:=vSegment.v_tcp-nSektorGeschw_Korrektur;
                 IF vSegment.v_tcp<2 THEN
                    vSegment.v_tcp:=2;
                    ErrWrite "Die Bearbeitungsgeschw. bekommt negativen Wert", "Die Geschw. wird auf 2 mm/s gesetzt"\RL2:="- Produktionsgeschw. erhoehen"\RL3:="- nSektorGeschw_Korrektur reduzieren"\RL4:="- n_Segmentanzahl reduzieren";
                 ENDIF
                 MoveL Offs(pIR_TT_Oben_Aussen,-k*nSegment,0,0), vSegment, z10, toAktuell\WObj:=woAktuell;
             ENDFOR
        ENDFOR
        MoveL Offs(pIR_TT_Oben_Aussen,0,-nLagerdurchmesser / 2 - 50,0), v100, z10, toAktuell\WObj:=woAktuell;
        MoveL pVor_Takttisch_Seiten_IR,v100,fine,toAktuell\wobj:=woAktuell;
        !Ende

Hier ist mit 20 Segmente aufgeteilt.Diese würde ich im Movec brauchen.Da fehlt noch was dazu.

Danke im Voraus
« Letzte Änderung: 21. Januar 2019, 13:19:46 von padostms »
  • gefällt mir    Danke

18. Januar 2019, 10:12:44
Antwort #3
Offline

Loipe


Hallo zusammen

ich kanns gerade leider nicht ausprogrammieren(Freitags keine Zeit ^^) aber so würd ich rangehen

- mit 3 Punkten den Mittelpunkt der Kreisbahn errechnen.
- Start- und Endwinkel auf Kreisbahn bestimmen
- Winkel in Segmente unterteilen
- Polarkoordinaten auf Kreisbahn berechnen
- For Schleife alle abfahren 

vieleicht hilft der anstoß ich muss mal schauen wann ich zum ausprogrammieren kommen

Gruß Loipe
wer das hier liest hat zuviel zeit oder einen viel zu großen bildschirm

22. Januar 2019, 13:03:00
Antwort #4
Offline

padostms



Danke Loipe

Meine Punkte sind fixe Punkte.Bauteile sind gleich.Hoffe das du irgenwann dazu kommt was zu Presentieren :)

Danke im Voraus
  • gefällt mir    Danke

Heute um 19:18:22
Antwort #5

Werbung

Gast

22. Januar 2019, 13:14:56
Antwort #5
Offline

Loipe


hab geschaut hab grad nur etwas ähnliches auf KUKA und bin grad noch bissel beschäftigt.

aber nur mal so wenn die Punkte doch Fix sind warum teacht du dann nicht 3 Teilkreise wenns immer das selbe ist?
  • gefällt mir    Danke
wer das hier liest hat zuviel zeit oder einen viel zu großen bildschirm

22. Januar 2019, 13:45:37
Antwort #6
Offline

padostms


Mit der Teilkreise ist so das es beim wechselpunkt kurz stehen bleibt.Brauche ohne Unterbrechung.
  • gefällt mir    Danke

22. Januar 2019, 13:52:38
Antwort #7
Offline

Loipe


kann dir bei dieser lösung genauso passieren weils nichts anderes ist wie Teilkreise.

hast du überschleif richtigeingestellt?
hast teilkreisen groß genug für eingestellten überschleif?
$Advance nicht 0
usw.

musst du auch beachten wenn du ne errechnete Lösung hast.

ich dachte du hast immer unterschiedliche Kreisbögen.
  • gefällt mir    Danke
wer das hier liest hat zuviel zeit oder einen viel zu großen bildschirm

22. Januar 2019, 14:26:25
Antwort #8
Offline

padostms


Nö eis ist eine 1/4 Kreis.Sind 3 punke Start,Mitte,End die möchte ich so abfahren das am Anfang  7.16mm/s fährt und bis am Ende 2.55mm/s verlangsamt Ohne unterbrechung.Habe Oben so eine Programm wo die Lineare Bewegung auf segmente aufgeteilt ist dort funktioniert.Beim Kreis ist nicht so.

Hier ein andere lösung
PROC Kreisb(robtarget p_start,robtarget p_ende,num v_start,num v_ende)
MoveL p_start, v100, fine, tool0;
      p_act := p_start;
      ! Abstand Start - Endpunkt berechnen:
      dist_a_e := Distance(p_start.trans,p_ende.trans);
      ! Anzahl der Punkte berechnen:
      p_n := Trunc(dist_a_e / p_a);
      ! Abstände zum nächten Punkt:
      dist_x := (p_ende.trans.x - p_start.trans.x) / p_n;
      dist_y := (p_ende.trans.y - p_start.trans.y) / p_n;
      dist_z := (p_ende.trans.z - p_start.trans.z) / p_n;
      ! Schleife bis zum Endepunkt:
      FOR i FROM 1 TO p_n DO
         ! Verschiebewerte berechnen:
         p_act.trans.x := p_start.trans.x + (i * dist_x);
         p_act.trans.y := p_start.trans.y + (i * dist_y);
         p_act.trans.z := p_start.trans.z + (i * dist_z);
         ! Punkt anfahren:
         MoveL p_act, v100, z0, tool0;
         ! Geschwindigkeitsoverride anpassen:
         SpeedRefresh v_start + i * (v_ende - v_start) / p_n;
      ENDFOR
      MoveL p_ende, v100, fine, tool0;
      ! Geschwindigkeitsoverride rückstellen:
      SpeedRefresh 100;
ENDPROC
  • gefällt mir    Danke

Heute um 19:18:22
Antwort #9

Werbung

Gast


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