Positionen berechnen und anfahren aus Array

  • Hi zusammen,
    ich stehe vor einem Problem und finde gerade keine Lösung dafür. Vielleicht weis der eine oder andere ja eine Richtung in die ich es versuchen kann.


    Zu meinem Problem:


    Ich habe einen Ovalen Dorn an einer 7 Achse, den ich mit einer als TCP vorhandenen Rolle abfahren muss. Da ich den Dorn nicht teachen kann (unterschiedliche Durchmesser), habe ich aus dem CAD 99 Werte für die Errechnung des Dornumfangs bekommen.
    Diese Schreibe ich mir mit den Werten für den Drehwinkel, Radius und Werkzeugneigung in ein Array:


    DECL DornDaten Dornposition[99]
    Dornposition[1]={rDornWinkelStart 0.0,rDornWinkelNeigungStart 0.0,rDornZOffset 0.0}


    Wennich nun den Dorn einmal Rundherum abfahren möchte, habe ich bisher folgenden Idee gehabt:


    iNrStart_TMP=0
    iNrEnde_TMP=99


    LOOP


    xOval1=xIstpos
    xOval1.X=xOval1.X;+500
    xOval1.Z=xOval1.Z;+DornPosition[iNrStart_TMP].rDornZOffset
    xOval1.B=xOval1.B;+DornPosition[iNrStart_TMP].rDornWinkelNeigungStart
    xOval1.E1=xOval1.E1-DornPosition[iNrStart_TMP].rDornWinkelStart


    LIN xOval1 C_DIS


    ;-- Pruefe ob alle Punkte abgefahren wurden:
    IF (iNrStart_TMP==iNrEnde_TMP) THEN
    EXIT
    ELSE
    iNrStart_TMP=iNrStart_TMP+1
    ENDIF


    ;-- Berechnung des anzufahrenden Punkts:
    xOval2=xIstpos ; xLeerpos
    xOval2.X=xOval2.X;+500
    xOval2.Z=xOval2.Z;+DornPosition[iNrStart_TMP].rDornZOffset
    xOval2.B=xOval2.B;+DornPosition[iNrStart_TMP].rDornWinkelNeigungStart
    xOval2.E1=xOval2.E1-DornPosition[iNrStart_TMP].rDornWinkelStart


    LIN xOval2 C_DIS


    ;-- Pruefe ob alle Punkte abgefahren wurden:
    IF (iNrStart_TMP==iNrEnde_TMP) THEN
    EXIT
    ELSE
    iNrStart_TMP=iNrStart_TMP+1
    ENDIF


    ENDLOOP


    Die Punkte werden alle angefahren und soweit so gut. Allerdings ist es halt wie zu erwarten so, das die Bewegung bei jedem Punkt kurz Stopp. Ich habe also keinen flüssigen Umlauf an der 7 Achse, sondern mehr ein takten. Mit PTP Bewegungen und ca. 100% Verschleifen funktioniert es, aber das ist für die Bearbeitung zu ungenau.


    Grund für den Aufbau ist der, es wird nicht immer komplett umlaufend gearbeitet, sondern auch mal bei z.B.: 200° Drewinkel begonnen. Dazu habe ich mir also eine Suchfunktion im sps.sub gebaut, die mir dann für den Winkel, den entsprechenden z Offset zurück schickt. Das ist dann mein xOval1. Von diesem Punkt aus berechne ich dann so lange, bis mein Endpunkt oder die max. Umdrehung erreicht wurde.


    Hat jemand von euch eine Idee, wie ich die Auflösung besser gestalten kann, so das die Punkte/Bahn schon im Voraus bekannt ist?!


    Vielen Dank!

  • Schritt für Schritt zum Roboterprofi!
  • Schreib mal ein CONTINUE vor jeder Bewegung die flüssig laufen soll.
    Es reicht nicht am Anfang ein CONTINUE zu haben, es wirkt sich nur auf den nächsten Satz aus.

  • Probier mal so


    E6POS xOval[99]
    INT I


    iNrStart_TMP=0
    iNrEnde_TMP=99
    xOval[1]=xIstpos
    LOOP
    IF iNrStart_TMP==1 THEN
    xOval[1]==xIstpos
    ELSE
    xOval[ iNrStart_TMP]==xOval[ iNrStart_TMP-1]
    ENDIF
    xOval[ iNrStart_TMP].X= xOval[ iNrStart_TMP].X;+500
    xOval[ iNrStart_TMP].Z= xOval[ iNrStart_TMP];+DornPosition[iNrStart_TMP].rDornZOffset
    xOval[ iNrStart_TMP].B= xOval[ iNrStart_TMP].B;+DornPosition[iNrStart_TMP].rDornWinkelNeigungStart
    xOval[ iNrStart_TMP].E1= xOval[ iNrStart_TMP].E1-DornPosition[iNrStart_TMP].rDornWinkelStart
    ;-- Pruefe ob alle Punkte berechnet wurden:
    IF (iNrStart_TMP==iNrEnde_TMP) THEN
    EXIT
    ELSE
    iNrStart_TMP=iNrStart_TMP+1
    ENDIF


    ENDLOOP


    FOR I = 1 TO iNrEnde_TMP
    LIN xOval[I] C_DIS
    CONTINUE
    ENDFOR

    Einmal editiert, zuletzt von Loipe ()

  • [size=2]Moin,[/size]
    [size=2]soweit ich mich noch erinnern kann von meinen Versuchen lassen sich ein LOOP und FOR-Schleifen auch mit einem CONTINUE nicht verschleifen.[/size]
    [size=2]Habe mal Anfang des Jahres einige Test damit durchgeführt. Ende vom Lied war das die WHILE-Schleife dies kann aber nur wenn keine Systemvariable abgefragt wird ( EIngang etc alles mit $...)
    [/size]
    [size=2]Habe in meinem Fall dann eine boolsche Variable in der sps.sub mit dem Eingang beschrieben und schon ließ sich die WHILE-Schleife überschleifen auch ohne CONTINUE. ;)
    [/size]
    [size=2]Die Berechnungen sollten dem KUKA nicht weh tun, der Stop kommt nicht daher.
    [/size]
    [size=2]Weiterhin reicht bei so etwas auch def_advance=1 (Vorlaufzeiger).[/size]
    [size=2]Hoffe es hilft Dir weiter.[/size]



    [size=2]Gruß aus Hiroshima[/size]



    [size=2]Sven
    [/size]

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Hallo ihr drei,
    danke für die Tipps.
    @run03 - Also Continue wird bzw. ist schon mit in dem Programm eingebracht, führt aber nicht zu dem gewünschten Erfolg.
    Loipe - deine Lösung sieht gut aus, werde es später gleich testen! :supi:
    Sven - die Erfahrung mit den Continues und den Schleifen habe ich auch schon gemacht, dachte aber immer das es ein Fehler von mir sei... :waffen100:


    Ich habe gestern abend das ganze noch einmal mit Continue und SLIN probiert, wenn ich nur Achse 7 drehe, sieht es schon flüssiger aus. Dann wollte ich den Roboter mit verfahren lassen um zu sehen, ob er den Z Offset sauber mit der Ovalen Kontur verfährt. Ergebnis, die 7 Achse dreht an manchen Stellen wieder langsamer und ruckeliger. Ich denke das hat mit der math. Kopplung zu tun, sehe ich das richtig?!


    Dieser Teil funktioniert nicht:


    iNrStart_TMP=0


    IF iNrStart_TMP==1 THEN
    xOval[1]=xIstpos
    ELSE
    xOval[ iNrStart_TMP]=xOval[ iNrStart_TMP-1]
    ENDIF


    Null ist kein gültiger Feldindex. Zudem ist die Punktberechnung schnell, das es immer zwei Punkte von einem Bezugspunkt abzieht.

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