Beiträge von nbuhl

    Hallo Zusammen!

    Danke für Eure Antworten und entschuldigt bitte mein späte Rückmeldung. Ich hatte Kurzarbeit.


    @Gerhhard, ja, ich glaube das MUSS sogar so sein. ;)


    @TeamRosario: Ich bin in der Tat auch schon auf diese Variable gestoßen. Ich hatte es mit dem Wert $FILE_MAXSEC=-256 ausprobiert. Leider ohne Erfolg.


    Ich habe das ganze Thema nun einem Ansprechpartner bei FANUC gemeldet und hoffe auf eine Rückmeldung. Ich werde sie dann gerne hier teilen, sofern sie fruchtbar ist.

    Grüße!


    nico

    Hallo Zusammen!

    Ich übertrage über die Socket MSG Funktion berechnete Koordinaten auf den Controller (R-30iB). Der Controller ist dabei der Server. Dort werden die Daten von einem KAREL Skript als eine einzelne ununterbrochene Zeichenkette empfangen. Das funktioniert auch wunderbar. Wenn ich allerdings die Länge des Strings (genauer genommen ist es ja eine byteweise Übertragung) vergrößere steigt der Controller irgendwann mit einer Statusmeldung 2051 (nicht initialisierte Variable "tmp_str") aus. Die einzulesenen Bytes frage ich vorher mit BYTES_AHEAD ab und lese sie auch bytegenau ein. Das Ergebnis von BYTES_AHEAD erhalte ich korrekt.


    Der Witz ist allerdings, dass der Fehler im RoboGuide nicht auftritt. Dort funktioniert das ganze auch mit langen Strings wunderbar.


    Die Stringlänge bei der der Controller aussteigt liegt irgendwo zw. 126 und 140 Zeichen.


    Hatte jemand von Euch schon einmal dieses Problem und hat eine Lösung gefunden? Ich würde ungern die Übertragung in zwei Teile aufteilen müssen.


    Hier noch ein Codeschnippsel in dem der Fehler auftritt:


    Code
    WRITE('Reading...',CR)
    BYTES_AHEAD(file_var, entry, status)
    WRITE(' Bytes reading: ', entry, CR)
    READ file_var (tmp_str::entry)
    status = IO_STATUS(file_var)
    WRITE(' file_var_status: ', status, CR)
    WRITE(' Read: ', tmp_str, CR)

    Die Ausgabe auf dem TP als Handybild...


    Ich hoffe auf Eure Hilfe! ;)

    Grüße!


    nico

    Hallo Hermann,

    danke für Deine Antwort. Ich hatte total übersehen, dass ich ein PR ja wie ein 2-dimensionales Array im TP ansprechen kann. =O


    Dank Deines Winks habe ich es nun hinbekommen. Hier mein Code.

    Code
    PR[4]=PR[3]-JPOS
    PR[4,6]=0
    J PR[4] 100% FINE INC

    In PR[3] habe ich in Joint-Angaben die Zielposition angegeben die zum Freifahren angefahren werden soll (für alle Bauteile gleich). In PR[4] wird dann die Differenz zwischen aktuelle Position (je nach Bauteil unterschiedlich) und Zielposition ermittelt. Durch PR[4,6]=0 "fixiere" ich das Handgelenk. Anschließend fahre ich die Position als Inkrement an.

    Danke nochmals!


    nico

    Hallo Zusammen!

    Besteht in einem TP die Möglichkeit innerhalb einer Joint-Bewegungsansweisung (absolut) eine einzelne Achse nicht zu verfahren? :/ Ein Beispiel, für die Achsen J1-J5 möchte ich einen Absolutwert angeben. Die J6 Achse soll aber in der ursprünglichen Position einfach stehen bleiben. Ich kann leider nicht mit inkrementeller Anweisung arbeiten, da der Ausgangspunkt immer ein anderer sein kann.

    Hintergrund ist, dass ich für eine hohe Teilevielfalt erst das gegriffene Bauteil freifahren möchte bevor ich es weiter händele. Dazu definiere ich eine Zielposition für die Achsen J1-J5 in denen alle Bauteile des Bauteilspektrums freigefahren sein werden.


    Für Eure Antwort im Voraus besten Dank!


    nico

    Kurze Wasserstandsmeldung für Interessierte...

    Ich habe die XYZ Verschiebung in Karel hinbekommen. War ziemliches Try&Error weil ich aus der Karel Reference nicht so recht schlau wurde. Auf jeden Fall sind "Relative Position" und die "INV" Funktion hier hilfreich.

    Code
    AEnd_Diff = INV(no_tool_WORLD) : AEnd_WORLD
    
    --AEnd_WORLD -- Bauteilende in XYZWPR
    --no_tool_WORLD -- mech. Schnittstelle (Handgelenk) in XYZWPR
    --AEnd_Diff -- Differenz der beiden "Positionen" in POSITION

    Ich habe das ganze auch in einer Koordinatentransformation in Octave hinbekommen, aber so ist es natürlich eleganter.

    Grüße!


    nico

    Hallo Zusammen!

    Ich bin zwar schon langer stiller Mitleser in diesem Forum gewesen und habe in meiner jungen Roboterkarriere auch schon so manchen Trick und Hinweis hier absaugen können. Vielen Dank im Nachhinein dafür! ;)

    Meine aktuelle Herausforderung hat mich dann aber veranlasst mich endlich einmal anzumelden. Hier bin ich also, ein Middreißiger, Maschinenbauer und Roboterneuling.


    Um nun aber zu meinem Anliegen zu kommen:

    Wir untersuchen in einem Laboraufbau die Aufnahme von Bauteilen hoher Geometrievielfalt. Dabei möchten wir aus Kostengründen auf Sensoren und Warenträger verzichten. Wir arbeiten also über eine Art Anschlag, an die das Bauteil angelegt wird und so alle 6 Freiheitsgrade gehemmt werden. Anschließend berechnen wir in Octave durch Koordinatentransformation die möglichen Greifpunkte im World-KOS in Abhängigkeit zur Anschlagposition. Der Greifpunkt wird dann per SocketMSG an den Controler geschickt und dort mit einem kleinen Karel-Script abgefischt und über ein PR dem TP-Programm übergeben. Das ganze funktioniert erstaunlich gut und auch die Absolutgenauigkeit des Roboters und die Bauteiltoleranzen machen uns da keinen Strich durch die Rechnung.


    Nun würde ich jedoch gerne den TCP vom berechneten Greifpunkt an das Bauteilende verschieben. XYZWPR des Bauteilendes im World-KOS kenne ich durch den Anschlag. XYZWPR des Greifpunktes kenne ich auch und LPOS des Roboters ist ja auch bekannt, da er den Greifpunkt anfährt. Nun meine Frage. Kann ich ohne weitere externe Koordinatentransformation, unmittelbar bevor der Greifer schließt den TCP verschieben?


    Der TCP wird ja in Bezug auf die mechanische Schnittstelle definiert und nicht im World-KOS. Aber irgendwie muss das doch innerhalb des Controllers zu lösen sein. Gerne auch als Karel-Skript. Aber leider sehe ich hier gerade den Wald vor lauter Bäumen nicht. ;)


    Was wäre hier grundsätzlich sinnvoller? Ein Tool Offset oder ein neues utool? Ich möchte das Bauteilende in eine Bearbeitungmaschine einführen und wenn der TCP im Bauteilende liegt fällt mir das weitere Programmieren leichter.

    Für Eure Antwort besten Dank im Voraus!


    nico