Kreisbogen abfahren mit nicht konstanten Geschwindigkeit

  • 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

  • ANZEIGE

  • Aufteilen in mehrere Segmente
    + Zonen
    + unterschiedliche Geschwindigkeiten


    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

    Einmal editiert, zuletzt von padostms ()

  • 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


  • Danke Loipe


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


    Danke im Voraus

  • 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?

  • 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.

  • 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

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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