wenn /R1/CELL.SRC läuft, dann wird der Ausgang PGNO_REQ=TRUE.
...und wenn nicht, dann war noch das Teachprogramm aktiv, welches nun am Roboter in Extern-Automatik gestartet wurde, und im schlimmsten Fall im Schutzzaun zum Stehen gekommen ist!
Das Cell muss natürlich vor dem Start durch die SPS abgefragt werden. Die SPS muss also wissen ob CELL.SRC 'Vater aller Unterprogramme ist'
Das geht mit:
IF StrComp($PRO_NAME1[] , "CELL", #CASE_SENS) THEN
Blöd ist nur, wenn kein Programm angewählt ist, wird die Variable $PRO_NAME1[] ungültig. Wenn die SUB.SPS dann darauf zugreift, dann schmiert das Hintergrundprogramm ab. :-|
Vielleicht könnte man den Fehler abfangen, z.B. wie Errorlevel oder so.
Oder nur dann abfragen, wenn nicht abgewählt werden kann.
Auch blöd ist, wenn das Programm CELL offline geändert wurde, und Windows die Datei statt CELL.src, cell.src in den KUKA schreibt, also mit Kleinbuchstaben.
Der Kukasteuerung total Wurscht, aber StrComp nicht. Also zusätzlich noch abfragen:
IF StrComp($PRO_NAME1[] , "cell", #CASE_SENS) THEN
Theoretisch kann es ja sogar möglich sein, dass das Programm so in der Steuerung steht 'CeLl.src', dann müsste man jeden Buchstaben einzeln auf groß, klein abfragen. Dann kann uns keiner mehr ärgern!
Geht auch wie Loipe schreibt mit $Pro_IP.Name[]", dann bekommst du "/R1/cell.SRC".
Eine andere Möglichkeit ist, man setzt einen Ausgang zur SPS sofort wenn das CELL Programm startet. Dieser wird zurückgesetzt, wenn kein Programm angewählt ist.
Ist das Programm zurückgesetzt, dann will die SPS den Ausgang. Ist NOT $ROB_STOPPED OR $PRO_MOVE OR $NEAR_POSRET bevor der Ausgang kommt, dann nimmt SPS die Fahrfreigabe weg.
Leider fährt der Roboter im schlimmsten Fall noch ein Stück, weil die Reaktionszeit doch recht groß ist.
Man kann auch versuchen den Roboter über die SUB zu stoppen, ohne $MOVE_ENABLE, mit:
CWRITE($CMD,STAT,MODE,"STOP 1")
Ciao, Andreas