Programm als Shell starten

  • Hallo,


    ich habe ein kleines Programm in Karel, das zwei Variablen aus einem anderen Karel Programm ausliest und die Werte in Register schreibt. So weit, so funktional. Jetzt soll das Programm ständig im Hintergrund laufen. Der erste Versuch war, es in der BG_LOGIC aufzurufen, die scheint aber keine Karel Programme zu mögen. Für die weiteren Versuche habe ich das Programm daher erstmal um eine endlose WHILE Schleife erweitert, die als Abbruchbedingung auf ein Register schaut.


    Jetzt habe ich versucht das Programm als Macro über einen DI zu starten. Das funktioniert und das Programm macht genau was es soll. Allerdings bleibt es stehen bei Störungen und die "BUSY" Lampe ist an (unschön).


    Eleganter wäre die Methode, dass Programm bei Roboterstart im Hintergrund laufen zu lassen, was mich nach etwas Recherche zur $SHELL_CFG gebracht hat. Als Name habe ich hier jetzt den Programmnamen angegeben. Das Programm startet auch bei Roboterstart, scheint aber dann auch wieder aus irgendeinem Grund hängen zu bleiben, weil einfach nichts mehr passiert.


    Kann mir jemand bei der richtigen Konfiguration der SHELL Parameter helfen? Werde den Programmcode im nächsten Antwort Post eintragen, falls an dieser Stelle auch noch Änderungen vorzunehmen sind.


    Vielen Dank fürs Durchlesen :)

  • ANZEIGE
  • PROGRAM get_temp


    %NOLOCKGROUP
    %CMOSVARS
    %NOBUSYLAMP



    VAR
    entry, status, reg_var1, reg_var2, value_int : INTEGER
    var_name1, var_name2, prog_name : STRING[20]
    value_real, get_real : REAL
    int_mode, real_flag : BOOLEAN
    wait_ms : INTEGER
    loop1, loop2 : INTEGER


    BEGIN
    SET_INT_REG(1,1,status)
    SET_INT_REG(2,2,status)
    GET_REG(1,real_flag,loop1,get_real,status)
    GET_REG(2,real_flag,loop2,get_real,status)
    WHILE loop1=1 DO
    IF loop2=1 THEN
    IF int_mode=FALSE THEN
    GET_VAR(entry,prog_name,var_name1,value_real,status)
    SET_REAL_REG(reg_var1,value_real,status)
    GET_VAR(entry,prog_name,var_name2,value_real,status)
    SET_REAL_REG(reg_var2,value_real,status)
    ELSE
    GET_VAR(entry,prog_name,var_name1,value_int,status)
    SET_INT_REG(reg_var1,value_int,status)
    GET_VAR(entry,prog_name,var_name2,value_int,status)
    SET_INT_REG(reg_var2,value_int,status)
    ENDIF
    ENDIF
    DELAY wait_ms
    GET_REG(1,real_flag,loop1,get_real,status)
    GET_REG(2,real_flag,loop2,get_real,status)
    SET_INT_REG(3,1,status)
    ENDWHILE
    END get_temp

  • OK, ich habe mit der Zeile "%NOABORT = ERROR + COMMAND" das ganze soweit bekommen, dass es nach dem Start der Roboters (teste in Roboguide) einwandfrei funktioniert :lol: :lol: :lol:


    ... bis ich das TP einschalte :wallbash:


    Daraufhin stellt das Programm seine Funktion ein und lässt sich auch nur durch einen Neustart wieder zum funktionieren bringen.


    Ich muss also nur noch verhindern, dass eine Störung des Roboters die SHELL zum anhalten bringt... aber wie?


    Vielen Dank fürs Durchlesen.

  • Also mit %NOPAUSE =ERROR + COMMAND + TPENABLE und %NOPAUSESHFT funktioniert es jetzt einwandfrei. Ist auch nicht mehr durch Roboterstörungen oder TP_ENABLE zu stoppen. Einzig wenn die WHILE Bedingung nicht mehr erfüllt ist stoppt es, aber gehört ja zum Programm.


    Danke fürs Durchlesen

  • Also es tut jetzt ja was es soll, damit hat sich das Thema für mich erledigt, falls aber dennoch jemand eine elegantere, oder sicherere Lösung kennt, einfach schreiben. Ich bin immer offen für Verbesserungen.


    :danke:

  • Hallo Roland


    Ich machen es persöhnlich immer so:
    - Ich lege mir ein TP-Programm an. In diesem TP-Programm rufe ich das KAREL-Programm mit dem RUN Befehl auf.
    - Danach setzte ich das TP-Programm unter der Config (MENU - SYSTEM - CONFIG) als HOT START EXECUTE PROGAM, somit wird jedes mal wenn der Controller einen HOT-START macht (USE HOT START muss dabei immer auf TRUE stehen (auch unter der CONFIG)) das gewünschte TP-Programm auf.


    WICHTIG: TP-Programm darf keine Bewegungssätze beinhalten, Bewegungsgruppen deaktiviert (jede Gruppe muss also einen * haben) und man darf auch nicht direkt das KAREL Programm in die HOT START EXECUTE PROGAM Variable setzen, weil das Programm wo dort ausgeführt werden soll, muss nach einer bestimmten Zeit beendet sein, sonst kommt eine Fehlermeldung. (Hab es ehrlich noch gar nie probiert, aber ich habe es auch nur mal so gehört bzw. nachgelesen)

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