#ININT Input Interrupt Subroutine
IF (@IN[1]=0) IF conditional statement based on input 1
IF (@IN[2]=0) 2
nd
IF conditional statement executed if 1
st
IF conditional true
MG “INPUT 1 AND INPUT 2 ARE ACTIVE”
Message to be executed if 2
nd
IF conditional is true
ELSE ELSE command for 2
nd
IF conditional statement
MG “ONLY INPUT 1 IS ACTIVE
Message to be executed if 2
nd
IF conditional is false
ENDIF End of 2
nd
conditional statement
ELSE ELSE command for 1
st
IF conditional statement
MG”ONLY INPUT 2 IS ACTIVE”
Message to be executed if 1
st
IF conditional statement is false
ENDIF End of 1
st
conditional statement
#WAIT Label to be used for a loop
JP#WAIT,(@IN[1]=0) | (@IN[2]=0) Loop until both input 1 and input 2 are not active
RI0 End Input Interrupt Routine without restoring trippoints
Subroutines
A subroutine is a group of instructions beginning with a label and ending with an end command (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 8 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.
#M Begin Main Program
CB1 Clear Output Bit 1 (pick up pen)
VP 1000,1000;LE;BGS Define vector position; move pen
AMS Wait for after motion trippoint
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
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.
DMC-40x0 User Manual Chapter 7 Application Programming • 142