I have an RJ3iB running a router. When executing the tool change program, the robot will occasionally run through it with all of the motion and logic but seems to ignore any statements having to do with RI/RO. I.e, the following code will execute, but it seems to skip lines 48, 73, and 74 (our operator has always caught it and stopped the program at this point, but I'm assuming that it would also skip lines 82, 84, 87, 88, and 93). I have no idea why this is happening. I've tried to reproduce the problem and it always runs fine when I'm watching it.
Does anyone have any ideas what is causing this problem and how to prevent it?
Code
1: !Change to world frame ;
2: R[34:UFRAME MEMORY]=$MNUFRAMENUM[1] ;
3: UFRAME_NUM=0 ;
4: ;
5: !Change to tool2 ;
6: UTOOL[1]=PR[11:TOOL NUM 2] ;
7: ;
8: !DEFINE APPROACH POSITIONS ;
9: JMP LBL[1] ;
10: !First Digit: Tool Number ;
11: !X00 Front Approach ;
12: !X01 Front Slow ;
13: !X02 Tool Location ;
14: !X03 Top Approach ;
15: !X04 Top Slow ;
16:L P[100] 100mm/sec FINE ;
17:L P[101] 100mm/sec FINE ;
18:L P[102] 100mm/sec FINE ;
19:L P[103] 100mm/sec FINE ;
20:L P[104] 100mm/sec FINE ;
21:L P[200] 100mm/sec FINE ;
22:L P[201] 100mm/sec FINE ;
23:L P[202] 100mm/sec FINE ;
24:L P[203] 100mm/sec FINE ;
25:L P[204] 100mm/sec FINE ;
26:L P[300] 100mm/sec FINE ;
27:L P[301] 100mm/sec FINE ;
28:L P[302] 100mm/sec FINE ;
29:L P[303] 100mm/sec FINE ;
30:L P[304] 100mm/sec FINE ;
31:L P[400] 100mm/sec FINE ;
32:L P[401] 100mm/sec FINE ;
33:L P[402] 100mm/sec FINE ;
34:L P[403] 100mm/sec FINE ;
35:L P[404] 100mm/sec FINE ;
36: LBL[1] ;
37: ;
38: !STOP SPINDLE ;
39: AO[1:Spindle Speed]=0 ;
40: DO[13:FORWARD spindle]=OFF ;
41: DO[14:REVERSE spindle]=OFF ;
42: DO[11:Tool Blowoff]=ON ;
43: IF DI[4:Rbt Not Home]=ON,JMP LBL[2] ;
44:L PR[2:NEAR HOME] 500mm/sec FINE ;
45: LBL[2] ;
46:J PR[3:SAFE] 100% FINE ;
47: WAIT AI[1:Speed Feedback]<10 ;
48: RO[1:TSD AND TAPER BLOW]=ON ;
49: ;
50: !SELECT DROP ;
51: R[29:DROP_PICK SELECT]=30 ;
52: IF R[30:TOOL DROP]<>0,JMP LBL[3] ;
53: R[29:DROP_PICK SELECT]=31 ;
54: LBL[3] ;
55: ;
56: !Load position data to PRs ;
57: LBL[4] ;
58: IF R[31:TOOL PICK]=0 AND R[29:DROP_PICK SELECT]=31,JMP LBL[6] ;
59: R[33:P SELECT]=R[R[29]]*100 ;
60: R[32:PR SELECT]=15 ;
61: LBL[5] ;
62: PR[R[32]]=P[R[33]] ;
63: R[32:PR SELECT]=R[32:PR SELECT]+1 ;
64: R[33:P SELECT]=R[33:P SELECT]+1 ;
65: IF R[32:PR SELECT]<20,JMP LBL[5] ;
66: JMP LBL[R[29]] ;
67: ;
68: !Drop tool ;
69: LBL[30] ;
70:L PR[15:FRONT APPROACH] 1500mm/sec FINE ;
71:L PR[16:FRONT SLOW] 500mm/sec CNT20 ;
72:L PR[17:TOOL LOCATION] 50mm/sec FINE ;
73: RO[2:UnClamp Tool]=ON ;
74: WAIT RI[2:Tool Unclamped]=ON ;
75: WAIT .50(sec) ;
76:L PR[18:TOP APPROACH] 250mm/sec CNT100 ;
77: R[29:DROP_PICK SELECT]=31 ;
78: JMP LBL[4] ;
79: ;
80: !Tool Pick ;
81: LBL[31] ;
82: RO[2:UnClamp Tool]=ON ;
83:L PR[18:TOP APPROACH] 1500mm/sec CNT100 ;
84: WAIT RI[2:Tool Unclamped]=ON ;
85:L PR[19:TOP SLOW] 500mm/sec CNT20 ;
86:L PR[17:TOOL LOCATION] 50mm/sec FINE ;
87: RO[2:UnClamp Tool]=OFF ;
88: WAIT RI[1:Tool Clamped]=ON ;
89: WAIT .50(sec) ;
90:L PR[15:FRONT APPROACH] 250mm/sec FINE ;
91: ;
92: !Final instructions ;
93: RO[1:TSD AND TAPER BLOW]=OFF ;
94:L PR[3:SAFE] 1500mm/sec CNT100 ;
95: JMP LBL[7] ;
96: ;
97: !Go Home ;
98: LBL[6] ;
99:L PR[3:SAFE] 1500mm/sec CNT100 ;
100:J PR[2:NEAR HOME] 100% CNT100 ;
101:L PR[1:HOME] 500mm/sec FINE ;
102: LBL[7] ;
103: R[30:TOOL DROP]=R[31:TOOL PICK] ;
104: UFRAME_NUM=R[34:UFRAME MEMORY] ;
Display More