Subroutines, Stack manipulation, Auto start routine – Yaskawa SMC–4000 User Manual
Page 327: Example
![background image](https://www.manualsdir.com/files/819559/content/doc327.png)
317
SMC–4000 User Manual
Subroutines
A subroutine is a group of instructions beginning with a label and ending with an END (EN).
Subroutines are called from the main program with the jump subroutine instruction JS, followed by a
label or line number, and conditional statement. Up to 16 subroutines can be nested. After the subroutine
is executed, the program sequencer returns to the program location where the subroutine was called
unless the subroutine stack is manipulated as described in the following section.
Example:
An example of a subroutine to draw a square 500 counts per side is given below. The square is drawn at
vector position 1000,1000.
Stack Manipulation
It is possible to manipulate the subroutine stack by using the ZS command. Every time a JS instruction,
interrupt or automatic routine (such as #POSERR or #LIMSWI) is executed, the subroutine stack is
incremented by 1. Normally the stack is restored with an EN instruction. Occasionally it is desirable not
to return back to the program line where the subroutine or interrupt was called. The ZS1 command clears
1 level of the stack. This allows the program sequencer to continue to the next line. The ZS0 command
resets the stack to its initial value. For example, if a limit occurs and the #LIMSWI routine is executed, it
is often desirable to restart the program sequence instead of returning to the location where the limit
occurred. To do this, give a ZS command at the end of the #LIMSWI routine.
Auto Start Routine
If the #AUTO label is included in a Burned Program (BP command), the controller will start executing
the program starting at the location of the #AUTO label when power is applied.
#M
Begin Main Program
CB1
Clear Output Bit 1 (pick up pen)
VP 1000,1000;LE;BGS;AMS
Define vector position; move pen
SB1
Set Output Bit 1 (put down pen)
JS #SQUARE;CB1
Jump to square subroutine
EN
End Main Program
#SQUARE
Square subroutine
V1=500;JS #L
Define length of side
V1=-V1;JS #L
Switch direction
EN
End subroutine
#L;PR V1,V1;BGX
Define X,Y; Begin X
AMX;BGY;AMY
After motion on X, Begin Y
EN
End subroutine
#AUTO
Auto start program on power-up