Beiträge von student

    Hi


    der eingelesene Punkt e6PosValues[3] wird von keiner der beiden PTP Bewgungen verwendet. Anscheinend habe ich das ein bissel blöd aufgeschrieben...


    Der Roboter soll eine überschliffene PTP fahren:
    >>Startpunkt/Home - e6PosValues[1] - e6PosValues[2]<<, wobei der Zwischenpunkt 'e6PosValues[1]' überschliffen werden soll. Während der Fahrt soll der Roboter noch einen weiteren (erst in der Zukunft vewendeten) Punkt auslesen/empfangen. Dieser Punkt (e6PosValues[3]) hant nichts mit der aktuellen PTP Bewegung zu tun und dennoch wird die Bewegung nicht mehr überschliffen soblad der neue Wert nach 0.4 sekunden geschickt wird. :huh:


    Gruss

    Ich will das Thema noch mal aufgreifen - hab die letzten Tage relativ viel Zeit mit EKX verblödelt und auf etwas seltsames gestossen:


    ich habe einen externen sensor definiert, dessen xml Struktur nur einen Parameter enthält:

    Code
    <Elements>
      <Element Tag="Sensor2Robot" Type="STRUCTTAG" Stacksize="10" />
       <Element Tag="Sensor2Robot.YPos" Type="REAL" Stacksize="10" />
    </Elements>


    Sendet der Sensor nun 3 Werte an den Roboter (psdeudo code)

    Code
    Sensor.send(YPos = 1000)
    Sensor.send(YPos = 2000)
    Sensor.send(YPos = 3000)


    und der wertet das folgendermassen aus:


    fährt der Roboter eine überschliffene PTP Bewegung vom Startpunkt über 'e6PosValues[1]' nach 'e6PosValues[2]' und holt sich einen NEUEN Wert für e6PosValues[3]


    Wenn ich jedoch eine Pause(0.4) Sekunden in meinem Sensor einbaue:

    Code
    Sensor.send(YPos = 1000)
    Sensor.send(YPos = 2000)
    Pause(0.4)
    Sensor.send(YPos = 3000)


    Dann wird die PTP Bewegung vom Startpunkt - 'e6PosValues[1]' - 'e6PosValues[2]' nicht mehr überschliffen - warum?
    :nocheck:


    Bei einer Pause von 0.35 klappts wieder - die die Pause ist jetzt nur zum testen, später soll wie schon im ersten Post erläutert eine 'online-Berechnung' der Punkte durchgeführt werden, wodurch es zu einem Verzug beim Datenversand kommen wird....


    Hat jemand eine idee?
    Gruss

    Hallo,
    ich habe ein paar Fragen zur Handsingularität (beim KR16, KL250-2, OL 5.5)
    Jedes mal wenn der Roboter durch die mechanische Nullstellung fährt tritt die Handachsensingularität auf und die 4. und 6. Achse drehen sich unnötig stark. Das Thema wurde hier schön öfters mal angerissen, doch eine richtige Lösung hab ich nicht gefunden...


    Relativ einfach wäre es mit einem abgewinkelten Tool zu arbeiten, um in Achse 5 mit einem Offset zu arbeiten. Mich interessiert aber eher eine programmative Lösung.


    Im Forum bin ich auf die Variable :"$SINGUL_POS[3] - Verhalten von Achse 4 im Fall einer Handachsen--Singularität" gestoßen. Der Befehl hat 2 Optionen:
    $SINGUL_POS[3] = 0 Der Winkel der Achse 4 wird auf “0” Grad festgelegt.
    $SINGUL_POS[3] = 1 Der Winkel der Achse 4 bleibt vom Start-- bis zum Zielpunkt gleich.
    Ich hab das mal ausprobiert - funktioniert nicht! (Siehe Videos)


    Des weiteren gibt es eine Datei "KUE_WEG.src", die die Status und Turn werte von den Zielkoordinaten enstprechend anpassen soll. Doch leider funktioniert die Funktion auch nicht.


    Als ausgabe bei der Abarbeitung von KUE_WEG erhalte ich "Nicht alle Komponenten des Zielpunktes progr. ". Der Fehler ensteht bei der Berechnung des Zielpunktes über INVERSE. Wie kann dass sein - viel einfacher gehts doch kaum noch...
    Hat jemand ein Beispiel zur Anwendung von KUE_WEG?
    Die Version von KUE_WEG.src ist: VERSION 1.9, 25.09.00. Gibt es da schon etwas neueres?


    Gruss

    Hi, danke für die Antwort
    Aber so wollte ich es nun gerade nicht machen - der Roboter soll/muss sich gleich mit den empfangenen Daten mitbewegen.
    Am Flansch hängt ne Kamera die über eine Bildverarbeitung neue Zielkoordinaten (von sich selbst = roboterTCP) berechnet.


    Gruss

    Hallo,
    ich benutze OL 5.5 mit Ethernet KRLXML 1.1 zur (bis jetzt rein simulativen) Steurerung eines KR16.


    Bei der geplanten Zielapplikation des Roboters ist die abzufahrende Bahn im Voraus nicht bekannt. Eine übergeordneter (Leit-)rechner berechnet live die neuen Zielkoordinaten. Dabei hat der Rechner einen geringen Vorlauf gegenüber dem Roboter - es sind immer 2 - 3 Positionsdaten in der "Zukunft" bekannt.


    Die Kommunikation zwischen dem Leitrechner und Roboter erfolgt über KRL XML. Bis jetzt hab ich nur eine Stop-Motion Bewegung hinbekommen. Es läuft eine Schleife in der sich der Roboter die neuen Zielkoordinaten aus der empfangenen XML Struktur holt und diese dann in einer normalen PTP abfährt.


    Eine flüssige Bewegung ohne XML funktioniert:


    Der KR16 (auf eine Linearschine) fährt 10m und führt den TCP entlang einer Sinus Kurve..


    Wenn ich das gleiche über KRLXML versuche ist es leider eine Stop Motion Bewegung


    Ist es überhaupt möglich den Robter mittels TCP empfangenen Koordinaten entlang einer überschliffenen Bahn zu bewegen?


    Gruss

    Hi
    Danke für die Antwort, auch wenn ich den code nicht so richtig verstanden habe... :denk:


    Demnach kann man Messages nur über ein WHILE Konstrukt ausgeben?
    Das WAIT SEC funktioniert nicht zuverlässig.


    Ich hab den Code mal bei mir eingefügt ($Timer[1] anstatt Timer[1] - oder?]:

    Code
    $MSG_T.VALID = TRUE
    $Timer_Stop[1] = FALSE
    $Timer[1] = -10000
    WHILE $MSG_T.VALID OR NOT($TIMER_FLAG[1])
    ENDWHILE


    Das Programm wartet jetzt 10 Sekunden in der While Schleife - aber warum "$TIMER[1] = -10000"?
    Ich habs mal mit - 1 ausprobiert irgendwie geht das nur 1 mal - danch (erneutes Starten des Programms) bleibt er immer in der Schleife hängen... total komisch! Muss ich da noch was löschen oder zurücksetzen?


    Gruss

    Hallo
    Ich benutze KRL XML und um meinen Programmablauf besser mitverfolgen zu können gebe ich einige Messages im Meldungsfenster aus. Die Nachrichten erzeuge ich wie in der MSG_DEMO.src beschreiben: z.B.:


    Kann man Nachrichten auch ohne den WAIT Befehl ausgeben? Wenn ich den weg lasse (oder die Zeit auf 0.1 Sekunden setze)wird die Nachricht nicht angezeigt... Ich finde es eher "unschön", dass mein Programm für die Ausgabe einer Nachricht warten muss!


    Des weiteren würde mich interessieren wie man die Ausgabe von (einzelnen) Systemhinweisen unterdrücken kann. Z.B. lasse ich OfficeLite bei der Intitialiserung des Kommunikationskanals für krlxml in einer Warteschleife laufen - die schmeisst mir dadurch sehr viel Hinweismeldungen(so lange bis die Verbindung hersgestellt wird).

    Code
    errint = -100
    sensorname[]="mySensor"  
    WHILE errint == -100
      errint = EKX_open(sensorname[])
      ;EKX_handleerror(errint)
    ENDWHILE


    erzeugt die Hinweismeldung:
    Nr: 1029, Meldung: "SEN: Could not open Channel "mySensor"


    Hat jemand ne idee?
    Gruss

    Hi
    @robotinix
    Öhm - kann ich dir gar nicht so richtig beantworten...
    Bin ziemlicher Neueinsteiger - habe hier mit OL 5.5 angefangen.
    Auf jeden fall wollte KUKA die MAC adresse meines Rechners und hat mir daraus ein license.lic generiert, die der KrcVrcMagr bei der Installation haben wollte.
    Das war doch aber bei der 5.2 auch so?


    Loipe

    Zitat

    kannst dir auch nen Ordner freigeben und den selber einbinden dann taucht der im OL navigator als eigenes Laufwerk auf und du musst net durch aufwendige Ordnerstrukturen klicken.


    Coole Sache! Gibt noch einen anderen Weg der zum gleichen Ziel führt - man kann einen lokalen Pfad als virtuelles Laufwerk mounten...
    http://en.wikipedia.org/wiki/Subst


    Gruss

    Hallo,
    ich arbeite seit einigen Tagen mit KRL XML. Die Prinzipielle Funktionsweise habe ich im Grossen und Ganzen verstanden. Die ersten kleine Programme funktionieren auch (eigenen Sensor definiert, steuern des Roboters über c# Applikation etc.). Dennoch habe ich ein paar grundsätzliche Fragen zurThematik....


    Als Beispiel verwende ich z.B. folgenden Sensor: "MySimpleSensor.xml"

    Code
    <Elements>
      <Element Tag="Sensor2Robot" Type="STRUCTTAG" Stacksize="100" />
       <Element Tag="Sensor2Robot.XPos" Type="REAL" Stacksize="100" />
    </Elements>


    Das öffnen des Kommunikationskanals würde dann so aussehen (KRL Prog wartet auf das "accept" vom Server-Socket)

    Code
    errint = -100
      sensorname[]="MySimpleSensor"  
      WHILE errint == -100
        errint = EKX_open(sensorname[])
        ;EKX_handleerror(errint)
      ENDWHILE


    Der Aufbau der Datensätze folgt entsprechend:

    Code
    ; send structure
      sendtext[1].s[] = "<Robot2Sensor>"
      sendtext[2].s[] = " <XPos>1</XPos>"
      sendtext[3].s[] = "</Robot2Sensor>"
    
      ; receive structure
      rectext[1].s[] = "MySimpleSensor.Sensor2Robot.XPos"
      rectext[2].s[] = "MySimpleSensor.Sensor2Robot"



    So - nun zu den eigentlichen Fragen...


    --------------------------------------


    Das warten auf neue Sensordaten erfolgt beispielsweise über

    Code
    errbl = EKX_WaitForSensorData(1, rectext[2].s[], 1000)

    Gibt es eine möglichkeit permanent ankommende Daten mitzuloggen/in den Puffer zu speichern? Also beispielsweise der Roboter macht eine PTP bewegung und währenddessen empfängt er weiterhin daten vom Server? (multithreading)


    --------------------------------------


    So wie ich das Handbuch verstanden werden ankommende xml strings sofort geparst und die werte in die einzelnen Puffer verteilt. In meinem Fall habe ich hier nur einen Puffer der so heissen müsste: "MySimpleSensor.Sensor2Robot.XPos". Kann ich mir den Inhalt des Puffers irgendwie anzeigen lassen? Z.B. über <Anzeige><Variable><Einzeln> und dann den Namen eintippen?
    Bisher bekomme ich das nur über den Umweg über die Zugriffsfunktionen hin - also z.B. so:


    Alle Werte des Puffers stehen jetzt in dem Array "myRealValues"...


    -------------------------------------


    Kann man den Pufferinhalt löschen?
    Beispielsweise sende emfpängt der Roboter nacheinander 2 xml strings: (pseudo code)

    Code
    EKX_WaitForSensorData(1, rectext[2].s[], 100)
    SERVER-> "<Data2Robot><XPos>1</XPos></Data2Robot>"
    EKX_WaitForSensorData(1, rectext[2].s[], 100)
    Server-> "<Data2Robot><XPos>2</XPos></Data2Robot>"


    Im Puffer stehen jetzt:
    "1"
    "2"
    Daten werden ausgewertet z.B suche ich das aktuellste Element:

    Code
    errbl = EKX_GetRealElement(1, rectext[1].s[], myRealValue, isNew)


    Liefert: myRealValue = 2


    An der stelle würde ich den Pufferinhalt irgendwie löschen wollen. Weil wenn der Server jetzt nochmals 2 xml strings schickt (z.B. ..XPos>3</XPos.. und ..XPos>4</XPos...) und ich jetzt beispielsweise nach dem "nächsten" Element suche:

    Code
    errbl = EKX_GetRealElement(1, rectext[1].s[], myRealValue, isNew)


    Liefert das eine "1" und nicht die "3"


    ----------------------------------


    Bei meinem ganzen Rumprobieren mit der Funktion "EKX_WaitForSensorData(INT, CHAR[], INT)" konnte ich keine Auswirkungen des ersten Parameters feststellen. Ob ich den Wert des Parameters auf "0" oder "1" setzte zeigt keine Wirkung.
    Anders bei den Zugriffsfunktionen (getRealElement etc. - da passt das)
    Hat der Parameter von WaitForSensorData eine Funktion?


    Soo - ne ganze menge Text - vllt hat ja jemand ne freie Minute...
    Gruss

    Hallo
    meine Roboterprogrammierung gestaltet sich bisher rein simulativ - OfficeLite 5.5 und KukaSim 2.0.


    Die Programmierung in OL ist... sagen wir mal nicht gerade die benutzerfreundlichste. Daher benutze ich zum schreiben des codes UltraEdit mit dem hier im Forum geposteten textfile (code highlighting, code folding etc.)


    Mein Problem besteht nun darin den neuen geänderten code in OL zu bringen - ich muss OL jedes mal neu staren, damit OL die Änderungen in den src und dat files "mitbekommt". Bisher habe ich dafür die src files im OL-Editor nachträglich geöffnet und eine pseudo Änderung vorgemommen (Leerzeichen am Zeilenende eingefügt etc. ) und dann gespeichert. Diese Methode funktioniert jedoch nicht zuverlässig - manchmal werden die Änderungen erkannt(und übernommen) und manchmal nicht.
    Das schlimme an dieser Stelle ist, dass OL den geänderten code IMMER anzeigt - ihn aber zum Teil nicht ausführt :angry:


    Ich suche also ein workaround um parallel mit UltraEdit den code zu editieren und ihn ohne OL dauernd neuzustarten auch ausführen (quasi auf knopfdruck neu kompiliieren oder was auch im hintergrund von OL passiert).


    gruss

    Hallo ,


    christiankr
    zu 2.)
    Mit welchem Befehl erfolgt die Bewegung? Kann mir das nur erklären wenn Werkzeug bei der Bewegung nicht richtig gewählt wurde.


    Die Zuweisung des Werkzeugs in OL funktioniert ohne Probleme. Meine Frage bezog sich (nur) auf Kuka Sim - beim teachen des Roboters in Kuka Sim arbeitet der Roboter nur mit dem Flansch Koordinatensystem. Prinzipiell stört mich das nicht so sehr, weil ich diese Funktion sowieso nicht oft benutzen werde. Ich hatte die Frage eigentlich in Vorbetreitung auf die nächste Frage gestellt (trace). Zum zeichnen des Pfades sollte er ja das Tool Koordinatensystem verwenden und nicht das des Flansches.


    Zur Trace Funktion wollte ich noch hinzufügen dass es auch mit in Kuka Sim geteachten Abläufen nicht funktioniert. Hab ich noch nicht geblickt wie das funktionieren soll....

    Hallo,
    ich gem mal davon aus, dass dein tool bereits existiert. Die aktuellen/bekannten Tools kann man sich unter Konfiguration->Werkzeugdefinition->Werkzeugtyp anzeigen lassen


    Zuweisung eines Tools:
    $TOOL = TOOL_DATA[1]


    zusätzlich gebe ich immer noch an:
    $BASE = BASE_DATA[1]
    ich habe kein eigenes BASE Koordinatensystem definiert - müsste defaultmässig im Roboterfuss liegen...
    (die zeile könnte man sich wahrscheinlich auch sparen)


    und dann


    LIN_REL{X 300.0}


    gruss

    Hallo,
    ich habe die Aufgabe einen KR16 auf einer Linearschine (KL 250-2) zu programmieren. Die Programmierung erfolgt über Office Lite 5.5 und Kuka Sim Pro 2.0 (als feedback).
    Ich habe die Zelle in Kuka Sim Pro nachgebaut und kann den Roboter über OL darin bewegen...
    Nun zu meinen eigentlichen Problem(en):
    1. Ich möchte in der Zelle eine Wand / Fläche (2x10m in Kuka Sim) mit einer Textur belegen - habe allerdings keine Ahnung wie ich damit anfangen soll. Das VisualComponents Handbuch habe ich bereits gelesen - wirklich viel zu Texturen steht da leider nicht drin, bzw. ich kann mit der kurzen Sektion nichts anfangen. Hat jemand so was in der Richtung gemacht - oder hat vllt. ein demo file?
    Der Kuka Support war in Sachen Textur nich wirklich Hilfreich - es wär angeblich zu kompliziert das am Telefon zu erklären...


    2. Am Roboter ist eine Kamera befestigt - ich habe das Tool bereits nachbebaut (über einfache Primitive) und ein paar Koordinatensysteme definiert. Doch beim "montieren" der Kamera am Roboterflansch bleibt das TCP Koordinatensystem im Roboterflansch und wandert nicht and das definerite Koordinatensystem meines Tools. Dies wird vor allem beim Teachen des Roboters in Kuka Sim deutlich - die eingeteachten Punkte sind die des Roboterflansches... (siehe Anhang)


    3. Obowohl "Toggle Trace" eingeschaltet ist wird der abgefahrene Pfad nicht angezeigt. Da der Roboter in Kuka Sim fast ausschließlich über OL gesteuert wird (werden soll) möchte ich den Pfad anzeigen der während des abfahrens eines KRL Programms entsteht. Wie kann man den Pfad in Kuka Sim anzeigen (beim Teachen in Kuka Sim und beim Ablauf von KRL Programmen)?