Application KRC SETMULTIVAR

  • 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

    Einmal editiert, zuletzt von Har-ry ()

  • Schritt für Schritt zum Roboterprofi!
  • 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

  • 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

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