Beiträge von RoKiGer

    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:

    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

    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.

    Zu Frage 1: Ja. Beim Mastern mit der Vorrichtung (diese Uhren), stellst du den Roboter in eine mehr oder weniger exakte Position, teilst die dem Roboter mit und schon ist die Welt für den Roboter wieder in Ordnung. Ist allerdings ne sch... arbeit bei Fanuc und Gott sei dank musste ich das bisher nur ein einziges mal machen.


    Zu Frage 2: Mir fehlen ein paar Details aber im Groben ist es so: Der Roboter behält seine Position in dem er Pulse zählt die von jeder Achse über eine gelochte Pulsgeberscheibe ausgegeben werden. Die Achsen drehen sich, also drehen sich die Scheiben also bekommt der Roboter Pulse, die er zählt und somit seine Position relativ zu den gezählten Pulsen bestimmen kann. Die Scheibe hat eine einzige Position die besonders ist, entweder ist der Puls etwas länger oder es gibt ein zweites Signal, da fehlt mir das Detail, aber es gibt eine Position der Scheibe die der Roboter exakt erkennen kann.


    In dem Moment, wo du eine Quick Master Position definierst, merkt sich der Roboter die Position anhand dieser einzigartigen Scheibenposition. Wenn die Masterung dann flöten geht, fährst du den Roboter so gut es geht in die vorher definierte Position, idealerweise anhand von Markierungen die an allen Achsen angebracht wurden. Der Roboter muss dann nur noch auf der Scheibe die einzigartige Position finden und kann sich seine exakte Lage ausrechnen.


    Das geht natürlich nur, wenn zum Zeitpunkt der Ablage der Quick Master Ref alles in Ordnung war.

    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

    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 :)