Roboterforum Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
08. Februar 2012, 15:41:07
Übersicht Hilfe Suche Kalender Einloggen Registrieren
News: >> Roboterprogrammierer gesucht !? <<

Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  KUKA Roboter (Moderatoren: Werner Hampel, stefanM, IrrerPolterer)  |  Thema: Application KRC SETMULTIVAR 0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Application KRC SETMULTIVAR  (Gelesen 713 mal)
Har-ry
Neuling
*
Offline Offline

Beiträge: 9


« am: 03. Juni 2010, 15:28:25 »

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:
Code:
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>
<SetMultiVar>
        <SetVar VarName="C2R_jobList[n].type" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].value" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.X" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.Y" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.Z" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.A" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.B" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.C" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.E1" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.E2" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.E3" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.E4" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.E5" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.E6" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.S" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos1.T" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.X" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.Y" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.Z" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.A" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.B" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.C" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.E1" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.E2" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.E3" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.E4" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.E5" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.E6" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.S" VarValue="10" />
        <SetVar VarName="C2R_jobList[n].pos2.T" VarValue="10" />
</SetMultiVar>

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
Gespeichert
Har-ry
Neuling
*
Offline Offline

Beiträge: 9


« Antworten #1 am: 04. Juni 2010, 10:58:37 »

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
Gespeichert
Har-ry
Neuling
*
Offline Offline

Beiträge: 9


« Antworten #2 am: 14. Juni 2010, 16:31:34 »

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
Gespeichert
Seiten: [1] Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  KUKA Roboter (Moderatoren: Werner Hampel, stefanM, IrrerPolterer)  |  Thema: Application KRC SETMULTIVAR « vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS