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

Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  KUKA Roboter (Moderatoren: Werner Hampel, stefanM, IrrerPolterer)  |  Thema: Liste von Frames übertragen, mit EKX_GetFrameElement auslesen 0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Liste von Frames übertragen, mit EKX_GetFrameElement auslesen  (Gelesen 385 mal)
spamkiller
Neuling
*
Offline Offline

Beiträge: 17


« am: 28. Juli 2010, 12:33:16 »

Hallo,

ich versuche gerade eine Liste von Frames per Ethernet KRL XML 1.2 zu übertragen. Aber irgendwie scheitert es bereits bei der Interpretation des roboterseitig empfangenen XML Strings. Ich komme nicht dahinter, was der Roboter da wo anders erwartet.

Ich habe einen Channel definiert und die XML Empfangsstruktur wie folgt definiert:
Code:
<Elements>
  <Element Tag="root" Type="STRUCTTAG" Stacksize="100/">
    <Element Tag="root.data" Type="STRUCTTAG" Stacksize="100/">
      <Element Tag="root.data.rr_frames" Type="STRUCTTAG" Stacksize="100/">
        <Element Tag="root.data.rr_frames.rr_frame" Type="STRUCTTAG" Stacksize="100/">
          <Element Tag="root.data.rr_frames.rr_frame.index" Type="INTEGER" Stacksize="100/">
          <Element Tag="root.data.rr_frames.rr_frame.cid" Type="INTEGER" Stacksize="100/">
          <Element Tag="root.data.rr_frames.rr_frame.f" Type="FRAME" Stacksize="100/">
</Elements>

Die gesendeten Daten enthalten erst mal nur einen Frame:
Code:
<root>
  <data>
    <rr_frames>
      <rr_frame index="1" cid="1">
        <f X="1.0" Y="2.0" Z="3.0" A="4.0" B="5.0" C="6.0" />
      </rr_frame>
    </rr_frames>
  </data>
</root>

EKX_WaitForSensorData() gibt false zurück, ist auch klar, denn bereits vor dem Aufruf sieht man in der telnet Konsole:
Code:
Error: EKX: Error While extract FRAME information. Send:X="1.0" Y="2.0" Z="3.0" A="4.0" B="5.0" C="6.0"/>    <rr_frame>  </rr_frames>   </data>   </root>, Expect:XPos
Error: EKX: Error while extract attributes in FRAME:f X="1.0" Y="2.0" Z="3.0" A="4.0" B="5.0" C="6.0"/>    <rr_frame>  </rr_frames>   </data>   </root>
Error: EKX: Execute Filters, Channel EKXChannel_rr_frames

Danach kommt noch mal der "XML Chunk of interest", in dem aber genau das steht, was ich gesendet habe.

Ich habe schon mal probiert, statt
Code:
X="1.0" Y="2.0"...
das hier zu schicken:
Code:
XPos="1.0" YPos="2.0"...
Aber auch ohne Erfolg.

Zu "EKX_GetFrameElement" bekomme ich *ein* einziges Ergebnis bei google... (gab's da nicht mal ein Wettbewerb oder so?).
Ich hoffe, einer von den Roboter Gurus kann mir helfen, denn ich bin so ziemlich am Ende.  Denken

Gruß ins Forum  zwink
sk

PS: Softwareversion KR C 5.4.14
Gespeichert
Hermann
Elite Member
*******
Offline Offline

Beiträge: 778


« Antworten #1 am: 28. Juli 2010, 20:53:16 »

Also ohne das jetzt zu wissen, aber wenn man es analog zum 'index' und 'cid' macht, dann würde ich mal sowas:

Code:
<f=" X 1.0,  Y 2.0,  Z 3.0,  A 4.0,  B 5.0,  C 6.0" />

probieren.

Ähem, obiges vergessen, hab' in einem alten Projekt nachgesehen, sollte so aussehen:
Code:
<f XPos="0.0" YPos="0.0" ZPos="0.0" ARot="0.0" BRot="0.0" CRot="0.0" />

Gespeichert
spamkiller
Neuling
*
Offline Offline

Beiträge: 17


« Antworten #2 am: 29. Juli 2010, 08:58:06 »

Erst mal vielen Dank für die Antwort  Smile

Ich habe das noch einmal probiert. Gesendet habe ich:
Code:
<root>
  <data>
    <rr_frames>
      <rr_frame index="1" cid="1">
        <f XPos="1.0" YPos="2.0" ZPos="3.0" ARot="4.0" BRot="5.0" CRot="6.0" />
      </rr_frame>
    </rr_frames>
  </data>
</root>

Der Fehler war dieses mal:
Code:
Error: EKX: Error While extract FRAME information. Send:CRot="6.0" BRot="5.0" ARot="4.0" ZPos="3.0" YPos="2.0" XPos="1.0"/>    <rr_frame>  </rr_frames>   </data>   </root> , Expect:XPos
Error: EKX: Error while extract attributes in FRAME:f CRot="6.0" BRot="5.0" ARot="4.0" ZPos="3.0" YPos="2.0" XPos="1.0"/>    <rr_frame>  </rr_frames>   </data>   </root>
Error: EKX: Execute Filters, Channel EKXChannel_rr_frames

Interessanterweise ist die Reihenfolge der Attribute umgedreht. In der XML Spezifikation macht das angeblich keinen Unterschied, vielleicht kommt aber KRL XML damit nicht zurecht? Die Verdrehung kommt scheinbar durch mein PC-seitig verwendeten XML Parser zustande (Qt: QDomDocument etc.), ich versuche ihm das mal abzugewöhnen...
Gespeichert
spamkiller
Neuling
*
Offline Offline

Beiträge: 17


« Antworten #3 am: 29. Juli 2010, 09:35:36 »

Dem QDomDocument konnte ich leider die zufällige Umsortierung nicht abgewöhnen, daher habe ich den XML String ohne Umweg über einen Parser abgeschickt. Und siehe da: KRL XML kommt tatsächlich nicht mit einer anderen Reihenfolge der Attribute zurecht kopfkratz, denn jetzt werden die Frames ohne Probleme eingelesen  Mr. Green.

 danke
Gespeichert
Seiten: [1] Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  KUKA Roboter (Moderatoren: Werner Hampel, stefanM, IrrerPolterer)  |  Thema: Liste von Frames übertragen, mit EKX_GetFrameElement auslesen « 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