Beiträge von IrrerPolterer

    naja. das geht vielleicht etwas in die richtung:


    :grinser043::applaus:


    Jaaaaaaa, Rob, das kommt der Lösung ziemlich nahe. Zumindest kann ich damit wohl leben! Habe das mal im Office ausprobiert, 'n bischen angepasst und täteretäääääääääääää, scheint zu klappen. Gleich mal in die Halle gehen und auf den Robi aufspielen.

    FOR i=1 to Anz_umdrehungen
    LIN_REL {b 0, c winkel}
    LIN_REL [b -winkel, c 0}
    LIN_REL {b 0, c -winkel}
    LIN_REL {b winkel, c 0}
    ENDFOR


    Genau das funktioniert eben nicht! Die Krone wird nicht am Rand langgeführt.
    Ich glaube ich muß das wieder mit ner tollen Zeichnung untermauern! :mrgreen:
    Mit einem Winkel von 25 Grad wirds deutlicher!


    IMO muß de TCP in den Rand der Krone verschoben werden....


    ...nochmal zum Verständnis:


    4. der Bewegungsablauf des Werkzeuges beschreibt dabei den Mantel eines, mit der Spitze nach unten zeigenden Kegels, mit dem TCP als Kegelspitze


    Das trifft fast den Kern!
    Ich würde es eher anders rum sehen. Ist aber Ansichtssache.
    Wenn ich mir das richtig vorstelle, dann muß der TCP verschoben werden.
    Bohrloch und Bohrkrone haben beide 90mm Durchmesser.
    Die Krone wird um 1 Grad gekippt.
    Damit änders sich Wirkungsgrad der Krone, bzw. der Durchmesser der Bohrung.


    BTW: Ich habe echte Schwierigkeiten meine Gedankengänge in Worts zu fassen... :wallbash:


    und wie lautet die Frage ?



    ähhhh...wie kriegt man das programmtechnisch hin?
    Also...ich meine. wie programmiere ich diese Bewegung?


    habe mich vielleicht falsch ausgedrückt. Is ja auch nich so einfach zu erklären.
    Ich möchte die Schneidkrone am Rand entlangführen. Immer nur ein Punkt der Krone berüht den Rand.
    Ich beginne bei C 1.0 , B 0.0.
    Nach der 1/4 Bohrung sind C 0.0 und B 1.0.
    Nach einer 1/2 sind C -1.0 und B 0.0
    Nach einer 3/4 sind C 0.0 und B-1.0
    Nach 1/1 sind C wieder 1.0 und B 0.0


    Da die Krone aber einen Durchmesser von 90mm und auch das Bohrloch einen Durchmesser von 90mm
    Kommt man bei angewinkelter Bohrkrone mit z.B.: LIN_REL {b 1,c -1} wie Rotkäppchen vom Wege ab.


    Ist das jetzt deutlicher oder irgendwie noch verwirrender...?



    BTW: Sorry wegen der Bilder sollten eigentlich nur in den Anhang.

    Hallo Leute,


    für eine Bohrapplication muß ich eine Art Pendelbewegung programmieren. Habe da schon viel versucht, kam aber nicht zu einem befriedigendem Ergebnis.


    Die rotiernede Bohrkrone soll in einem Winkel - sagen wir mal 1 Grad - zum Bohrlochstehen. Der Winkel zum Bohrloch soll immer gleich sein, sodaß die Schneidräder der Krone immer am Schneidrand langeführt werden.


    TCP ist in der Mitte der Krone auf höhe der Schneidkrone. Der Basenullpunkt liegt in der Mitte des Bohrlochs.


    Am besten ich hänge 'n paar schnell gemachte Zeichnungen dran:
    1. Tool & Base
    2. Start Bohrung
    3. Irgendwo mitten in der Bohrung


    Wer kann mir folgendes Programm erklären? Was versteht man unter der Interrupt-Funktion und unter break?


    Interrupts werden ausgelöst, wenn ein bestimmtes Ereignis stattfindet.


    DEF HAUPTPROGRAMM ()


    INTERRUPT DECL 21 WHEN $IN[1] DO INTR_SUCHE() ;when $IN[1] True ist, wird ins UP INTR_SUCHE gesprungen
    INTERRUPT OFF
    INTERRUPT ON 3 ;Stopmess wieder an


    PTP HOME usw.
    Mach irgend'nen anderen Blödsinn


    SUCHWAS()


    LIN GREIFPOS


    und mach wieder irgendwas...


    END


    DEF SUCHWAS()
    $TOOL=HAMMER
    $BASE=AMBOSS
    $VEL.CP=0.5 usw...
    usw...
    LIN STARTSUCHE


    WAIT FOR NOT $IN[1] ;Interrupt erst einschalten, wenn Bedingung nicht erfüllt!
    INTERRUPT ON 21
    LIN_REL {x 200}
    END


    DEF INTR_SUCHE()
    INTERRUPT OFF 21 ;damit nicht mehrmals ausgelöst wird


    BREAK ;Aktuelle Bewegung abbrechen


    GREIFPOS=$POS_INT ;Greifposition auf Koordinaten setzen an denen der Interrupt ausgelöst wurde
    RESUME ;Zurückspringen in das Programm, in dem der Interrupt deklariert wurde!


    END

    Ich bekomme eine externe Programmanwahl zwischen 1 und 4096 und dachte mir, da ich damit je nach Teil immer verschiede Positionen anfahren muß und keine Übereinstimmung in allen Positionen habe, mache ich es mir so einfach! :-|


    Kann mir kaum vorstellen, daß es sich um 4096 verschiedene Teile handelt. Füg doch noch einen INT für Programmnummer hinzu. Sagen wir für 20 verschieden Produkte oder Teile:


    STRUC TESTTYP CHAR NAME[12],REAL ABNAHME_POS,H,ABGABE_POS,INT ProgNr




    ;===== TESTDATEN
    INT AKT_TEST=1
    INT AKT_TEST_NR=1
    INT NUMMER=1


    INT ANZ_DATEN=20
    DECL TESTTYP TEST_SATZ[20]



    TEST_SATZ[1]={NAME[] "Test 1",ABNAHME_POS 0.0,ABGABE_POS,H 130.0,Prognr 1}
    TEST_SATZ[2]={NAME[] "Test 2",ABNAHME_POS 0.0,ABGABE_POS,H 130.0,Prognr 64}
    TEST_SATZ[3]={NAME[] "Test 2",ABNAHME_POS 0.0,ABGABE_POS,H 130.0,Prognr 4}.
    .
    .
    TEST_SATZ[20]={NAME[] "Test 20",ABNAHME_POS 0.0,ABGABE_POS 130.0,Prognr 4096}



    Im Hauptprogramm schreibst du dann:


    INT i ;Schleifenzähler (Muß in den Deklarationsteil)


    AKT_TEST=0


    For i = 1 to ANZAHL_DATEN
    If TEST_SATZ[i].Prognr==SPSProgNr then ;SPSProgNr= Übergebene Programmnummer
    AKT_TEST=i
    Exit
    Endif
    endfor


    If AKT_TEST==0 then
    ;Keine passende Programmnummer Fehler
    HALT
    ;Mach irgendwas...
    Endif


    Dazu mußt du natürlich die verschiedenen Programmnummern kennen. Aber es spart 'ne Menge Datensätze und die Config.dat läßt sich auch schneller öffnen. ;)
    Das ganze ist auch übersichtlicher.

    Das ist schon richtig. Bei PTP-Bewegungen ist es aber so, daß die Bahn etwas anders - abhängig von der Geschwindigkeit - verlaufen kann. Es geht hier nicht um 200mm oder so, sondern um bedeutend weniger.


    Bei PTP berechnet die Steuerung ja wie schnell welche Achse und wohin um wieviel grad usw. Es kann aber vorkommen, daß bei 100% POV die Achsen anders beschleunigt werden müssen als bei 10%, da sonst die maximale Beschleunigung überschritten würde oder ähnliches. Kommt eben ganz auf die Bewegung an...

    Also wenn ich das richtig verstehe, berechnest du den zu überschleifenden Punkt (B). Das dürfte dann der Grund für das unterschiedliche Verhalten sein.


    Ansonsten verhält sich der Robi immer gleich...sagt jedenfalls meine Erfahrung.

    Berechnest du irgendwelche Positionen oder sind die alle fix.
    IMO müßte es so sein, daß immer gleich überschliffen wird, wenn du bei der gleichen Geschwindigkeit bleibst. Bei verschiedenen Geschwindigkeiten, kann sich die Überschleifbewegung geringfügig ändern.


    Oder wird der Punkt evtl. nicht immer überschliffen, da noch irgendwelche Signalabfragen dahinter kommen. (Meldung: Überschleifen nicht möglich (in T1 oder T2))