XML Parser

  • Hallo zusammen,


    da ich recht neu mit der Arbeit mit Robotern bin, muss ich mich von Beispiel zu Beispiel hangeln.

    Nun würde ich gerne eine XML erstellen, wo Daten in Strukturen abgelegt werden (einfach und erledigt).

    ABER nun kommt das komplett neue, KAREL und das Zusammenspiel im Roboter.


    Ich versuchte das Beispiel von FANUC:

    Dokument: MARRC75KR07091E Rev L

    Seite: 10.5.3 Example KAREL Program Referencing an XML File ab 10-20

    XML File: xml_name (Leider benomme ich die xml_name nichtmal im Roboguide geladen. Meldung "file not loadable". Natürlich gut für ein Example.)

    KAREL: xmlparse (Lässt sich problemlos ausführen, aber findet natürlich die XML dann nicht.)


    In viele Roboter-/Software Seiten findet man nichts zu dem Thema oder nur fast exakt dieses Beispiel von anderen Usern,

    die ebenfalls Probleme damit haben und nur mal 2-3 kleine Änderung tätigten, wie xml File name ändern etc pp.


    Nun meine Frage, kennt sich jemand damit aus und kann dieses erklären oder ein eigenes kurzes Bsp bringen?

    ODER Tipps, wie ich in einem externen File, "das sich auch in den Roboter laden lässt", lesen kann und somit die Register befüllen kann.


    Viele Dank im Voraus

  • ANZEIGE
  • 1. Poste doch mal deine Dateien: Karel-Programm und XML-Datei, mir (und sicher auch anderen) ist das zu blöd auch noch die ganzen Dateien zu suchen und die Dateien da rauszufieseln.

    2.

    XML File: xml_name (Leider benomme ich die xml_name nichtmal im Roboguide geladen. Meldung "file not loadable".

    WIE versuchst Du die Datei von WOHER nach WOHIN zu laden?

  • Entschuldigung, hier natürlich der Code.


    Versucht es:
    1. normal über File > UT1 zu laden.
    2. Über ColdStart und CTRL Start

    3. und wie von rob76 hier beschrieben:

    rob76_roboter-forum

    "Im File MENU auf COPY, Device FR: auswählen und rüberkopieren....so sollte es gehen"

    Bei mir auch nach Anpassung dennoch "file not found".

    Code
    OPEN FILE xml_file ('RO', 'FR:\xml_name') -- Open does new operation

    Jedoch ist es zumindest dort drauf:


    Code xmlparser

    Code xml_name

    XML
    <?xml version="1.0" ?><!-- This is a comment -- >
        <xmlstrct_t
        first="123456"
        second="7.8910"
        third="1"
        fourth="A string">
        Text assocated with xmlstrct_t tag
    </xmlstrct_t>
  • - man kann Dateien im Roboguide nach mc: einfach mit dem Explorer kopieren, der Ordner existiert im Verzeichnis des Projekts, im Unterordner 'Robot_x/MC'.

    EDIT:

    - auf dem richtigen Roboter im Zweifelsfall mit einem ftp-client.


    - Im Beispielprogramm wird der Dateiname nur gesetzt, wenn der noch nicht gesetzt wurde, wenn man das Programm ein Mal gestartet hat und das zugehörige .VR File nicht löscht, dann wird der Name nie wieder geändert:

    Code
       IF UNINIT(xml_name) THEN
            xml_name = 'mc:kl16004.xml'
        ENDIF
    
    --Ändern in;
    -- IF UNINIT(xml_name) THEN
            xml_name = 'mc:xml_file'
    --    ENDIF

    Das XML-File ist nicht sauber formatiert:

    XML
    <?xml version="1.0" ?><!-- This is a comment -- >
    
    ! muss heissen (Leerzeichen zu viel am Ende vor '>':
    <?xml version="1.0" ?><!-- This is a comment -->

    mit diesen Änderungen läuft das Programm schon mal ohne Fehler durch.


    Dann muss man den ganzen Sinn des Programms noch verstehen:

    Es interpretiert die XML-Datei und trägt dann den Inhalt der Variablen, die in der XML-Datei enthalten ist in die Variable in der Karel-Datei ein, die in den Zeilen mit dem "XML_SETVAR" eingetragen sind (im Beispiel "xmlstruct" in der Datei "KL16004") wenn es das nicht gibt, dann passiert halt gar nix.

    Es kann allerdings auch die eigene Kareldatei angegeben werden.

    Lange Rede kurzer Sinn, hier ein angepasstes Programm, mit Testausgaben:


    Nachdem das Programm duchgelaufen ist kann man sich die Variable "xmlstrct" über "Data" -Type "KAREL Vars" ansehen, die sollte dann die Daten aus der XML-Datei enthalten.


    Die Beispielprogramme aus den Dokus sind häufig fehlerhaft, aber meist nur Feinheiten. :(

  • Benötige leider doch nochmal Hilfe von ihnen.


    Ich habe mal alles wie sie versucht, es läuft wie sie sagen auch durch, aber es scheint nicht die Datei zu öffnen und daraus zu lesen, denn dann sind nur folgende KAREL Var zu sehen:

    Leider sind dies nicht die Attribute aus der xml Datei von XMLSTRUCT_T

    pasted-from-clipboard.png

    Ich vesuchte auch RW, anstelle von RO wie in dieser PDF aufgeführt ist.

    Demnach solle dann die Datei erstellt werden wenn sie nicht vorhanden ist.

    Ich nannte sie mal xml_file2 etc pp doch sie tauchte nie unter "Robot_1\MC" auf.

    Es scheint eher, als das Programm (von ihnen) ab Zeile 76 überspringt.

  • In der untersten Zeile des Screenshots steht die Variable:

    XMLSTRCT XMLSTRCT_T

    dort draufgehen und "Enter" drücken.

    ...

    Es scheint eher, als das Programm (von ihnen) ab Zeile 76 überspringt.

    Deshalb sind da einige Kontrollausgaben im Programm, und es wird automatisch auf den Screen mit den Ausgaben umgeschalten. Wie sieht der denn nach dem Durchlauf des Programms aus?

    XML-Datei angepasst?

    Bei mir funktioniert das einwandfrei. Sowohl mit dem Programm "xmlparse", als auch mit einem externen Karel-Programm.

    Leider ist das Debuggen von Karelprogrammen extrem unterirdisch, da braucht man schon etwas Erfahrung hinter die Ursache bei Problemen zu kommen.

  • Guten morgen Hermann,


    ja das stimmt, mit Roboguide und KAREL ist es leider nicht so easy wie mit VisualStudio ^^


    Den Fehler habe ich nun entdeckt. Mir konnte mal die Zelle nicht geladen werden und Roboguide erstellte eine Kopie. Statt in den neuen Pfad zu gehen, ging er in den alten. Dort erstellte er die leere Datei xml_file. Danach erstellte ich für den xmlParser eine neue Zelle. Pfade waren dann OK und er konnte auch die xml_file lesen.


    Der Tipp, mit:

    XMLSTRCT XMLSTRCT_T

    dort draufgehen und "Enter" drücken.

    für einen Anfänger in KAREL Gold Wert, Danke Ihnen vielmals für die Hilfe.


    Dann wäre das Thema erfolgreich erledigt.

    ____________________________________________________________________


    Nur noch eine kleine Zusatz Frage:Leider ist der Teil des Dokumentes hier mager auf 2 Seiten. Man könne sie am TP mittels Buttons in ein File speichern, was aber sinnfrei ist, von file in file.


    Auf die schnelle nichts per google oder in dem vorliegenden FANUC Dokument gefunden.
    Wie in Hochsprachen

    R[1]=xmlstrct_t.first

    wird der Zugriff vermutlich nicht gehen.
    Da ist der KAREL Editor wieder mager ohne IntelliSense Funktion und nur der Anzeige beim übersetzen "Error in line xy" ohen Korrektur Vorschlag.


    Wie bekomme ich per KAREL diese Variable in das Register?

    Einmal editiert, zuletzt von TOM2022 ()

  • Hallo Hermann,

    danke für das posten des korrigierten Beispiels von FANUC. Endlich hab ich das auch mal laufen sehen. 🙃 War da auch schon seit 2019 vergeblich dran ...

    Kurze Frage, laut Anleitung muss ja die Struktur: <xmlstrct_t first="123456" second="7.8910" third="1" fourth="A string"> gegeben sein.

    Konntest du mit dem Built-In auch eine Struktur wie diese:

    <xmlstrct_t>

    <first>123456</first>

    <second>7.8910</second>

    <third>1</third>

    <fourth>A string</fourth>

    Text assocated with xmlstrct_t tag

    </xmlstrct_t>

    zum laufen bringen?


    Bisher musste ich das mit einem Work-around (einzeln jedes Zeichen durch eine IF-Schleife durchführen und prüfen ob es Datenteil oder Tag ist) lösen. Würde aber gerne auf die Bordmittel zurückgreifen, wenn diese das irgendwie zulassen.

    Danke schon mal vorab.


    BG

  • Hast das mit meinem Programm schon versucht?

    Wenn ich mich recht erinnere habe ich genau mit diesem XML-Aufbau angefangen, und das hat auch funktioniert, und hab' dann den anderen auch noch probiert. Bin aber nicht wirklich zu 100% sicher, das Alter halt :)

  • Ja, wenn ich dazu auch die original von FANUC definierten XML verwende läuft das Programm wie es soll.

    Wenn ich allerdings die andere Variante nehme, mit den einzelnen Tags und dem Inhalt zwischen Start und End, dann lässt er die einzelnen Structure Elemente uninitialisiert, läuft allerdings auch ohne Fehler durch.

    Die Variablenausgabe links ist einmal mit der geänderten XML und rechts mit der originalen. Die Ausgabe auf dem Userscreen ist in beiden Fällen identisch.

    Es wirkt fast so als könne er nicht eine Ebene Tiefer tauchen.

  • Hallo KaiF,


    bei mit macht der Parser was er soll, bringt zwar nicht alle
    Ausgaben, die ich erwarte, aber am Ende sind alle

    Daten der XML in den KAREL Vars drin.

    Ich muss eben das vorgegebene Struct anpassen und die XML
    sollte dann übereinstimmen.



    Falls das geholfen hat.


    Grüße

  • Hallo zusammen,


    das in der Doku beschriebene Beispiel funktioniert recht reibungslos (wenn man erstmal alle Standardfehler behoben und den Fallstrick mit der Zuweisung des xml Dateinamens entdeckt hat).
    Allerdings ist ein Problem das ich nicht gelößt bekommen und hoffe jemand hier hat eine Idee dazu.

    Das als Beipspiel gegebene xml mit Nodes die Nodes enthalten bereitet mir Kopfzerbrechen.

    ->>

    XML
    <?xml version="1.0" ?>
    <!-- This is a comment -->
    <GRID rows="16" cols="24" scale="80">
        <xmlstrct_t first="123456" second="78910" third="1" fourth="A String"> 
        </xmlstrct_t> 
    </GRID>


    Hat jemand eine Idee wie man gleichzeitig an die Attribute vom Node GRID und an die Attribute vom Node xmlstrct_t kommt?

    da es laut Doku eine parser Fehlermeldung (XML_TAGNEST "Tag nesting level too deep") gibt gehe ich davon aus das man es auch mit einmal xml_Scan(...) alles in eine entsprechende Struktur schreiben kann.


    btw. hat schon jemand herausgefunden wie viele nesting Ebenen too deep sind?


    Gruß

    Microbi

    Der Besitz der Weltherrschaft wird überbewertet.

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