It says SPRIME instead of PRIME and MC KILL doesn't exist here, I will use what I have in this case. At the same time, if I use SPRIME in the pc task, it is seen as a illegal variable, I will probably have to give up on this instruction unfortunately. I would like to ask, is there a way of removing programs from stack without using MC KILL
Code
.INTER_PANEL
1,5," Error"," "," "," ",6,0,2001
2,5," Repeat"," "," "," ",4,1,2002
3,1," "," Start"," Robot"," ",4,2,2006,0
4,1," "," Pause"," Robot"," ",4,2,2007,0
7,6," Program"," No.",1,0,-1,2010,2,0,3,1,0
8,1," "," Clear"," Program"," ",4,2,2008,0
9,5," MPower"," "," "," ",3,0,2003
17,5," Servos"," "," "," ",3,0,2004
25,5," Cycle"," "," "," ",4,0,2005
.END
.PROGRAM autostart.pc()
;
again:
100
IF SWITCH(REPEAT )==TRUE THEN
IF ((SIG(2006)==TRUE) AND (SWITCH(CS )==FALSE) AND (TASK(1)<>1)) THEN
IF SWITCH(POWER )==FALSE THEN
MC ZPOWER ON
SWAIT -2006;
IF SWITCH(POWER )==FALSE THEN
GOTO 100
WAIT SWITCH(POWER )==TRUE
END;
END;
IF TASK(1)==2 THEN
MC CONTINUE
ELSE
IF TASK(1)==0 THEN
SWAIT -2006;*************************;
MC EXECUTE pg0,,1;
END;
END;
END;
END;
;
;
;===========================================
; Interrupt and Clear Program Stack
;===========================================
;
IF SIG(2008)==TRUE THEN
TWAIT 0.15
MC HOLD
WAIT ((SWITCH(CS )==FALSE) AND (SWITCH(RGSO )==FALSE))
BITS 2010,2 = 1
TWAIT 0.1
MC ABORT
TWAIT 0.1
SWAIT 2006
SWAIT -2006
MC EXECUTE pg0,,1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END
;
;===========================================
; Hold Robot from button
;===========================================
;
IF ((SIG(2007)==TRUE) AND (SWITCH(CS )==TRUE) AND (SWITCH(RGSO )==TRUE)) THEN
MC HOLD
WAIT ((SWITCH(RGSO )==FALSE) AND (SWITCH(CS )==FALSE))
END
;
;===========================================
; Set IFP lamps to reflect status
;===========================================
;
IF SWITCH(ERROR )==TRUE THEN
SIGNAL 2001
ELSE
SIGNAL -2001
END
;
IF SWITCH(REPEAT )==TRUE THEN
SIGNAL 2002
ELSE
SIGNAL -2002
END
;
IF SWITCH(POWER )==TRUE THEN
SIGNAL 2003
ELSE
SIGNAL -2003
END
;
IF SWITCH(RGSO )==TRUE THEN
SIGNAL 2004
ELSE
SIGNAL -2004
END
;
IF SWITCH(CS )==TRUE THEN
SIGNAL 2005
ELSE
SIGNAL -2005
END
;
TWAIT 0.0016
GOTO again
.END
.PROGRAM pg0()
HOME
BREAK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
prod.no = BITS(2010,2)
;
CASE prod.no OF
VALUE 1:
CALL pg1
VALUE 2:
CALL pg2
VALUE 3:
CALL pg3
ANY :
HALT
END
;
HOME
BREAK
;
.END
.PROGRAM pg1()
ACCURACY 100
JMOVE #l1
ACCURACY 100
JMOVE #l2
ACCURACY 100
JMOVE #l3
ACCURACY 100
JMOVE #l1
ACCURACY 100
JMOVE #l2
ACCURACY 100
JMOVE #l3
ACCURACY 100
JMOVE #l1
ACCURACY 100
JMOVE #l2
ACCURACY 100
JMOVE #l3
ACCURACY 100
JMOVE #l1
RETURN
.END
.PROGRAM pg2()
JMOVE #p2
ACCURACY 100
JMOVE #l3
.END
.PROGRAM pg3()
JMOVE #p3
.END
.JOINTS
#l1 -46.708893 -37.902580 -144.682983 -58.194366 40.939236 7.610317
#l2 -76.424690 -35.992859 -153.777634 42.390236 40.939869 7.609248
#l3 -76.424690 -47.028023 -138.862549 -7.265913 -27.815447 7.608963
#p1 -46.708893 -37.902039 -144.683350 -58.199284 40.940502 7.611310
#p2 -74.472969 -36.988407 -152.004257 31.869734 35.513889 7.607113
#p3 -46.708893 -87.559731 -155.001434 5.463277 -108.029556 7.613131
.END
.REALS
prod.no = 3
.END
Display More
I managed to accomplish what I wanted in the end without the ones that don't work. This code looks good enough and it works, thanks to Kwakisaki It has few modifications but not alot.