Beiträge von Har-ry

    Cross 3 ist mir jetzt nicht so ein gelaeufer Begriff. Aber ich glaube du meinst die Kommunikation ueber das "Joblist Manager Socket Interface".
    Damit kann man auf Systemvariablen und auch auf globale Variablen von Programmen auf dem KRC zu greifen. Du findest ein paar Informationen in der Dokumentation im Anhang.


    Daneben koennte dieser Post noch interessant sein:
    http://www.roboterforum.de/rob….0.html;msg35563#msg35563


    Gruß Harry

    Fuer alle, die an einer Lösung interessiert sind.


    Hier ist die Lösung fuer mein Problem:
    1. Große Strukturen sollten in !einer SetVar-Anweisung verschickt werden. Noch besser: Ganze Arrays in einer SetVar-Anweisung, wenn der XML-String hierdruch nicht größer als 4096 Byte wird.
    2. Nach jedem Versendeten XML-Telegramm muss auf ein Reply-Telegramm gewartet werden und das Attribut "Result" muss TRUE sein. Bei Uebereinstimmung kann das naechste Telegramm verschickt werden, bei FALSE ist was schief gegangen und das Telegramm muss erneut versendet werden.


    Hier ein Beispiel:
    In $CONFIG.DAT ganz unten bei User declarations:\
    STRUC STRUCTYP INT type, REAL value, E6POS pos1, pos2


    In MeinProgramm.dat globale Deklaration meines Arrays:
    GLOBAL STRUCTYP MeinArray[128] // bei der obrigen Structur maximal 247 Felder


    In Host zu erzeugender XML-string:
    <SetVar VarName="MeinArray[1]" VarValue="{STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0.0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} }" />


    Wenn ihr ein ganzes Array in einem Mal setzen wollt geht dies so:
    <SetVar VarName="MeinArray[]" VarValue="
    {STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} } {STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} } {STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} } {STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} } {STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} } {STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} } {STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} } {STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} } {STRUCTYP: type 1,value 5, pos1 {E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0}, pos2{E6POS: X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0, E1 0..., E6 0, S 0, T 0} }
    " />


    Die maximale Arraygröße sollte dabei bei Rund 15 Feldern liegen. Habe ich nicht probiert, muesst ihr testen.


    Gruß Harry

    Oh, super! Dann weiß ich das!


    Wie ist es denn mit selbst definierten Structuren?


    Beispiel:


    STRUC BEISPIEL INT int1, REAL real1, E6POS pos1, pos2


    INT = 4 byte
    REAL = 4 byte
    2xE6POS = 2x60 = 120 byte
    OVERHEAD = 4 byte ???
    ---------------------------------
    Total = 132 bytes ???


    Wenn ich aber diese Struktur in einem Array benutze, kann ich maximal 247 elemente benutzen.
    132 bytes x 247 = 32604 bytes


    Kann das sein?
    Habe weiter oben gelesen, dass eine Variable maximal 32768 bytes groß sein darf und davon nur 27936 bytes fuer Daten verwendet werden duerfen.
    Was ist nun falsch?
    Meine Rechnung fuer mein STRUC oder das nur 27937 bytes von den 32 kb benutzt werden duerfen?


    Grueße vom Harry

    Hallo MOM!


    Mich wuerde mal interessieren wie du auf 28 Bytes bei einem Frame kommst?
    In der Rechnung, die du noch einmal korrigiert hast, sagst du was von 7x4 Bytes = 28 Bytes. Aber warum 7x4 Bytes und nicht 6x4 Bytes? Angesicht, dass doch ein FRAME aus 6 REALs besteht.


    Hmm... ich wuerde jetzt einfach mal vermuten, dass der Rahmen jeder Struktur nochmal 4 Bytes in anspruch nimmt.
    Aber warum dann in einer E6POS 4x 4 Bytes overhead?


    Und stimmt es, dass ein REAL sowie ein INT je 4 Bytes groß sind?


    Demnach waere nach meiner Logik eine E6POS = 60 Bytes groß:
    X, Y, Z, A, B, C (6x REAL) = 6x4 Bytes
    E1, E2, E3, E4, E5, E6 (6x REAL) = 6x4 Bytes
    S, T (2x INT) = 2x4 Bytes
    E6POS-Gerüst = 4 Bytes


    Wenn ich falsch liege, bitte belehrt mich eines Besseren!
    Vielen Dank schon mal!


    Gruß Harry

    So, ich habe noch mal etwas herum experimentiert.


    Die größe scheint nicht das Problem zu sein. Denn normalerweise passen 1800 Zeichen ohne Probleme in einen Buffer von 4096 byte.


    Das Problem scheint in der Geschwindigkeit des KRC zu liegen.
    Denn wenn der Buffer nicht schnell genug ausgelesen werden kann, laeuft er natuerlich frueher oder spaeter voll.


    Darum habe ich in mein Programm ein Timeout von 750 ms nach jedem verschickten Telegramm implementiert.
    So funktioniert es wunderbar. Jedoch sehr langsam. Bei kleineren Timeouts gehts wieder schief.


    750 ms Timeout fuer die Verarbeitung fuer einen 1800 Zeichen langen string scheint mir sehr lang. Selbst der langsame KRC2 sollte das doch schneller hinbekommen?


    Hat jemand eine Idee, den Vorgang zu beschleunigen?


    Gruß Harry

    Hallo,
    Ich muss fuer meine Firma einen KUKA KR5 SIXX R650 Programmieren. Unser Controller ist der KRC 2 sr.
    Ich kommuniziere mit meinem C#-Programm mit dem "Joblist Manger Socket Interface".


    Hierzu verschicke ich XML-Telegramme um JOBTYP C2R_jobList[128] zu fuellen.
    JOBTYP ist eine Struktur und ist wie folgt in der $CONFIG.DAT definiert:

    Code
    STRUC JOBTYP INT type, REAL value, E6POS pos1, pos2


    C2R_jobList ist in der .DAT-File meines KRL-Programms global deklariert und in der .SRC-File sind alle Variabeln der 128 Felder mit 0 initialisiert.


    Ein Telegram sieht so aus:


    Erst habe ich probiert alle 128 Felder (1-128) mit einem Telegramm zu fuellen. Jedoch konnte ich lediglich die ersten 2 Felder fuellen.
    Danach habe ich probiert, jedes Feld mit einem eigenen Telegramm (wie oben angegeben) zu fuellen. Jedoch funktionert dies nicht zuverlaessig. Absolut zufaellig kann das Telegramm verschickt werden oder auch nicht. Wenn es nicht funktioniert bekomme ich eine Message zurueck, dass das XML-Telegramm nicht gueltig sei.


    Ich vermute irgendwie, dass der Buffer im KRC voll laeuft. Jedoch darf laut Doku ein Telegramm 4096 byte groß sein. Mein Telegramm beinhaltet jedoch nur rund 1700 Zeichen.


    Hat jemand eine Erklaerung und vielleicht auch eine Loesung fuer dieses Problem?


    Vielen Dank schon mal fuer eure Antworten!


    Gruß Harry

    Ok, das beantwortet meine 1. Frage!
    Dann werde ich auch mit dem 6-achsigen Roboter E6POS benutzen.


    Vielen Dank fuer die Antwort!

    Hallo,
    Ich bin seid ein paar Wochen dabei mich in KRL einzuarbeiten.
    Ich muss hier in der Firma ein C#-Programm schreiben, dass einen KUKA KR5 R650 mit 6 Achsen ansteuert. Im Septemper soll der KR5 dann gegen einen LBR4 mit 7 Achsen ausgetauscht werden.


    Das Programm ermittelt mit einer 3D-Kamera eine Position. Daraufhin muss sich der Robot mit seinem Greifer dorthin bewegen.


    Meine Frage nun: Benötigt der LBR4 mit 7 Achesen E6POS Positionen oder funktioniert das Anfahren von Punkten genauso wie bei dem 6-achsigen KR5 mit POS bzw. bei Folgebewegungen mit FRAME?


    Oh noch eine Frage:
    Ich deklariere in PROGRAM.DAT eine globale INT-Variabel.


    DECL GLOBAL INT status = 0


    In der SocketFilter.ini gebe ich meinem Host Lese-Rechte fuer diese Variabele.


    Im Stillstand kann ich diese Variabele jeder Zeit mit folgendem XML-Telegram lesen:


    <?xml version="1.0" encoding="UTF-8" standalone="no"?><ShowVar VarName="status" />


    1. Funktioniert dies auch, wenn der Robot eine Bewegung ausfuehrt?
    2. Funktioniert dies auch, wenn im KRC ein Timer ablaeuft?


    Konnte dies leider bis jetzt noch nicht testen.
    Jedoch sind diese Frage fuer meine Planung von hoher Bedeutung!


    Ich hoffe ihr koennt mir weiterhelfen.


    Gruß Harry

    Hallo Robotfans!
    Ich befinde mich in der gleich Position wie Happyman0815.
    Soll fuer meine Firma auch einen KUKA-robot uebers Netzwerk mit Koordinaten versorgen.


    Leider wurde uns ebenfalls nicht das Demoprogramm von KUKA zu gesendet.
    Waere jemand so freundlich via PN mit mir Kontakt auf zu nehmen? Dann gebe ich meine eMail.


    Gruss Harry