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.
Beiträge von RoKiGer
-
-
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
... bis ich das TP einschalte
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
%NOBUSYLAMPVAR
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 : INTEGERBEGIN
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