Beiträge von fubini

    Hallo,


    Zitat

    Ich kann dem sicherheitsbewussten Kollegen versichern, dass ich mich damit selbst nicht erlege, da wir eine Behausung um den KUKA konstruiert haben


    Und der Roboter kommt aus der Behausung nicht raus? Gewöhnlich dient ja die Behausung dazu dem Bediener den direkten Zugang zum Roboter zu verwehren. Den Schutzzaun der stark genug ist den Roboter aufzuhalten habe ich leider noch nicht geshen.


    Fubini

    Hallo,


    [list type=decimal]

    • Natürlich hat KRL Strings. Das sind halt "C"-Strings. Ich glaube da hängst du zu sehr in eine C#/.NET/Java Welt denkweise fest . Man sollte sich mal damit auseinandersetzen wo das ganze herkommt.

    • Das ist in C auch so. Daher gibt es ja StrClear()

    • Nicht auf KUKA schimpfen, wenn dass schon Siemens mit der RCM zu verantworten hat. Mir ist schon klar alle Anwender sind immer viel schlauer als die Entwickler. Dennoch sollte man sich erstmal mit der Sprachdefinition auseinander setzen.

    • Im Anhang hab ich mal ein kleines Beispiel, das aus drei Teilen einen String zusammenbaut. Viele weitere Beispiele findest du über die Suchfunktion (Stichwort SWRITE)

    [/list]


    Fubini

    Nur mal so für den Laien: Was ist denn eine IF Schleife :kopfkratz:


    Also ich kenne IF Anweisungen und Schleifen wie z.B. FOR ... ENDFOR, REPEAT ... UNTIL o.ä. Aber was ist dann eine IF-Schleife?

    Hallo,


    ich glaube im Vergleich zwischen V8.2 und V8.3 hat sich nichts geändert. Allerdings im Vergleich zur V5.6:


    $WORKSPACE[1..8].MODE = #OFF, #INSIDE, #OUTSIDE, #INSIDE_STOP, #OUTSIDE_STOP
    #OFF: Arbeitsbereich ist abgeschaltet
    #INSIDE: Ausgang wird gesetzt, wenn TCP oder Flanschmittelpunkt innerhalb des Arbeitsbereiches ist
    #OUTSIDE: Ausgang wird gesetzt, wenn TCP oder Flanschmittelpunkt außerhalb des Arbeitsbereiches ist
    #INSIDE_STOP: Ausgang wird gesetzt, wenn TCP oder Flanschmittelpunkt oder Handwurzelpunkt innerhalb des Arbeitsbereiches ist, eine Meldung wird
    ausgegeben und der Roboter wird gestoppt
    #OUTSIDE_STOP: Ausgang wird gesetzt, wenn TCP oder Flanschmittelpunkt außerhalb des Arbeitsbereiches ist, eine Meldung wird ausgegeben und der
    Roboter wird gestoppt


    Bis einschließlich Release V5.6 wurde immer nur der TCP - und im Falle von INSIDE_STOP zusätzlich der HWP - überwacht.


    Ist kein Tool gültig, so wird der TCP nicht mehr betrachtet, sondern nur der Flanschmittelpunkt und ggf. der Handwurzelpunkt.


    Fubini

    Hallo,


    $DISTANCE: zurückgelegter Weg [mm] seit letztem Genauhaltpunkt. Nur für CP-Bewegungen!)


    $DIST_LAST (Bahnabstand [mm] bis zum Startpunkt der aktuellen Bewegung):
    Diese Systemvariable gibt die Entfernung vom letzten geteachten Punkt an (bei Spline-Blöcken ist das der Startpunkt des Segmentes, in dem wir uns gerade befinden). Ihr Wert ist im Allgemeinen nicht-negativ, im Überschleifbereich kann er aber durchaus negativ sein. Sie ist als Programmierhilfe für Trigger mit ONSTART-Option zu verstehen und steht deshalb nur für CP-Bewegungen zur Verfügung. Bei CP-Splines kann ihr Wert als Weg in [mm] verstanden werden, für PTP-Splines ist der Wert nicht im Sinne einer SI-Einheit interpretierbar.


    $DIST_NEXT (Bahnabstand [mm] bis zum Zielpunkt der aktuellen Bewegung):
    Diese Systemvariable gibt die Entfernung vom nächsten geteachten Punkt an (bei Spline-Blöcken ist das der Zielpunkt des Segmentes, in dem wir uns gerade befinden). Ihr Wert ist im Allgemeinen nicht-negativ, im Überschleifbereich kann er aber durchaus negativ sein. Sie ist als Programmierhilfe für Trigger mit ONSTART-Option zu verstehen und steht deshalb nur für CP-Bewegungen zur Verfügung. Bei CP-Splines kann ihr Wert als Weg in [mm] verstanden werden, für PTP-Splines ist der Wert nicht im Sinne einer SI-Einheit interpretierbar.


    Fubini

    Falls du die Level aus der Authentication.config meinst, dann stehen die direkt drin (einfach mal nach unten scrollen):


    <Name>AutoKrcProgrammer</Name> => Level 10 Defaultanwender
    <UserLevel>10</UserLevel>


    <Name>KrcExpertProgrammer</Name> => Level 20 Experte
    <UserLevel>20</UserLevel>


    ....


    Fubini

    Hallo,


    Zitat

    "Positionsabweichung (Bewegungssteuerung <-> Sicherheitssteuerung)"???


    Mach einfach mal mit aktiver Nutzergruppe "Sicherheitsinbetriebnehmer" das Menü Konfiguration -> Sicherheitssteuerung auf. Dann sollte er eine Abweichung erkennen und die neuen Daten in die Sicherheitsstuerung übernehmen lassen.


    Sollte das direkt auf der Steuerung nicht klappen, musst die RobRoot-Drehung unter WorkVisual konfigurieren und das geänderte Projekt deployen.


    Fubini

    Hallo,


    wenn ich dich richtig verstanden habe ist dein Roboter in $WORLD jetzt um 90° in Achse 1 verdreht montiert. Eine Drehung um die Welt z-Achse kannst du über $ROBROOT.A in der R1/$machine.dat erreichen.


    Fubini

    $MOVE_STATE:


    DECL MOVE_STATE $MOVE_STATE


    mit den Werten (bei aktueller V8.3, bei älteren Releases fehlen vielleicht ein paar Zustände):


    ENUM MOVE_STATE PTP_SINGLE, PTP_AP01, PTP_AP02, LIN_SINGLE, LIN_AP01,LIN_AP02, CIRC_SINGLE, CIRC_AP01, CIRC_AP02, MOVE_EMI_SINGLE, SPLINE_SPL, SPLINE_LIN, SPLINE_CIRC, SPLINE_PTP, SPLINE_UES, SPLINE_UES_PTP, NONE


    Die *_AP01 und *_AP02 geben an ob man vor oder nach Überschleifmitte ist.


    Fubini

    Hallo,


    "Arbeitsraumfehler" hat nicht mit Bereichen a la $WORKSPACE[] zu tun! Arbeitsraumfehler kommt immer dann wenn ein kartesischer Punkt vom Roboter nicht
    angefahren werden kann. D.h. es gibt keine Achswinkel, so dass der Roboter die vorgegebene kart. Position erreichen kann (z.B. weil sie 100 m vom Roboter weg läge). "Arbeitsraumfehler" heißt also die Rücktrafro findet keine Lösung.
    Ich vermute die Programme waren noch inklusive der Zusatzachsen (z.B. einer $ROBROOT-Kinematik, d.h. Roboter steht auf der Zusatzachse, geteacht). Nimmt man dem Roboter dann die Zusatzachse kann er nicht mehr an die Zielposition kommen. Als Abhilfe könntet ihr neue Programme teachen.


    Wie habt ihr die Zusatzachsen deaktiviert? Eigentlich sollte reichen $EX_AX_NUM in der R1/$machine.dat auf Null zu setzen.


    Ich würde mir auch mal die $config.dat anschauen. Eventuell sind hier die Bases als Bases für mathematisch gekoppelte Zusatzachsen, also Bases auf der externen Zusatzachse, hinterlegt. Dann führt jedes Inlineformular im bas.src eine Zuweisung $BASE = EK(...) aus (siehe MACHINE_DEF in $config.dat). Hier mangelt es dann bei der Zuweisung auch wieder der notwendigen Zusatzachse.
    Als Abhilfe könntet ihr dazu die Bases neu anlegen.


    Fubini

    Hallo,


    danke für den Hinweis, dass unsere Steuerung hochentwickelt ist, aber ich bin mir sicher, dass es nicht Sinoid ist, da ein Sinus ja unendlich oft stetig differenzierbar wäre und man sich dann, dass ganze gefiltere ja sparen könnte. Die Ruckbegrenzung wird ja gerade durch die Filterung auf Achsebene erreicht.


    Selbst wenn man das mit heutigen Techniken und mehr Rechenpower auch besser kann (Hier ist übrigens ein Unterschied zum Spline, der nichtmehr so "veraltet" mit Trapezprofilen arbeitet) darf man leider so etwas im Nachinein leider nie wieder ändern, da uns sonst die BMWs, VWs und Daimlers dieser Welt immer lynchen, dass wir uns jetzt anders verhalten als früher. Was übrigens gerade immer wieder beim Spline passiert: Aus der Beobachtung, dass Splinebewegungen sich anders verhalten als der alte Bereich wird immer daraus geschlossen, dass der Spline sich falsch verhält und nicht, dass manche Lösungen von früher äusserst suboptimal waren. Man gewöhnt sich halt schnell an Sachen die eigentlich Mist waren und will die dann bis in alle Ewigkeit so beibehalten.


    Gruß
    Fubini

    Hallo,


    wir sollten hier ein Rampenprofil (genauer ein 3 phasiges-trapezförmiges: konstant Beschleunigen, konstante Geschwindigkeit, konstant Verzögern) haben. Trägt man die Geschwindigkeit über den Weg an entsteht so ein Trapez:
    _______________
    / \
    / \
    / \


    Fubini

    Hallo,


    Zitat

    Selbst wenn sie nicht berechnet wird und durch Anderes als eine Variable begrenzt wird, muss es möglich sein, mit 2,3 m/s² zu beschleunigen wenn 2,3m/s² vorgegeben sind.
    Oder irre ich mich hier?


    Leider ist die Realität nie so einfach wie sie in akademischen Uni-Beispielen vorgegaukelt wird:


    Du vergisst z.B. den Filter. Ohne den Filter würdest du Knicke im Geschwindigkeitsprofil haben, was eine reale Mechanik nicht verträgt (unendlicher Beschleunigungssprung beim Übergang aus konstanter Beschleunigung in konstante Geschwindigkeit oder konstante Verzögerung, fehlende Ruckbegrenzung). Du hast aufgrund der Trapezprofilplanung über s=0.5*a*t^2 ja nur ein einmal stetig differenzierbares Geschwindigkeitsprofil. Man muss aber mindestens C2 sein. Daher werden bei KUKA die Sollachspositionen noch bevor sie an die Antriebe kommandiert werden durch einen Mittelwertfilter der Länge $Filter modifiziert. So ein Filter wirkt quadratisch auf die Beschleunigung. Also vor Filterung hat die Steuerung tatsächlich ein Trapezprofil, dass über s=0.5*a*t^2 definiert ist, geplant. Nach Filter kommt aber ein Profil mit weniger Beschleunigung raus.


    Ferner müssen die Profile für kartesische Geschwindigkeit und Orientierung noch synchronisiert werden. Hier gilt es zwei Arten zu Unterscheiden:


    1) zeitsynchron: alle Komponenten starten gleichzeitig und Beenden ihre Bewegung auch wieder gleichzeitig
    2) phasensynchron: alle Beschleunigungs- und Verzögerungsphasen über alle Komponenten starten zu den gleichen Zeitpunkten


    Erst wenn diese beiden Arten der Synchronität für ein Geschwindigkeitsprofil erfüllt sind, wird die gefahrenen Bahn unabhängig von den programmierten Profildaten.


    Ferner hat die KUKA-Steuerung noch Mechanismen die z.B. Anregungen von Schwingungen des Roboters in dessen Eigenfrequeenzbereich verhindern sollen. Hier werden die Vorschübe an die Antriebstechnik noch nachträglich in Abhängigkeit von Lastdaten über das Dynamikmodell modifiziert.


    Ferner: Ist man in der Nähe von Singularitäten würde auch langsamere Beschleunigungen rauskommen, da die Steuerung dann zusätzlich auf maximale Achsgeschwindigkeiten begrenzen muss um ein Durchfahren von Singularitäten zu ermögliche (siehe $CP_VEL_TYPE)


    ....


    ICh könnte jetzt hier noch viele andere Fälle aufzählen die Einfluss haben auf das beobachtete Ergebnis, aber ich glaube es wird klar, dass die Welt manchmal nicht so einfach ist.


    Als Einführungsbuch in alle diese Thematiken könnte ich John J.Craigs: Introduction to Robotics: Mechanics and Control (3rd Edition) empfehlen. Es gibt aber sicher noch viele anderer Einsteigerbücher.


    Fubini