Kann man die Momentüberwachung zum Schrauben mit Drehmoment nutzen?

  • Hallo Zusammen,


    ist es möglich die Momentüberwachung beim Kuka KR2 150 als Drehmomentüberwachung für das Anzugmoment von Schrauben zu nutzen?


    Ich haben den Roboter inzwischen so weit, dass der entlos die Achse 6 dreht und Gewinde schneiden kann. Jetzt möchte ich verscheidene Schraubengrößen z.B. mit 10-90 Nm mit der Achse 6 und einem 3-Backengreifer einschrauben. Mein Gedanke ist, die Momentüberwachung der Achse 6 auszulesen und wenn z.B. die 90 Nm überschritten werden, soll das Drehen der Achse 6 gestoppt, der Greifer gelösst und weggefahren werden.


    Ist das überhaupt so möglich oder brauche ich einen exteren Drehmomentsensor der einen Interrupt auslöst? Wie könnte ich das programmtechnisch mit der Monentüberwachung umsetzten? Hat jemand vielleicht ein Beispielprogramm für mich?


    VG Chorsch

  • Schritt für Schritt zum Roboterprofi!
  • Ohne dass ich dir eine Lösung bieten kann: Wie genau der Momentenbetrieb funktioniert und angewendet werden kann unterscheidet sich nicht anhand vom Roboter sondern von der Steuerungsversion und den Softwareversionen. Darüber sagst du leider nichts.


    Ich würde aber nicht die Monentenüberwachung sondern den Momentenbetrieb nutzen. Wobei ich bei einem Bereich 10 bis 90 Nm bei so einem Riesenroboter eher schwarz sehe. Der ist da zu Grobmotorisch. Ich schätz mal so eine Maschine bringt auf A6 so 3000 - 4000 Nm am Abtrieb, da sind 10 - 90 Nm ein Fliegenschiss.


    Fubini

    2 Mal editiert, zuletzt von fubini ()

  • Die Feinfühligkeit eines KR150 hat seine Grenzen.

    Der ist für ganz andere Zwecke ausgelegt.

    Eine saubere Erkennung im Bereich 10-90 Nm wirst Du nie exakt hinkriegen.

    Nur schon wegen der Reibung des Getriebes, kalter Zustand, warmer Zustand, etc...


    Dafür gibt's externe Tools, die Dir das Gewinde schneiden wie auch die Schraube einsetzen können.

    Und dies viel effektiver, als da Achse 6 rotieren zu lassen. Mit Qualitätsüberwachung.

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Hallo SJX,


    ja , ich habe schon vorher angenommen, dass das nicht so exakt ist. Der ganze Roboter ist für mich erst einmal ein Bastelobjekt als Versuchsballon zum Testen. Ich habe eigentlich schon viel zu viel Geld in das "Hobby" gesteckt. Würde gerne trotzdem mal den Momentbetrieb testen und mir selber ein Bild machen, ob ich da mit leben kann.


    Wie bekomme ich das denn mit dem Momentbetrieb hin. Kann ich die Momente live permanent selbstaktualisiert irgentwo sehen und in eine Variable übergeben, damit ich eine Interrupfunktion auslösen kann?


    Danke für die Hilfe.


    VG Chorsch

  • Servus,


    ich habe einen Motorbetrieben Greifer, der mit einer Externen Achse betrieben wird [7]. Es ist ein VKRC4 ich benutzte den $TORQUE_AXIS_ACT[7] bei dir $TORQUE_AXIS_ACT[6] ich weiß aber nicht ob den auch bei der KRC2 gibt!

    Wenn es ihn gibt, kannst du im $TORQUE_AXIS_MAX[6] sehen was die Achse Maximal kann.

  • $CURR_ACT[] des Motors wurde früher als Pendant zu $TORQUE_AXIS_ACT[6] verwendet.

    Halt nicht hochgerechnet mit Getriebeübersetzung und irgendwelchen Reibungskoeffizienten, die bei alten Robis sowieso nicht mehr passen.

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Guten Morgen,


    ok die Leistungswerte des Motor werden mir nun angezeigt und ein Interrupt bei Überschreitung ausgelöst. Könne mir denken das ich mit der Ungenauigkeit leben kann.


    Nun habe ich in die Interruptsubroutine eine Brake einfügt und bei Überschreitung bleibt der Roboter stehen. Soweit so gut. Dann habe ich dort ein GOTO FERTIG eingegeben, damit er an den Punkt FERTIG: im Hauptprogramm springt und den Greifer löst und und sich vom Werkstück entfernt. Jedoch erhalte ich dann die Fehlermeldung: "unzulässiger oder nicht bekannter Satz"


    Wie komme ich im Programm dann nach dem Interrupt zurück in die bestimmte Zeile im Hauptprogramm?


    VG Chorsch

    Einmal editiert, zuletzt von Chorsch76 ()

  • (wenn ich es sowieso dauernd editiere, dann gleich richtig)

    Aktuelles Ding abbrechen geht mit RESUME. Das will aber dann tatsächlich die Routine, in der der Interrupt AUFGELAUFEN ist, verlassen, und zwar in jene, in welcher er DEKLARIERT wurde, um dort mit der nächsten Anweisung weiter zu machen. Um die Bewegung zu stoppen reicht der Interrupt, aber dann willst Du auch den Rest der Bewegung überspringen. Das heisst: die abzubrechende Aktion muss in eine eigene Unterroutine (und wenn es nur eine Bewegung ist).


    Schreib "RESUME" statt "GOTO..."

    Und vergiss nicht, den Interrupt wieder auszuschalten.


    Grüße,

    Michael

  • EricH


    Ja, ich könnte ja auch mehrere Unterprogramme:


    1. Werkstück anfahren

    2. Werkstück bearbeiten

    3. Werkstück verlassen

    ...


    machen, aber wie rufe ich die Unterprogramme dann gezielt auf? Und die muss ich dann auch aus der Interruptroutine aufrufen können.


    Vielleicht so? Hier mal grob skizziert, ich hoffe Du kannst meinem Gedankengang folgen:



    Definition Interrupt

    ************************Hauptprogramm**********************************

    loop

    if Stufe == 0 then 'Home anfahren'

    Pos. 1 'Home'

    Stufe = 1

    endif


    if Stufe == 1 then 'Werkstück anfahren'

    Pos. 1

    Pos. 2 ... bis die Hand richtig vor dem Werkzeug steht

    Stufe = 2

    endif


    if Stufe == 2 then 'Werkstück bearbeiten'

    Pos. 1
    Pos. 2 ... bis Interrupt kommt

    Stufe = 3
    endif


    if Stufe == 3 then 'Werkstück verlassen' Pos. 1
    Pos. 2 ... bis Hand in gewünschter Verlassenposition steht

    Stufe = 0
    endif


    if Stufe == 4 then 'Werkstück austauschen' Pos. 1

    Pos. 2 ... bis Hand in gewünschter Position nach dem Werkstückwechsel steht Stufe = 1

    endif


    if Schalter1 == true then 'Home anfahren und parken solange Schalter1 geschaltet ist' Pos. 1 'Home'

    brake

    else

    Stufe = 0
    endif


    endloop

    ***********************Interruptroutine*********************************


    Def Drehmoment()

    brake

    Stufe = 3

    end

    **********************************************************************


    Ist mein Ansatz so umsetzbar und bei der Rückkehr aus der Interruptroutine wird direkt in die If-Bedingung Stufe 3 gewechselt oder geht der erst zurück in Stufe 2, weil die beim Interrupt die Stufe2 verlassen wurde ?


    VG Chorsch

  • def rahmenprogramm()

    loop

    INTERRUPT DECL 99 WHEN... DO drehmoment()

    PTP

    LIN

    INTERRUPT ON 99

    bearbeiten()

    INTERRUPT OFF 99

    LIN

    PTP

    endloop

    END


    def bearbeiten()

    LIN... (oder was auch immer)

    END


    def drehmoment()

    brake -F

    interrupt off 99

    RESUME

    END


    Siehe meinen editierten Beitrag oben



    Grüße,

    Michael

  • Hallo Chorsch,


    du brauchst beim Interrupt nichts eigenes zuschreiben, der macht das schon von selbst bei richtiger Programmierung.


    Du Deklarierst den Interrupt in dem Programm in das du zurückspringen möchtest..


    z.B Hauptprogramm.


    Hauptprogramm:


    Interrupt DECL 11 When dix == TRUE DO irStop() ;fdix ist dein Moment das du erreicht hast


    CAll MomentenErkennung()


    .... Programm nach dem erreichen weiter laufen lassen.


    Nun zum Programm Momentenerkennung


    MomentenErkennung:


    Interrupt ON 11

    L ...... drehen der Achse 6


    Kommt dein Eingang für Moment erreicht springt der Interrupt ins irStop


    irStop:


    Interrupt OFF 11

    BRAKE F

    WAIt FOR diX

    RESUME

    END


    Löst der Interrrupt nun aus Springt das Programm Automatisch zu

    ".... Programm nach dem erreichen weiter laufen lassen." siehe oben


    Wichtig der Interrupt muss IMMER eine Ebene höher deklariert werden wo er Auslöst!


    Hoffe es ist verständlich.

    Schönes lange Wochenende euch allen.


    Gruß Philipp

  • Ja so sieht das schon gut aus. Ein RESUME statt stufe=3 bei der Drehmoment Routine sollte auch reichen.

  • Bemerkung:

    mit RESUME immer Vorlaufzeiger beachten... und "Bearbeiten" muss schon ein Unterprogramm sein


    Programmiersklave hat es richtig in #17

    lediglich am ende Bearbeitung() ist "WAIT SEC 0" oder aenlich notig... und kein minuszeichen in brake F

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