Hallo,
ich habe bei meinem Fanuc ein seltsames Phänomen. Der Roboter wartet an einer Waitanweisung und fährt auf seinen Achse 2 Softwareendschalter. Das Problem besteht nur wenn ich das PNS programm von Hand anwähle, im Programm UP399 auf Grundstellung fahre und dann anschließend auf einen Folgenstart warte. Manchmal funktioniert es ohne Probleme.
PNS Programm
/PROG PNS0001
/ATTR
OWNER = MNEDITOR;
COMMENT = "StartProgram";
PROG_SIZE = 790;
CREATE = DATE 11-07-19 TIME 21:01:42;
MODIFIED = DATE 11-09-23 TIME 15:51:40;
FILE_NAME = RSR0001;
VERSION = 0;
LINE_COUNT = 32;
MEMORY_SIZE = 1326;
PROTECT = READ_WRITE;
TCD: STACK_SIZE = 0,
TASK_PRIORITY = 50,
TIME_SLICE = 0,
BUSY_LAMP_OFF = 0,
ABORT_REQUEST = 0,
PAUSE_REQUEST = 0;
DEFAULT_GROUP = 1,*,*,*,*;
CONTROL_CODE = 00000000 00000000;
/APPL
/MN
1: !------------------------------- ;
2: !Projekt:AM00041 AUDI Grob ;
3: !Standort: Audi Györ ;
4: !;
5: !;
6: !;
7: !;
8: !Datum: Juli 2011 ;
9: !------------------------------- ;
10: !Hauptprogramm ;
11: ;
12: !TASKS EIN ;
13: CALL GRSTTASK ;
14: ;
15: IF DO[29:Switch in Auto]=ON AND DO[28:InGrundstellung]=ON,JMP LBL[1] ;
16: WAIT DO[21:Switch in T1]=ON ;
17: CALL UP399 ;
18: DO[69:Arbeitsende]=ON ;
19: ;
20: CALL IINIT ;
21: ;
22: LBL[1:Start] ;
23: ;
24: WAIT (DI[69:QuittFolgestart]) ;
25: ;
26: DO[69:Arbeitsende]=OFF ;
27: ;
28: CALL UPNR ;
29: ;
30: DO[69:Arbeitsende]=ON ;
31: ;
32: JMP LBL[1] ;
/POS
/END
Alles anzeigen
UP399
/PROG UP399
/ATTR
OWNER = MNEDITOR;
COMMENT = "Grundstellung";
PROG_SIZE = 985;
CREATE = DATE 11-07-22 TIME 14:17:24;
MODIFIED = DATE 11-09-20 TIME 14:27:36;
FILE_NAME = ;
VERSION = 0;
LINE_COUNT = 23;
MEMORY_SIZE = 1289;
PROTECT = READ_WRITE;
TCD: STACK_SIZE = 0,
TASK_PRIORITY = 50,
TIME_SLICE = 0,
BUSY_LAMP_OFF = 0,
ABORT_REQUEST = 0,
PAUSE_REQUEST = 0;
DEFAULT_GROUP = 1,*,*,*,*;
CONTROL_CODE = 00000000 00000000;
/MN
1: !*************************** ;
2: !Grundstellung ;
3: !*************************** ;
4: ;
5: !*************************** ;
6: !Frame und Payload setzten ;
7: !*************************** ;
8: CALL FFRAME(399) ;
9: CALL SPAYSET ;
10: ;
11: UTOOL_NUM=1 ;
12: UFRAME_NUM=1 ;
13: ;
14: CALL SPAYSET ;
15: PAYLOAD[1] ;
16: ;
17: !*************************** ;
18: !Sichereposition ;
19: !*************************** ;
20:J P[1000] 100% CNT0 ACC100 ;
21: ;
22: CALL IINIT ;
23: ;
/POS
P[1000]{
GP1:
UF : 1, UT : 1,
J1= 0.000 deg, J2= -69.683 deg, J3= 18.332 deg,
J4= 0.000 deg, J5= -51.524 deg, J6= 45.000 deg,
E1= -8799.999 mm
};
/END
Alles anzeigen
Ich habe den Eingang 69 in der SPS gesperrt. Es liegt irgendwie an dem GrstTask. Wenn ich ihn nicht aufruf tritt der Fehler nicht mehr auf. Im Task werden keine Bewegungen gefahren. Er dient nur für die Grundstellungsfahrt. Er bricht nur die laufende Bewegung ab und reduziert den Override bei der Grundstellungsfahrt.
GrstTask:
PROGRAM GRSTTASK
%COMMENT = 'GRSTTASK'
%NOPAUSE = COMMAND+ERROR+TPENABLE
%NOLOCKGROUP
%NOBUSYLAMP
VAR
STATUS : INTEGER
------------------------------------------------------------------------
---- Main program
------------------------------------------------------------------------
BEGIN
SET_INT_REG(197,0,STATUS)
SET_INT_REG(195,0,STATUS)
--Run Task FSKIP
RUN_TASK('FSKIP',1,FALSE,FALSE,1,STATUS)
END GRSTTASK
Alles anzeigen
Hier ist das Grundstellungsprogramm zum abbrechen der laufenden Bewegung und für das Reduzieren des Overrides:
Fskip
PROGRAM FSKIP
%COMMENT = 'SKIPLINE'
%NOPAUSE = COMMAND+ERROR+TPENABLE
%NOLOCKGROUP
%NOBUSYLAMP
VAR
entry : INTEGER
STATUS : INTEGER
r_val : REAL
i_val : INTEGER
r_flg : BOOLEAN
agf : INTEGER
akprogstr : STRING[12]
commandstr: STRING[30]
reg195val:INTEGER
reg197val:INTEGER
M_OvGesp:BOOLEAN
M_Override:INTEGER
Override_act:INTEGER
------------------------------------------------------------------------
---- Main program
------------------------------------------------------------------------
BEGIN -- FSKIP
M_OvGesp=FALSE
M_Override=0
Override_act=0
commandstr = ''
START::
--Register 195 auslesen
GET_REG(195,r_flg,reg195val,r_val,STATUS)
--Register 197 auslesen
GET_REG(197,r_flg,reg197val,r_val,STATUS)
--zur Grunstellung
IF (DIN[28]=ON) AND (OPOUT[19]=ON) AND (reg197val=0) AND (reg195val=1) THEN
GET_VAR (entry, '*SYSTEM*', '$TP_DEFPROG', akprogstr, STATUS)
commandstr = 'SKIP ' + akprogstr
KCL (commandstr,STATUS)
SET_INT_REG(197,1,STATUS)
SET_INT_REG(195,0,STATUS)
CNCL_STP_MTN
ENDIF
--Override bei Grst Fahrt reduzieren
GET_VAR (entry, '*SYSTEM*', '$MCR.$genoverride', Override_act, STATUS)
IF (DOUT[28]=ON) AND (OPOUT[19]=ON) THEN
--Override in Grundstellung wiederherstellen
IF M_OvGesp THEN
IF (Override_act=25) THEN
SET_VAR (entry, '*SYSTEM*', '$MCR.$genoverride', M_Override, STATUS)
ENDIF
M_OvGesp=FALSE
ENDIF
ELSE
--Override bei zur Grundstellung auf 25% reduzieren
IF (M_OvGesp=OFF) AND (DIN[28]=ON) THEN
M_Override=Override_act
M_OvGesp=TRUE
IF (M_Override>25) THEN
SET_VAR (entry, '*SYSTEM*', '$MCR.$genoverride', 25, STATUS)
ENDIF
ENDIF
ENDIF
DELAY(100)
GOTO START
END FSKIP
Alles anzeigen
Ich verstehe nicht warum der Roboter sich bewegt im Fskip werden eigentlich nur die Register und der Override eingelesen da die anderen Signale nicht anstehen.
Im Programmstatus Fenster steht das Programm Fskip auf running und das Programm PNS001 auf Waiting. Im Positionsfenster sieht man aber dass sich die Koordinaten ändern.
Darf ich beim Fanuc keinen Task im Hintergrund laufen lassen?? Das komische ist nur dass es manchmal funktioniert und manchmal nicht??
Kennt jemand dieses Problem??
Vielen Dank
Sebastian