can I ask why you cannot use BGlogic ?
Posts by chris051873
-
-
I ran your updated programs through my tool and didn't find any issues.thanks again !
-
Sure no problem.Sent from my SM-G930V using Tapatalk
sent, thanks again.
-
chris051873,EJ_Front, line 19 is recursive.
EJCT_F_R calls EJ_Front, which can call EJCT_F_R on line 19.
thanks HawkME
good stuff, at least we know I had a problem.that was hidden huh....
well, i changed around some of the programming and deleted the ones that were there that weren't up to par(so to speak).
i like consistency across the board.
Would you mind checking it out again if i send it to you ?
-
I have a tool that can find recursion. If you send me a backup I could test it for you. Must be an "all of the above" backup.Sent from my SM-G930V using Tapatalk
PM has been sent to you.
-
I am kind of at a loss now. The next best thing that I can suggest is kind of tedious; Step through line by line so you can see exactly what is causing the issue. Or, put pauses where you think is a strategic point in the program, and then step through.I will step through the entire program, making sure that it hits the end in each.
thanks.
Chris -
I don't see your code for EJ_Front, so I am guessing that maybe you had it set up like rear and have the recursive calls in there too?thanks for looking, here is Ej_front.
however, it pulls either front or rear based on a register value.
Code
Display More/PROG EJ_FRONT /ATTR OWNER = MNEDITOR; COMMENT = "FRONT_EJECT_MAIN"; PROG_SIZE = 668; CREATE = DATE 18-12-11 TIME 13:49:02; MODIFIED = DATE 18-12-19 TIME 10:52:07; FILE_NAME = EJ_REAR; VERSION = 0; LINE_COUNT = 19; MEMORY_SIZE = 1044; PROTECT = READ_WRITE; TCD: STACK_SIZE = 3000, TASK_PRIORITY = 50, TIME_SLICE = 0, BUSY_LAMP_OFF = 0, ABORT_REQUEST = 0, PAUSE_REQUEST = 0; DEFAULT_GROUP = *,*,*,*,*; CONTROL_CODE = 00000000 00000000; /APPL /MN 1: PAYLOAD[3] ; 2: IF SO[5:User LED#1]=OFF,CALL CG_ADJST ; 3: IF SO[5:User LED#1]=OFF,CALL HOME ; 4: !GO HOME ABOVE CONVEYOR ; 5: IF R[199:IN MOLD AREA]=1,CALL FRT_HOME ; 6: IF R[198:CONVEY AREA]=1,CALL CON_HOME ; 7: IF R[197:SETUP AREA]=1,CALL SET_HOME ; 8: !WAITING ON INPUTS ; 9: CALL ENTER_IO ; 10: !TOOL NUMBER HERE ; 11: SELECT R[19:MOLD NUMBER]=0,CALL ABORTIT ; 12: SELECT R[19:MOLD NUMBER]=16046,CALL PRG16046 ; 13: SELECT R[19:MOLD NUMBER]=16047,CALL PRG16047 ; 14: SELECT R[19:MOLD NUMBER]=2042,CALL PRG02042 ; 15: SELECT R[19:MOLD NUMBER]=2054,CALL PRG02054 ; 16: SELECT R[19:MOLD NUMBER]=2046,CALL PRG02046 ; 17: SELECT R[19:MOLD NUMBER]=11037,CALL PRG11037 ; 18: !DOES CONVEYOR MOVES ; 19: CALL CONVEY ; /POS /END
-
hi guys,
well it is still getting a stack overflow error. Would you mind reviewing my updated code ?
thanks
ChrisCode
Display More/PROG PB1 Macro /ATTR OWNER = MNEDITOR; COMMENT = "CYCLE START"; PROG_SIZE = 124; CREATE = DATE 19-01-14 TIME 15:03:06; MODIFIED = DATE 19-01-14 TIME 15:03:21; FILE_NAME = ; VERSION = 0; LINE_COUNT = 1; MEMORY_SIZE = 468; PROTECT = READ_WRITE; TCD: STACK_SIZE = 2000, TASK_PRIORITY = 50, TIME_SLICE = 0, BUSY_LAMP_OFF = 0, ABORT_REQUEST = 0, PAUSE_REQUEST = 0; DEFAULT_GROUP = *,*,*,*,*; CONTROL_CODE = 00000000 00000000; /MN 1: CALL EJCT_F_R ; /POS /END
Code
Display More/PROG EJCT_F_R /ATTR OWNER = MNEDITOR; COMMENT = "FRONT OR REAR"; PROG_SIZE = 528; CREATE = DATE 19-01-14 TIME 15:16:27; MODIFIED = DATE 19-01-14 TIME 15:16:27; FILE_NAME = SETUP; VERSION = 0; LINE_COUNT = 15; MEMORY_SIZE = 1004; PROTECT = READ_WRITE; TCD: STACK_SIZE = 3000, 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: LBL[11] ; 2: IF R[199:IN MOLD AREA]=0 AND R[198:CONVEY AREA]=0 AND : R[197:SETUP AREA]=0,JMP LBL[1] ; 3: IF R[199:IN MOLD AREA]=1 AND R[17:FRONT EJECT 1]=1,CALL FRT_HOME ; 4: IF R[199:IN MOLD AREA]=1 AND R[18:REAR EJECT 1]=1,CALL RER_HOME ; 5: IF R[198:CONVEY AREA]=1,CALL CON_HOME ; 6: IF R[197:SETUP AREA]=1,CALL SET_HOME ; 7: LBL[1] ; 8: IF SO[5:User LED#1]=ON,JMP LBL[2] ; 9: CALL HOME ; 10: LBL[2] ; 11: SELECT R[19:MOLD NUMBER]=0,CALL ABORTIT ; 12: IF R[17:FRONT EJECT 1]>=1 AND R[18:REAR EJECT 1]=1,CALL ABORTIT ; 13: IF R[17:FRONT EJECT 1]=1,CALL EJ_FRONT ; 14: IF R[18:REAR EJECT 1]=1,CALL EJ_REAR ; 15: JMP LBL[11] ; /POS /END
Code
Display More/PROG EJ_REAR /ATTR OWNER = MNEDITOR; COMMENT = "REAR_EJECT_MAIN"; PROG_SIZE = 810; CREATE = DATE 19-01-14 TIME 15:26:25; MODIFIED = DATE 19-01-14 TIME 15:26:25; FILE_NAME = REAR_EJ; VERSION = 0; LINE_COUNT = 29; MEMORY_SIZE = 1278; PROTECT = READ_WRITE; TCD: STACK_SIZE = 3000, 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: PAYLOAD[3] ; 2: IF SO[5:User LED#1]=OFF,CALL CG_ADJST ; 3: IF SO[5:User LED#1]=OFF,CALL HOME ; 4: SO[5:User LED#1]=(ON) ; 5: ; 6: !GO HOME ABOVE CONVEYOR ; 7: IF R[199:IN MOLD AREA]=1,CALL RER_HOME ; 8: IF R[198:CONVEY AREA]=1,CALL CON_HOME ; 9: IF R[197:SETUP AREA]=1,CALL SET_HOME ; 10: ; 11: !WAITING ON INPUTS ; 12: ; 13: IF R[19:MOLD NUMBER]=14001,JMP LBL[10] ; 14: ; 15: CALL ENTER_IO ; 16: ; 17: LBL[10] ; 18: ; 19: !ENTER TOOL NUMBER HERE ; 20: SELECT R[19:MOLD NUMBER]=0,CALL ABORTIT ; 21: SELECT R[19:MOLD NUMBER]=14001,CALL PRG14001 ; 22: SELECT R[19:MOLD NUMBER]=14016,CALL PRG14016 ; 23: SELECT R[19:MOLD NUMBER]=6022,CALL PRG06022 ; 24: SELECT R[19:MOLD NUMBER]=16042,CALL PRG16042 ; 25: SELECT R[19:MOLD NUMBER]=13002,CALL PRG13002 ; 26: IF R[19:MOLD NUMBER]=14001 OR R[19:MOLD NUMBER]=14016,CALL CONV_IGT ; 27: IF R[19:MOLD NUMBER]=14001 OR R[19:MOLD NUMBER]=14016,JMP LBL[2] ; 28: CALL CONVEY ; 29: LBL[2] ; /POS /END
Code
Display More/PROG PRG14001 /ATTR OWNER = MNEDITOR; COMMENT = "14001 MOLD REAR"; PROG_SIZE = 3335; CREATE = DATE 19-01-14 TIME 09:25:19; MODIFIED = DATE 19-01-14 TIME 09:25:19; FILE_NAME = PRG14016; VERSION = 0; LINE_COUNT = 129; MEMORY_SIZE = 3827; PROTECT = READ_WRITE; TCD: STACK_SIZE = 2000, 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: SO[5:User LED#1]=(ON) ; 2: DO[11:VACUUM PUMP]=ON ; 3: DO[2:ROBOT NO CONTROL]=ON ; 4: DO[1:PERMIT CLMP CLOSE]=ON ; 5: IF R[195:FAKE AUTO]=1,JMP LBL[21] ; 6: WAIT DI[8:FULLY AUTO]=ON ; 7: WAIT DI[10:MOLD CLOSED]=ON ; 8: LBL[21] ; 9: DO[2:ROBOT NO CONTROL]=OFF ; 10: DO[1:PERMIT CLMP CLOSE]=OFF ; 11: ; 12: !SETTING POSITIONS ; 13: R[199:IN MOLD AREA]=0 ; 14: R[198:CONVEY AREA]=1 ; 15: R[197:SETUP AREA]=0 ; 16: ; 17: !APPROACH MACHINE ; 18:J P[1] 10% CNT100 ; 19:J P[2] 10% CNT100 ; 20: ; 21: !APPROACH MACHINE CLOSER ; 22:J P[3] 10% CNT100 ; 23:J P[4] 10% CNT100 ; 24: ; 25: !WAITING ON MACHINE ; 26: WAIT DI[1:MOLD IS OPEN]=ON ; 27: IF R[195:FAKE AUTO]=1,JMP LBL[14] ; 28: WAIT DI[8:FULLY AUTO]=ON ; 29: LBL[14] ; 30: ; 31: !SETTING OUTPUTS ; 32: DO[2:ROBOT NO CONTROL]=OFF ; 33: DO[1:PERMIT CLMP CLOSE]=OFF ; 34: DO[4:PERMIT EJCT FWD]=OFF ; 35: DO[3:PERMIT EJCT RET]=OFF ; 36: DO[10:GRIPPER]=OFF ; 37: DO[7:VACUUM]=OFF ; 38: ; 39: !SETTING POSITION REGISTERS ; 40: R[199:IN MOLD AREA]=1 ; 41: R[198:CONVEY AREA]=0 ; 42: R[197:SETUP AREA]=0 ; 43: ; 44: !ENTERING MOLD ; 45: IF R[195:FAKE AUTO]=1,JMP LBL[16] ; 46: WAIT DI[8:FULLY AUTO]=ON ; 47: LBL[16] ; 48:L P[5] 1100mm/sec CNT100 ; 49: IF R[195:FAKE AUTO]=1,JMP LBL[11] ; 50: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 51: LBL[11] ; 52:L P[6] 1000mm/sec CNT100 ; 53: IF R[195:FAKE AUTO]=1,JMP LBL[12] ; 54: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 55: LBL[12] ; 56:L P[7] 800mm/sec CNT100 ; 57: IF R[195:FAKE AUTO]=1,JMP LBL[13] ; 58: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 59: LBL[13] ; 60:L P[8] 600mm/sec CNT100 ; 61: ; 62: !APPROACH PICK PART ; 63: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 64:L P[9] 300mm/sec CNT100 ; 65: ; 66: !PICK PART POSITION ; 67: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 68:L P[10] 200mm/sec FINE ; 69: ; 70: !VACUUM AND EJECT ON ; 71: DO[7:VACUUM]=ON ; 72: DO[4:PERMIT EJCT FWD]=ON ; 73: WAIT R[21] ; 74: DO[4:PERMIT EJCT FWD]=OFF ; 75: ; 76: !CHECKING VACUUM SENSOR ; 77: WAIT R[6] ; 78: JMP LBL[100] ; 79: IF R[15:VACUUM SENSOR 1]=0,JMP LBL[2] ; 80: WAIT DI[2:VACUUM MADE]=ON ; 81: LBL[2] ; 82: DO[4:PERMIT EJCT FWD]=ON ; 83: DO[3:PERMIT EJCT RET]=OFF ; 84: LBL[100] ; 85: ; 86: !RUN GRIP PROGRAM ; 87: CALL GRIPPER ; 88: ; 89: !RETRACT WITH PART ; 90: OVERRIDE=R[8:PICK SPD OVERIDE] ; 91: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 92:L P[11] 35mm/sec FINE ; 93: OVERRIDE=100% ; 94: ; 95: !CHECKING GRIPPER SENSOR ; 96: IF R[16:GRIP SENSOR 1]=0,JMP LBL[3] ; 97: IF RI[1:OP SIDE GRIPPER]=OFF OR RI[2:TOP GRIPPER]=OFF OR : RI[3:NON OP_GRIPPER]=OFF OR RI[4:BOTTOM GRIPPER]=OFF,CALL RER_HOME ; 98: LBL[3] ; 99: ; 100: IF R[15:VACUUM SENSOR 1]=0,JMP LBL[9] ; 101: WAIT DI[2:VACUUM MADE]=ON ; 102: LBL[9] ; 103: ; 104: !ALLOW EJECT RETURN ; 105: DO[3:PERMIT EJCT RET]=ON ; 106: ; 107: !NOT ALLOW EJECT FORWARD ; 108: DO[4:PERMIT EJCT FWD]=OFF ; 109: ; 110: !START TO LEAVE MOLD ; 111:L P[12] 400mm/sec CNT100 ; 112: ; 113: !SPRAYING MOLD SEQUENCE ; 114: R[27:CURRENT SPRY CNT]=R[27:CURRENT SPRY CNT]+1 ; 115: IF R[27:CURRENT SPRY CNT]<R[26:OFTEN TO SPRAY],JMP LBL[6] ; 116: R[27:CURRENT SPRY CNT]=0 ; 117: CALL SPR14001 ; 118: JMP LBL[8] ; 119: LBL[6] ; 120: ; 121: !LEAVING MOLD AREA ; 122:L P[13] 400mm/sec CNT100 ; 123:L P[14] 350mm/sec CNT100 ; 124:L P[15] 350mm/sec CNT100 ; 125:L P[16] 350mm/sec CNT100 ; 126: LBL[8] ; 127:L P[17] 500mm/sec CNT100 ; 128: LBL[20] ; 129: LBL[15] ; /POS
Code
Display More/PROG CONV_IGT /ATTR OWNER = MNEDITOR; COMMENT = "IGT_CONVEY MOVES"; PROG_SIZE = 1595; CREATE = DATE 19-01-14 TIME 15:24:02; MODIFIED = DATE 19-01-14 TIME 15:24:02; FILE_NAME = CONVEY; VERSION = 0; LINE_COUNT = 49; MEMORY_SIZE = 2015; PROTECT = READ_WRITE; TCD: STACK_SIZE = 4000, 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: !LEAVING MACHINE AREA ; 2: R[199:IN MOLD AREA]=0 ; 3: R[198:CONVEY AREA]=1 ; 4: R[197:SETUP AREA]=0 ; 5:J P[1:LEAVE MACHINE] 20% CNT100 ; 6: !CHECKING VAC SENSOR ; 7: IF R[15:VACUUM SENSOR 1]=0,JMP LBL[2] ; 8: IF DI[2:VACUUM MADE]=OFF,CALL ABORTIT ; 9: LBL[2] ; 10: ; 11: !CHECKING GRIPPER SENSOR ; 12: IF R[16:GRIP SENSOR 1]=0,JMP LBL[3] ; 13: IF RI[1:OP SIDE GRIPPER]=OFF OR RI[2:TOP GRIPPER]=OFF OR : RI[3:NON OP_GRIPPER]=OFF OR RI[4:BOTTOM GRIPPER]=OFF,CALL ABORTIT ; 14: LBL[3] ; 15: ; 16: !ALLOW CLAMP TO CLOSE ; 17: DO[1:PERMIT CLMP CLOSE]=ON ; 18: ; 19: !ON WAY OVER TO CONVEYOR ; 20:J P[3] 15% CNT100 ; 21:J P[5] 15% CNT100 ; 22:J P[9] 15% CNT100 ; 23: ; 24: !PART DROP AT CONVEYOR ; 25:L P[6] 500mm/sec FINE ; 26: WAIT R[5] ; 27: DO[7:VACUUM]=OFF ; 28: WAIT DI[2:VACUUM MADE]=OFF ; 29: DO[10:GRIPPER]=OFF ; 30: WAIT R[1] ; 31: RUN CONV_RUN ; 32: ; 33: !RAISING ABOVE CONVEYOR ; 34:L P[7] 200mm/sec CNT100 ; 35: ; 36: !STOP CLAMP FROM CLOSING ; 37: WAIT DI[10:MOLD CLOSED]=ON ; 38: DO[1:PERMIT CLMP CLOSE]=OFF ; 39: DO[4:PERMIT EJCT FWD]=OFF ; 40: DO[3:PERMIT EJCT RET]=OFF ; 41: ; 42: !WAY ABOVE CONVEYOR ; 43:J P[8] 10% CNT100 ; 44: ; 45: !SETTING REGISTERS ; 46: R[199:IN MOLD AREA]=0 ; 47: R[198:CONVEY AREA]=0 ; 48: R[197:SETUP AREA]=0 ; 49: ; /END
-
FCTN>Abort All will abort all programs.A fault will usually just pause the program, not abort it. You could then press reset and resume. However, since you are triggering this all with a User Key and Macro, I don't believe you can resume from a fault. That is one of the reasons why I do not use Macro's.
i think i was updating my post when you made this reply.
yea, i dont think i can restart a program.
and this is from above.
i currently have a BG program running, should i add to it stating that if SO(fault light) to call abortit ?that should kill all running as well ?
-
The only way your current program ends is if the condition is met to call the ABORTIT program.
11: SELECT R[19:MOLD NUMBER]=0,CALL ABORTIT ;
12: IF R[17:FRONT EJECT 1]>=1 AND R[18:REAR EJECT 1]=1,CALL ABORTIT ;Usually I will add a Stop push button that goes to a DI. Then in your program loop you can add "IF DI[], JMP LBL 999". Put Label 999 at the end of the program.
But a FCTN and abort all, will end all programs, right ?
and any "fault" will end all programs, right ?
i currently have a BG program running, should i add to it stating that if SO(fault light) to call abort it ?
-
This is OK looping at the higher level because it is only the one instance of this program. It is not the looping that is the problem, but the calling over and over programs which don't terminate. The memory for those programs doesn't free up. That is what is causing your stack overflow.thanks for the explanation.
I will report back if i hear it goes down again.
-
2. Now after CONV_IGT finishes you go back to the line 27 of EJ_REAR, which will finish and go back to line 15 of EJCT_F_R.3. You need to add a JMP LBL at line 15 of EJCT_F_R to go to a previous spot in the program where you want to start. This could be LBL 2, or if you want to start over at the top of EJCT_F_R, add another label at the very beginning.
So with these changes you should see that your top level program "EJCT_F_R" only has 1 instance, and will continue to loop until ABORTIT is called. And in fact all of the other programs will only create 1 instance at a time. Whenever you hit the /END in your program, it will destroy that instance.
Okay, thanks.
That is done and it is running still.
However, doesn’t putting a jump label at the bottom of a program and the label at the top also make a loop, because it will never hit that end.
Just asking because I am still learning and this has helped me tremendously.
Appreciate it.
Chris
-
It would help me to understand if I knew what your main program is the general sequence, but I will take a stab at it.It appears that you are using a call statement to "restart" the sequence as you stated, which is not the correct method. Say you have Program A which calls Program B. When Program B is finished it will automatically resume on the next line of code in Program A. If Program A needs to repeat then there should be logic in Program A that Jumps back up, so it restarts itself.
When you have another program "restarting" your sequence by making a recursive call, what you are actually doing is creating a new instance of that program, without ever ending the previous instance. Over time these instances build up until you have hundreds of them and the robot controller runs out of memory. You should not call a program that already exists on the call stack, because that will generate a new instance of that program. Instead you need to let the sub-program's finish to get back up to the original calling program.
Alrighty,
i have it so when i push user 1
Code
Display More/PROG PB1 Macro /ATTR OWNER = MNEDITOR; COMMENT = "CYCLE START"; PROG_SIZE = 124; CREATE = DATE 18-12-11 TIME 14:01:11; MODIFIED = DATE 19-01-10 TIME 10:27:21; FILE_NAME = ; VERSION = 0; LINE_COUNT = 1; MEMORY_SIZE = 468; PROTECT = READ_WRITE; TCD: STACK_SIZE = 2000, TASK_PRIORITY = 50, TIME_SLICE = 0, BUSY_LAMP_OFF = 0, ABORT_REQUEST = 0, PAUSE_REQUEST = 0; DEFAULT_GROUP = *,*,*,*,*; CONTROL_CODE = 00000000 00000000; /MN 1: CALL EJCT_F_R ; /POS /END
then it calls EJCT_F_R
Code
Display More/PROG EJCT_F_R /ATTR OWNER = MNEDITOR; COMMENT = "FRONT OR REAR"; PROG_SIZE = 512; CREATE = DATE 18-12-11 TIME 14:11:13; MODIFIED = DATE 18-12-14 TIME 15:57:09; FILE_NAME = SETUP; VERSION = 0; LINE_COUNT = 14; MEMORY_SIZE = 992; PROTECT = READ_WRITE; TCD: STACK_SIZE = 3000, 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: COL DETECT ON ; 2: IF R[199:IN MOLD AREA]=0 AND R[198:CONVEY AREA]=0 AND : R[197:SETUP AREA]=0,JMP LBL[1] ; 3: IF R[199:IN MOLD AREA]=1 AND R[17:FRONT EJECT 1]=1,CALL FRT_HOME ; 4: IF R[199:IN MOLD AREA]=1 AND R[18:REAR EJECT 1]=1,CALL RER_HOME ; 5: IF R[198:CONVEY AREA]=1,CALL CON_HOME ; 6: IF R[197:SETUP AREA]=1,CALL SET_HOME ; 7: LBL[1] ; 8: IF SO[5:User LED#1]=ON,JMP LBL[2] ; 9: CALL HOME ; 10: LBL[2] ; 11: SELECT R[19:MOLD NUMBER]=0,CALL ABORTIT ; 12: IF R[17:FRONT EJECT 1]>=1 AND R[18:REAR EJECT 1]=1,CALL ABORTIT ; 13: IF R[17:FRONT EJECT 1]=1,CALL EJ_FRONT ; 14: IF R[18:REAR EJECT 1]=1,CALL EJ_REAR ; /POS /END
then if a register 17 or 18 would equal 1 it would then call a different program
Code
Display More/PROG EJ_REAR /ATTR OWNER = MNEDITOR; COMMENT = "REAR_EJECT_MAIN"; PROG_SIZE = 798; CREATE = DATE 18-12-11 TIME 13:56:21; MODIFIED = DATE 19-01-11 TIME 08:33:29; FILE_NAME = REAR_EJ; VERSION = 0; LINE_COUNT = 29; MEMORY_SIZE = 1266; PROTECT = READ_WRITE; TCD: STACK_SIZE = 3000, 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: PAYLOAD[3] ; 2: IF SO[5:User LED#1]=OFF,CALL CG_ADJST ; 3: IF SO[5:User LED#1]=OFF,CALL HOME ; 4: SO[5:User LED#1]=(ON) ; 5: ; 6: !GO HOME ABOVE CONVEYOR ; 7: IF R[199:IN MOLD AREA]=1,CALL RER_HOME ; 8: IF R[198:CONVEY AREA]=1,CALL CON_HOME ; 9: IF R[197:SETUP AREA]=1,CALL SET_HOME ; 10: ; 11: !WAITING ON INPUTS ; 12: ; 13: JMP LBL[10] ; 14: ; 15: CALL ENTER_IO ; 16: ; 17: LBL[10] ; 18: ; 19: !ENTER TOOL NUMBER HERE ; 20: SELECT R[19:MOLD NUMBER]=0,CALL ABORTIT ; 21: SELECT R[19:MOLD NUMBER]=14001,CALL PRG14001 ; 22: SELECT R[19:MOLD NUMBER]=14016,CALL PRG14016 ; 23: SELECT R[19:MOLD NUMBER]=6022,CALL PRG06022 ; 24: SELECT R[19:MOLD NUMBER]=16042,CALL PRG16042 ; 25: SELECT R[19:MOLD NUMBER]=13002,CALL PRG13002 ; 26: IF R[19:MOLD NUMBER]=14001 OR R[19:MOLD NUMBER]=14016,CALL CONV_IGT ; 27: IF R[19:MOLD NUMBER]=14001 OR R[19:MOLD NUMBER]=14016,JMP LBL[2] ; 28: CALL CONVEY ; 29: LBL[2] ; /POS /END
then since R 19 equals 14001, it would call that program.
Code
Display More/PROG PRG14001 /ATTR OWNER = MNEDITOR; COMMENT = "14001 MOLD REAR"; PROG_SIZE = 3335; CREATE = DATE 19-01-14 TIME 09:25:19; MODIFIED = DATE 19-01-14 TIME 09:25:19; FILE_NAME = PRG14016; VERSION = 0; LINE_COUNT = 129; MEMORY_SIZE = 3827; PROTECT = READ_WRITE; TCD: STACK_SIZE = 2000, 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: SO[5:User LED#1]=(ON) ; 2: DO[11:VACUUM PUMP]=ON ; 3: DO[2:ROBOT NO CONTROL]=ON ; 4: DO[1:PERMIT CLMP CLOSE]=ON ; 5: IF R[195:FAKE AUTO]=1,JMP LBL[21] ; 6: WAIT DI[8:FULLY AUTO]=ON ; 7: WAIT DI[10:MOLD CLOSED]=ON ; 8: LBL[21] ; 9: DO[2:ROBOT NO CONTROL]=OFF ; 10: DO[1:PERMIT CLMP CLOSE]=OFF ; 11: ; 12: !SETTING POSITIONS ; 13: R[199:IN MOLD AREA]=0 ; 14: R[198:CONVEY AREA]=1 ; 15: R[197:SETUP AREA]=0 ; 16: ; 17: !APPROACH MACHINE ; 18:J P[1] 10% CNT100 ; 19:J P[2] 10% CNT100 ; 20: ; 21: !APPROACH MACHINE CLOSER ; 22:J P[3] 10% CNT100 ; 23:J P[4] 10% CNT100 ; 24: ; 25: !WAITING ON MACHINE ; 26: WAIT DI[1:MOLD IS OPEN]=ON ; 27: IF R[195:FAKE AUTO]=1,JMP LBL[14] ; 28: WAIT DI[8:FULLY AUTO]=ON ; 29: LBL[14] ; 30: ; 31: !SETTING OUTPUTS ; 32: DO[2:ROBOT NO CONTROL]=OFF ; 33: DO[1:PERMIT CLMP CLOSE]=OFF ; 34: DO[4:PERMIT EJCT FWD]=OFF ; 35: DO[3:PERMIT EJCT RET]=OFF ; 36: DO[10:GRIPPER]=OFF ; 37: DO[7:VACUUM]=OFF ; 38: ; 39: !SETTING POSITION REGISTERS ; 40: R[199:IN MOLD AREA]=1 ; 41: R[198:CONVEY AREA]=0 ; 42: R[197:SETUP AREA]=0 ; 43: ; 44: !ENTERING MOLD ; 45: IF R[195:FAKE AUTO]=1,JMP LBL[16] ; 46: WAIT DI[8:FULLY AUTO]=ON ; 47: LBL[16] ; 48:L P[5] 1100mm/sec CNT100 ; 49: IF R[195:FAKE AUTO]=1,JMP LBL[11] ; 50: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 51: LBL[11] ; 52:L P[6] 1000mm/sec CNT100 ; 53: IF R[195:FAKE AUTO]=1,JMP LBL[12] ; 54: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 55: LBL[12] ; 56:L P[7] 800mm/sec CNT100 ; 57: IF R[195:FAKE AUTO]=1,JMP LBL[13] ; 58: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 59: LBL[13] ; 60:L P[8] 600mm/sec CNT100 ; 61: ; 62: !APPROACH PICK PART ; 63: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 64:L P[9] 300mm/sec CNT100 ; 65: ; 66: !PICK PART POSITION ; 67: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 68:L P[10] 200mm/sec FINE ; 69: ; 70: !VACUUM AND EJECT ON ; 71: DO[7:VACUUM]=ON ; 72: DO[4:PERMIT EJCT FWD]=ON ; 73: WAIT R[21] ; 74: DO[4:PERMIT EJCT FWD]=OFF ; 75: ; 76: !CHECKING VACUUM SENSOR ; 77: WAIT R[6] ; 78: JMP LBL[100] ; 79: IF R[15:VACUUM SENSOR 1]=0,JMP LBL[2] ; 80: WAIT DI[2:VACUUM MADE]=ON ; 81: LBL[2] ; 82: DO[4:PERMIT EJCT FWD]=ON ; 83: DO[3:PERMIT EJCT RET]=OFF ; 84: LBL[100] ; 85: ; 86: !RUN GRIP PROGRAM ; 87: CALL GRIPPER ; 88: ; 89: !RETRACT WITH PART ; 90: OVERRIDE=R[8:PICK SPD OVERIDE] ; 91: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 92:L P[11] 35mm/sec FINE ; 93: OVERRIDE=100% ; 94: ; 95: !CHECKING GRIPPER SENSOR ; 96: IF R[16:GRIP SENSOR 1]=0,JMP LBL[3] ; 97: IF RI[1:OP SIDE GRIPPER]=OFF OR RI[2:TOP GRIPPER]=OFF OR : RI[3:NON OP_GRIPPER]=OFF OR RI[4:BOTTOM GRIPPER]=OFF,CALL RER_HOME ; 98: LBL[3] ; 99: ; 100: IF R[15:VACUUM SENSOR 1]=0,JMP LBL[9] ; 101: WAIT DI[2:VACUUM MADE]=ON ; 102: LBL[9] ; 103: ; 104: !ALLOW EJECT RETURN ; 105: DO[3:PERMIT EJCT RET]=ON ; 106: ; 107: !NOT ALLOW EJECT FORWARD ; 108: DO[4:PERMIT EJCT FWD]=OFF ; 109: ; 110: !START TO LEAVE MOLD ; 111:L P[12] 400mm/sec CNT100 ; 112: ; 113: !SPRAYING MOLD SEQUENCE ; 114: R[27:CURRENT SPRY CNT]=R[27:CURRENT SPRY CNT]+1 ; 115: IF R[27:CURRENT SPRY CNT]<R[26:OFTEN TO SPRAY],JMP LBL[6] ; 116: R[27:CURRENT SPRY CNT]=0 ; 117: CALL SPR14001 ; 118: JMP LBL[8] ; 119: LBL[6] ; 120: ; 121: !LEAVING MOLD AREA ; 122:L P[13] 400mm/sec CNT100 ; 123:L P[14] 350mm/sec CNT100 ; 124:L P[15] 350mm/sec CNT100 ; 125:L P[16] 350mm/sec CNT100 ; 126: LBL[8] ; 127:L P[17] 500mm/sec CNT100 ; 128: LBL[20] ; 129: LBL[15] ; /POS
then it calls conv_igt based on R 19 from the EJ_rear program
Code
Display More/PROG CONV_IGT /ATTR OWNER = MNEDITOR; COMMENT = "IGT_CONVEY MOVES"; PROG_SIZE = 1727; CREATE = DATE 19-01-14 TIME 09:56:02; MODIFIED = DATE 19-01-14 TIME 09:56:02; FILE_NAME = CONVEY; VERSION = 0; LINE_COUNT = 53; MEMORY_SIZE = 2147; PROTECT = READ_WRITE; TCD: STACK_SIZE = 4000, 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: !LEAVING MACHINE AREA ; 2: R[199:IN MOLD AREA]=0 ; 3: R[198:CONVEY AREA]=1 ; 4: R[197:SETUP AREA]=0 ; 5:J P[1:LEAVE MACHINE] 20% CNT100 ; 6: !CHECKING VAC SENSOR ; 7: IF R[15:VACUUM SENSOR 1]=0,JMP LBL[2] ; 8: IF DI[2:VACUUM MADE]=OFF,CALL ABORTIT ; 9: LBL[2] ; 10: ; 11: !CHECKING GRIPPER SENSOR ; 12: IF R[16:GRIP SENSOR 1]=0,JMP LBL[3] ; 13: IF RI[1:OP SIDE GRIPPER]=OFF OR RI[2:TOP GRIPPER]=OFF OR : RI[3:NON OP_GRIPPER]=OFF OR RI[4:BOTTOM GRIPPER]=OFF,CALL ABORTIT ; 14: LBL[3] ; 15: ; 16: !ALLOW CLAMP TO CLOSE ; 17: DO[1:PERMIT CLMP CLOSE]=ON ; 18: ; 19: !ON WAY OVER TO CONVEYOR ; 20:J P[3] 15% CNT100 ; 21:J P[5] 15% CNT100 ; 22:J P[9] 15% CNT100 ; 23: ; 24: !PART DROP AT CONVEYOR ; 25:L P[6] 500mm/sec FINE ; 26: WAIT R[5] ; 27: DO[7:VACUUM]=OFF ; 28: WAIT DI[2:VACUUM MADE]=OFF ; 29: DO[10:GRIPPER]=OFF ; 30: WAIT R[1] ; 31: RUN CONV_RUN ; 32: ; 33: !RAISING ABOVE CONVEYOR ; 34:L P[7] 200mm/sec CNT100 ; 35: ; 36: !STOP CLAMP FROM CLOSING ; 37: WAIT DI[10:MOLD CLOSED]=ON ; 38: DO[1:PERMIT CLMP CLOSE]=OFF ; 39: DO[4:PERMIT EJCT FWD]=OFF ; 40: DO[3:PERMIT EJCT RET]=OFF ; 41: ; 42: !WAY ABOVE CONVEYOR ; 43:J P[8] 10% CNT100 ; 44: ; 45: !SETTING REGISTERS ; 46: R[199:IN MOLD AREA]=0 ; 47: R[198:CONVEY AREA]=0 ; 48: R[197:SETUP AREA]=0 ; 49: ; 50: !CALLING FRONT OR REAR EJECT ; 51: IF R[17:FRONT EJECT 1]>=1 AND R[18:REAR EJECT 1]=1,CALL ABORTIT ; 52: IF R[17:FRONT EJECT 1]=1,CALL EJ_FRONT ; 53: IF R[18:REAR EJECT 1]=1,CALL EJ_REAR ; /POS
then it re-calls the programs all over again.
can you provide further direction ?
-
Line 26 of EJ_REAR calls CONV_IGT, line 53 of CONV_IGT calls EJ_REAR. You need to get rid of this recursive call.thanks, i did see this but i cant think of another way to call these programs.
26: IF R[19:MOLD NUMBER]=14001 OR R[19:MOLD NUMBER]=14016,CALL CONV_IGT ;
calls a program based on register value, in which it is in this program, how else should I call this program up based on a register value ?53: IF R[18:REAR EJECT 1]=1,CALL EJ_REAR ;
restarts the sequence, without this(I tried a jump label around it) the program just waits. -
Hello Everyone,
working on a R200iA, with a Rj3iB teach pendant.
My issue is after the robot runs for 3-4 hours i am getting a stack overflow.
i have already increased the size to 4000, but that has not corrected my issue.
I am putting my programs here for some help diagnosing the issues.
I may not be the best programmer or have things worded properly, but it works(mostly).
I have seen the error in the conv_igt, and also in the Prog14001 programs.
please help.
thanks
ChrisCode
Display More/PROG PB1 Macro /ATTR OWNER = MNEDITOR; COMMENT = "CYCLE START"; PROG_SIZE = 124; CREATE = DATE 18-12-11 TIME 14:01:11; MODIFIED = DATE 19-01-10 TIME 10:27:21; FILE_NAME = ; VERSION = 0; LINE_COUNT = 1; MEMORY_SIZE = 468; PROTECT = READ_WRITE; TCD: STACK_SIZE = 2000, TASK_PRIORITY = 50, TIME_SLICE = 0, BUSY_LAMP_OFF = 0, ABORT_REQUEST = 0, PAUSE_REQUEST = 0; DEFAULT_GROUP = *,*,*,*,*; CONTROL_CODE = 00000000 00000000; /MN 1: CALL EJCT_F_R ; /POS /END
Code
Display More/PROG EJCT_F_R /ATTR OWNER = MNEDITOR; COMMENT = "FRONT OR REAR"; PROG_SIZE = 512; CREATE = DATE 18-12-11 TIME 14:11:13; MODIFIED = DATE 18-12-14 TIME 15:57:09; FILE_NAME = SETUP; VERSION = 0; LINE_COUNT = 14; MEMORY_SIZE = 992; PROTECT = READ_WRITE; TCD: STACK_SIZE = 3000, 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: COL DETECT ON ; 2: IF R[199:IN MOLD AREA]=0 AND R[198:CONVEY AREA]=0 AND : R[197:SETUP AREA]=0,JMP LBL[1] ; 3: IF R[199:IN MOLD AREA]=1 AND R[17:FRONT EJECT 1]=1,CALL FRT_HOME ; 4: IF R[199:IN MOLD AREA]=1 AND R[18:REAR EJECT 1]=1,CALL RER_HOME ; 5: IF R[198:CONVEY AREA]=1,CALL CON_HOME ; 6: IF R[197:SETUP AREA]=1,CALL SET_HOME ; 7: LBL[1] ; 8: IF SO[5:User LED#1]=ON,JMP LBL[2] ; 9: CALL HOME ; 10: LBL[2] ; 11: SELECT R[19:MOLD NUMBER]=0,CALL ABORTIT ; 12: IF R[17:FRONT EJECT 1]>=1 AND R[18:REAR EJECT 1]=1,CALL ABORTIT ; 13: IF R[17:FRONT EJECT 1]=1,CALL EJ_FRONT ; 14: IF R[18:REAR EJECT 1]=1,CALL EJ_REAR ; /POS /END
Code
Display More/PROG EJ_REAR /ATTR OWNER = MNEDITOR; COMMENT = "REAR_EJECT_MAIN"; PROG_SIZE = 798; CREATE = DATE 18-12-11 TIME 13:56:21; MODIFIED = DATE 19-01-11 TIME 08:33:29; FILE_NAME = REAR_EJ; VERSION = 0; LINE_COUNT = 29; MEMORY_SIZE = 1266; PROTECT = READ_WRITE; TCD: STACK_SIZE = 3000, 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: PAYLOAD[3] ; 2: IF SO[5:User LED#1]=OFF,CALL CG_ADJST ; 3: IF SO[5:User LED#1]=OFF,CALL HOME ; 4: SO[5:User LED#1]=(ON) ; 5: ; 6: !GO HOME ABOVE CONVEYOR ; 7: IF R[199:IN MOLD AREA]=1,CALL RER_HOME ; 8: IF R[198:CONVEY AREA]=1,CALL CON_HOME ; 9: IF R[197:SETUP AREA]=1,CALL SET_HOME ; 10: ; 11: !WAITING ON INPUTS ; 12: ; 13: JMP LBL[10] ; 14: ; 15: CALL ENTER_IO ; 16: ; 17: LBL[10] ; 18: ; 19: !ENTER TOOL NUMBER HERE ; 20: SELECT R[19:MOLD NUMBER]=0,CALL ABORTIT ; 21: SELECT R[19:MOLD NUMBER]=14001,CALL PRG14001 ; 22: SELECT R[19:MOLD NUMBER]=14016,CALL PRG14016 ; 23: SELECT R[19:MOLD NUMBER]=6022,CALL PRG06022 ; 24: SELECT R[19:MOLD NUMBER]=16042,CALL PRG16042 ; 25: SELECT R[19:MOLD NUMBER]=13002,CALL PRG13002 ; 26: IF R[19:MOLD NUMBER]=14001 OR R[19:MOLD NUMBER]=14016,CALL CONV_IGT ; 27: IF R[19:MOLD NUMBER]=14001 OR R[19:MOLD NUMBER]=14016,JMP LBL[2] ; 28: CALL CONVEY ; 29: LBL[2] ; /POS /END
Code
Display More/PROG PRG14001 /ATTR OWNER = MNEDITOR; COMMENT = "14001 MOLD REAR"; PROG_SIZE = 3335; CREATE = DATE 19-01-14 TIME 09:25:19; MODIFIED = DATE 19-01-14 TIME 09:25:19; FILE_NAME = PRG14016; VERSION = 0; LINE_COUNT = 129; MEMORY_SIZE = 3827; PROTECT = READ_WRITE; TCD: STACK_SIZE = 2000, 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: SO[5:User LED#1]=(ON) ; 2: DO[11:VACUUM PUMP]=ON ; 3: DO[2:ROBOT NO CONTROL]=ON ; 4: DO[1:PERMIT CLMP CLOSE]=ON ; 5: IF R[195:FAKE AUTO]=1,JMP LBL[21] ; 6: WAIT DI[8:FULLY AUTO]=ON ; 7: WAIT DI[10:MOLD CLOSED]=ON ; 8: LBL[21] ; 9: DO[2:ROBOT NO CONTROL]=OFF ; 10: DO[1:PERMIT CLMP CLOSE]=OFF ; 11: ; 12: !SETTING POSITIONS ; 13: R[199:IN MOLD AREA]=0 ; 14: R[198:CONVEY AREA]=1 ; 15: R[197:SETUP AREA]=0 ; 16: ; 17: !APPROACH MACHINE ; 18:J P[1] 10% CNT100 ; 19:J P[2] 10% CNT100 ; 20: ; 21: !APPROACH MACHINE CLOSER ; 22:J P[3] 10% CNT100 ; 23:J P[4] 10% CNT100 ; 24: ; 25: !WAITING ON MACHINE ; 26: WAIT DI[1:MOLD IS OPEN]=ON ; 27: IF R[195:FAKE AUTO]=1,JMP LBL[14] ; 28: WAIT DI[8:FULLY AUTO]=ON ; 29: LBL[14] ; 30: ; 31: !SETTING OUTPUTS ; 32: DO[2:ROBOT NO CONTROL]=OFF ; 33: DO[1:PERMIT CLMP CLOSE]=OFF ; 34: DO[4:PERMIT EJCT FWD]=OFF ; 35: DO[3:PERMIT EJCT RET]=OFF ; 36: DO[10:GRIPPER]=OFF ; 37: DO[7:VACUUM]=OFF ; 38: ; 39: !SETTING POSITION REGISTERS ; 40: R[199:IN MOLD AREA]=1 ; 41: R[198:CONVEY AREA]=0 ; 42: R[197:SETUP AREA]=0 ; 43: ; 44: !ENTERING MOLD ; 45: IF R[195:FAKE AUTO]=1,JMP LBL[16] ; 46: WAIT DI[8:FULLY AUTO]=ON ; 47: LBL[16] ; 48:L P[5] 1100mm/sec CNT100 ; 49: IF R[195:FAKE AUTO]=1,JMP LBL[11] ; 50: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 51: LBL[11] ; 52:L P[6] 1000mm/sec CNT100 ; 53: IF R[195:FAKE AUTO]=1,JMP LBL[12] ; 54: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 55: LBL[12] ; 56:L P[7] 800mm/sec CNT100 ; 57: IF R[195:FAKE AUTO]=1,JMP LBL[13] ; 58: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 59: LBL[13] ; 60:L P[8] 600mm/sec CNT100 ; 61: ; 62: !APPROACH PICK PART ; 63: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 64:L P[9] 300mm/sec CNT100 ; 65: ; 66: !PICK PART POSITION ; 67: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 68:L P[10] 200mm/sec FINE ; 69: ; 70: !VACUUM AND EJECT ON ; 71: DO[7:VACUUM]=ON ; 72: DO[4:PERMIT EJCT FWD]=ON ; 73: WAIT R[21] ; 74: DO[4:PERMIT EJCT FWD]=OFF ; 75: ; 76: !CHECKING VACUUM SENSOR ; 77: WAIT R[6] ; 78: JMP LBL[100] ; 79: IF R[15:VACUUM SENSOR 1]=0,JMP LBL[2] ; 80: WAIT DI[2:VACUUM MADE]=ON ; 81: LBL[2] ; 82: DO[4:PERMIT EJCT FWD]=ON ; 83: DO[3:PERMIT EJCT RET]=OFF ; 84: LBL[100] ; 85: ; 86: !RUN GRIP PROGRAM ; 87: CALL GRIPPER ; 88: ; 89: !RETRACT WITH PART ; 90: OVERRIDE=R[8:PICK SPD OVERIDE] ; 91: IF DI[8:FULLY AUTO]=OFF,CALL RER_HOME ; 92:L P[11] 35mm/sec FINE ; 93: OVERRIDE=100% ; 94: ; 95: !CHECKING GRIPPER SENSOR ; 96: IF R[16:GRIP SENSOR 1]=0,JMP LBL[3] ; 97: IF RI[1:OP SIDE GRIPPER]=OFF OR RI[2:TOP GRIPPER]=OFF OR : RI[3:NON OP_GRIPPER]=OFF OR RI[4:BOTTOM GRIPPER]=OFF,CALL RER_HOME ; 98: LBL[3] ; 99: ; 100: IF R[15:VACUUM SENSOR 1]=0,JMP LBL[9] ; 101: WAIT DI[2:VACUUM MADE]=ON ; 102: LBL[9] ; 103: ; 104: !ALLOW EJECT RETURN ; 105: DO[3:PERMIT EJCT RET]=ON ; 106: ; 107: !NOT ALLOW EJECT FORWARD ; 108: DO[4:PERMIT EJCT FWD]=OFF ; 109: ; 110: !START TO LEAVE MOLD ; 111:L P[12] 400mm/sec CNT100 ; 112: ; 113: !SPRAYING MOLD SEQUENCE ; 114: R[27:CURRENT SPRY CNT]=R[27:CURRENT SPRY CNT]+1 ; 115: IF R[27:CURRENT SPRY CNT]<R[26:OFTEN TO SPRAY],JMP LBL[6] ; 116: R[27:CURRENT SPRY CNT]=0 ; 117: CALL SPR14001 ; 118: JMP LBL[8] ; 119: LBL[6] ; 120: ; 121: !LEAVING MOLD AREA ; 122:L P[13] 400mm/sec CNT100 ; 123:L P[14] 350mm/sec CNT100 ; 124:L P[15] 350mm/sec CNT100 ; 125:L P[16] 350mm/sec CNT100 ; 126: LBL[8] ; 127:L P[17] 500mm/sec CNT100 ; 128: LBL[20] ; 129: LBL[15] ; /POS
Code
Display MorePROG SPR14001 /ATTR OWNER = MNEDITOR; COMMENT = "SPRAY 14001"; PROG_SIZE = 1356; CREATE = DATE 19-01-11 TIME 13:58:14; MODIFIED = DATE 19-01-11 TIME 13:58:14; FILE_NAME = SPR14016; VERSION = 0; LINE_COUNT = 22; MEMORY_SIZE = 1616; 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:L P[1] 1000mm/sec CNT100 ; 2:J P[2] 10% FINE ; 3: CALL SPRAY ; 4:L P[3] 800mm/sec CNT100 ; 5:L P[4] 550mm/sec CNT100 ; 6:J P[5] 10% FINE ; 7: CALL SPRAY ; 8:J P[6] 15% FINE ; 9: CALL SPRAY ; 10:L P[14] 400mm/sec CNT100 ; 11:J P[7] 10% FINE ; 12: CALL SPRAY ; 13:J P[8] 30% CNT100 ; 14:J P[9] 20% CNT100 ; 15:J P[10] 10% FINE ; 16: CALL SPRAY ; 17:J P[11] 20% CNT100 ; 18:L P[12] 100mm/sec FINE ; 19: !SPRAYING 2 TIMES ; 20: CALL SPRAY ; 21: CALL SPRAY ; 22:J P[13] 35% CNT100 ; /POS
Code
Display More/PROG CONV_IGT /ATTR OWNER = MNEDITOR; COMMENT = "IGT_CONVEY MOVES"; PROG_SIZE = 1727; CREATE = DATE 19-01-14 TIME 09:56:02; MODIFIED = DATE 19-01-14 TIME 09:56:02; FILE_NAME = CONVEY; VERSION = 0; LINE_COUNT = 53; MEMORY_SIZE = 2147; PROTECT = READ_WRITE; TCD: STACK_SIZE = 4000, 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: !LEAVING MACHINE AREA ; 2: R[199:IN MOLD AREA]=0 ; 3: R[198:CONVEY AREA]=1 ; 4: R[197:SETUP AREA]=0 ; 5:J P[1:LEAVE MACHINE] 20% CNT100 ; 6: !CHECKING VAC SENSOR ; 7: IF R[15:VACUUM SENSOR 1]=0,JMP LBL[2] ; 8: IF DI[2:VACUUM MADE]=OFF,CALL ABORTIT ; 9: LBL[2] ; 10: ; 11: !CHECKING GRIPPER SENSOR ; 12: IF R[16:GRIP SENSOR 1]=0,JMP LBL[3] ; 13: IF RI[1:OP SIDE GRIPPER]=OFF OR RI[2:TOP GRIPPER]=OFF OR : RI[3:NON OP_GRIPPER]=OFF OR RI[4:BOTTOM GRIPPER]=OFF,CALL ABORTIT ; 14: LBL[3] ; 15: ; 16: !ALLOW CLAMP TO CLOSE ; 17: DO[1:PERMIT CLMP CLOSE]=ON ; 18: ; 19: !ON WAY OVER TO CONVEYOR ; 20:J P[3] 15% CNT100 ; 21:J P[5] 15% CNT100 ; 22:J P[9] 15% CNT100 ; 23: ; 24: !PART DROP AT CONVEYOR ; 25:L P[6] 500mm/sec FINE ; 26: WAIT R[5] ; 27: DO[7:VACUUM]=OFF ; 28: WAIT DI[2:VACUUM MADE]=OFF ; 29: DO[10:GRIPPER]=OFF ; 30: WAIT R[1] ; 31: RUN CONV_RUN ; 32: ; 33: !RAISING ABOVE CONVEYOR ; 34:L P[7] 200mm/sec CNT100 ; 35: ; 36: !STOP CLAMP FROM CLOSING ; 37: WAIT DI[10:MOLD CLOSED]=ON ; 38: DO[1:PERMIT CLMP CLOSE]=OFF ; 39: DO[4:PERMIT EJCT FWD]=OFF ; 40: DO[3:PERMIT EJCT RET]=OFF ; 41: ; 42: !WAY ABOVE CONVEYOR ; 43:J P[8] 10% CNT100 ; 44: ; 45: !SETTING REGISTERS ; 46: R[199:IN MOLD AREA]=0 ; 47: R[198:CONVEY AREA]=0 ; 48: R[197:SETUP AREA]=0 ; 49: ; 50: !CALLING FRONT OR REAR EJECT ; 51: IF R[17:FRONT EJECT 1]>=1 AND R[18:REAR EJECT 1]=1,CALL ABORTIT ; 52: IF R[17:FRONT EJECT 1]=1,CALL EJ_FRONT ; 53: IF R[18:REAR EJECT 1]=1,CALL EJ_REAR ; /POS
-
hello everyone.
I am working with a R200iA with a RJ3ib control.
So I have programmed many Fanucs and to be honest I am not sure the best program structure, or correct program structure or if it is simply a matter of preferences.
I have had some stack errors and i just raised the amount of memory for that program, and I haven't seen the stack errors since.
As of right now I am setting the robot up something to this format(in short), and alo include some I/O stuff in the mix for different items.
position(program a)
position(program a)
run program(program b)
position (program a)
position (program a)
call program,(program c) running a different program in this program(run program d)
postion (program a)
postion (program a)
postion(program a)
postion(program a)
call program,(program E)running a different program in this program((program F).
postion(program a)
postion(program a)
postion(program a)
When this program ends it starts from the top(there is no call label command)or should it not be calling different programs and everything just built into one single program and having all positions and IO signals, waits and register commands with the occasional run commands.
thanks for your help
Chris -
couldn't you just use axis limits ?
-
Ours came in 5 gallon pails and we have a pneumatic grease gun setup that sits on top of it. Your manuals should tell you how much grease each robot will take. I didn't get much hands on with this part of our shutdown maintenance but I believe there is a "feed" and a "dump" fitting. You loosen the dump fitting and attach a hose going to an empty pail and pump new grease in the other end until you can see new grease coming out of the dump. But lets see if someone else can chime in to verify.i also think that each axis has to be in a certain position, but i am also uncertain.
-
I'm not sure, but on that vintage controller jump labels might not be allowed at all. I'd that is the case, I would just replace the jump label with the SO off bit and copy the code twice.nation,
could you give me an example of the BG logic that i need to use instead of this ??
i really couldnt find the logic i needed without the jump labels involved.
-
That worked like a charm, thanks.
Now what’s a syntax error ?
When I try to run it from BG logic, that what I get.
Chris