#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.
Auto-Start Routine
The DMC-1600 has a special label for automatic program execution. A program which has been
saved into the controllers non-volatile memory can be automatically executed upon power up or
reset by beginning the program with the label #AUTO. The program must be saved into non-
volatile memory using the command, BP.
Automatic Subroutines for Monitoring Conditions
Often it is desirable to monitor certain conditions continuously without tying up the host or DMC-
1600 program sequences. The DMC-1600 can monitor several important conditions in the
background. These conditions include checking for the occurrence of a limit switch, a defined
input, position error, or a command error. Automatic monitoring is enabled by inserting a special,
predefined label in the applications program. The pre-defined labels are:
SUBROUTINE DESCRIPTION
#LIMSWI
Limit switch on any axis goes low
#ININT
Input specified by II goes low
#POSERR
Position error exceeds limit specified by ER
#MCTIME
Motion Complete timeout occurred. Timeout period set by TW command
#CMDERR
Bad command given
#AUTOERR
Nonvolatile memory checksum error (use in conjunction with _RS)
For example, the #POSERR subroutine will automatically be executed when any axis exceeds its
position error limit. The commands in the #POSERR subroutine could decode which axis is in
error and take the appropriate action. In another example, the #ININT label could be used to
designate an input interrupt subroutine. When the specified input occurs, the program will be
executed automatically.
NOTE: An application program must be running for automatic monitoring to function.
Example - Limit Switch:
This program prints a message upon the occurrence of a limit switch. Note, for the #LIMSWI
routine to function, the DMC-1600 must be executing an applications program from memory.
This can be a very simple program that does nothing but loop on a statement, such as #LOOP;JP
132
•
Chapter 7 Application Programming
DMC-1600