ABfrage der Variabel TP_DEFPROG

  • Hi Leute,


    möchte in Karel abfragen was in der Variable $TP_DEFROG drin steht und dann dementsprechend reagieren.


    Da in der der Variable ein STRING Wert steht kriege ich das irgendwie nicht hin mit dem vergleichen :wallbash:


    Hoffe mir kann da einer helfen :hilfe:


    Gruß
    Dirk

  • ANZEIGE
  • Hi titan72,


    also ich möchte abfragen welches Programm angewählt ist und falls ein falsches angewählt ist möchte ich reagieren, wie z.B. Fehlermeldung, Startverweigern evtl. richtiges automatisch anwählen etc.


    Gruß und Danke

  • Hallo Dirk H,


    ich vermute, dass der String den Du von GET_VAR zurückbekommst irgendwie ein Leerzeichen beinhaltet (oder was ähnlich sinnloses).
    Lass Dir doch einfach mal die beiden Strings im iPendant ausgeben/anzeigen (WRITE TPDISPLAY()).


    Zur Not musst die Rückgabe von GET_VAR erst noch formatieren (sprich führende / angehängte Leerzeichen abschneiden).
    Im Handbuch musst einfach mal "format" suchen, da ist dann beschrieben, wie verschiedene Datentypen formatiert werden können.


    (Als kleine Anmerkung:
    Das "STRING-Handling" in KAREL ist nicht gerade das geschickteste bzw. das eleganteste.
    Es gibt hier weitaus modernere Programmiersprachen in denen es um einiges schneller, einfacher und schöner zu lösen ist. =) )


    Gruß
    Fred

    Hoffnung ist der erste Schritt auf dem Pfad der Enttäuschung.<br /><br />Java programmers wear glasses, because they can&#039;t C#.

  • Was ist daran Falsch


    PROGRAM R_WRITE
    %NOLOCKGROUP


    VAR


    entry, value, STATUS : INTEGER


    BEGIN


    STATUS=0


    GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)

    END R_WRITE


    Es kommt folgende Fehlermeldung



    ----------------------------------------------------------------------
    Translating C:\Daten\Fanuc\My Workcells\KArel\r_write.kl


    KTRANS Version V7.70 (Build 19 06/25/2010)
    Copyright (C) FANUC Robotics Corp., 1985 through 2005.
    All Rights Reserved.




    C:\Daten\Fanuc\My Workcells\KArel\r_write.kl(12)
    12 GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)
    ^ ERROR
    Invalid or missing expression.


    C:\Daten\Fanuc\My Workcells\KArel\r_write.kl(12)
    12 GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)
    ^ ERROR
    "," expected.


    C:\Daten\Fanuc\My Workcells\KArel\r_write.kl(12)
    12 GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)
    ^ ERROR
    Invalid or missing expression.


    C:\Daten\Fanuc\My Workcells\KArel\r_write.kl(12)
    12 GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)
    ^ ERROR
    "," expected.


    C:\Daten\Fanuc\My Workcells\KArel\r_write.kl(12)
    12 GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)
    ^ ERROR
    Invalid or missing expression.


    C:\Daten\Fanuc\My Workcells\KArel\r_write.kl(12)
    12 GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)
    ^ ERROR
    "," expected.


    C:\Daten\Fanuc\My Workcells\KArel\r_write.kl(12)
    12 GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)
    ^ ERROR
    Invalid or missing expression.


    C:\Daten\Fanuc\My Workcells\KArel\r_write.kl(12)
    12 GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)
    ^ ERROR
    ")" expected.


    C:\Daten\Fanuc\My Workcells\KArel\r_write.kl(12)
    12 GET_VAR(entry, *SYSTEM*, $TP_DEFPROG, value, STATUS)
    ^ ERROR
    Invalid statement. ";" or new line expected.



    ===============Translation not successful===============
    Build fehlgeschlagen: Error translating program: Code: 0xFFFFFFFF:
    ----------------------------------------------------------------------


    :wallbash: :denk: :huh:

  • Hallo nochmal,


    nur für die Auflösung:


    Ich vermute das Problem lag daran, dass das $TP_DEFPROG in Anführungszeichen als STRING definiert sein musste?!
    Es gibt wirklich aber auch bessere Compiler-Fehlercodes... =)


    Gruß
    Fred

    Hoffnung ist der erste Schritt auf dem Pfad der Enttäuschung.<br /><br />Java programmers wear glasses, because they can&#039;t C#.

  • Genau so wars....ist aber auch ein blöder Compiler :wallbash:


    Aber so langsam hab ichs raus :zwink:


    So neben bei noch, wie kann ich denn ein KArelprogramm zyklisch laufen lassen, d.h. Immer und immer wieder wiederholen lassen, so wie in einer SPS oder RPS.
    Habe schon mit der AUTOEXEC rprobiert aber das wollte er nich so ganz, Sogar Roboguide weigert sich jetzt hochzulaufen.
    Ich muss dazu sagen das ich einen WRITE Befehl drin habe und der wird immer aufgerufen bei jedem Durchlauf, ist das evtl. zu viel???


    Gruß und Danke
    Dirk

  • Moin moin Dirk H,


    aalso, die Idee mit dem AUTOEXEC war schonmal gar nicht schlecht.
    Das Problem ist, dass das Programm im AUTOEXEC innerhalb von einer gewissen Zeit beendet sein muss, sonst wird es automatisch von der Steuerung beendet.
    (glaub so 30 Sekunden o.ä.; ist einfach so definiert)


    Daher ist das beste, wenn Du ein TP-Programm (z.B. START.TP) erstellst in dem Du das KAREL-Programm mit "RUN" startest.


    Am besten davor vielleicht noch eine kleine Wartezeit von 5-8 Sekunden, falls Du z.B. auf bestimmte Bereiche in der Steuerung zugreifst (z.B. Netzwerk).
    Das Problem ist nämlich, dass das AUTOEXEC-Programm von der Steuerung aufgerufen wird, bevor alle Treiber geladen sind.
    (falls Du also im KAREL auf "Socket Messaging" o.ä. zugreifst funktioniert die Sache nicht, weil die Treiber für die Ethernet-Ports noch nicht geladen sind...)


    Übrigens, wenn Du eine Endlos-Schleife in Deinem KAREL-Programm hast, schreib auf jeden Fall ein "DELAY(10)" in die Schleife mit rein.
    Ansonsten kann es passieren, dass das KAREL "zu schnell" durchläuft und zuviele Ressourcen der Steuerung frisst (und dann z.B. das Handbediengerät einfriert).


    Viel Spass noch mit KAREL. =)


    Gruß
    Fred

    Hoffnung ist der erste Schritt auf dem Pfad der Enttäuschung.<br /><br />Java programmers wear glasses, because they can&#039;t C#.

  • Hallo Dirk H.


    da hast du tatsächlich was falsch verstanden. Der RUN-Befehl startet eigentlich nur einen zusätzlichen Task.
    Sobald dein Karel-Programm über das Ende läuft (END xxxxxx), dann ist es fertig. Du musst im Programm einen Loop programmieren, damit es wieder von vorne beginnt. Dabei musst du, wie Fred Clever bereits erwähnt hat, einen DELAY programmieren, damit das System zeit hat auch mal kurz Luft zu holen. Wenn du dies nicht tust, könnte es dazu führen, dass der Roboter nur mit dem Karel-Programm zutun hat und keinen anderen Dinge zulässt...


    Viel Erfolg
    hermo

    Wenn bereits der Ansatz falsch ist, so führt strenge Logik unweigerlich zum falschen Ergebnis. Nur Unlogik gibt Dir jetzt noch die Chance, wenigstens zufällig richtig zu liegen.<br /><br />Alle sagten: das geht nicht. Dann kam einer, der wusste das nicht und hat´s gemacht.

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