Skip to main content
Submitted by Galil_JohnH on Fri, 03/09/2012 - 13:04

Occasionally, it is beneficial to create a user-defined command set that can be received over the serial port and interpreted at an application program (.dmc) level.  The code below uses the "Communication Interrupt" feature of the Galil controller to accept characters over the serial port, parse them, and process specific parts of an on-board dmc program.  The code uses a modified "prompt" that is shown as a "$:" on the terminal to let the user know they are in a different mode compared to the standard Galil prompt ":".  In this case, the user can enter "GO" and the motor will start jogging at the predefined speed.  Entering the string "STOP" will cause the motor to stop.  Note - there is a max of six characters when received in the P1ST variable as a string, the P1NM variable is for numeric values and can go up to a 32bit number.  An error handling routine is included such that if an error occurs the code is displayed and the program is restarted.

In the output below, the motor was intentionally shut off using an MO command to cause an error to occur and then turned back on using an SH via Ethernet.  Here is the output from the terminal:
$:
$:GO
Motion Starting
$:STOP
Motion Stopping
$:GO
ERROR  20.0000
$:GO
Motion Starting
$:STOP
Motion Stopping

Here is the .dmc code:

#Main

CI 1,1; 'interrupt on c/r

CW2; 'ASCII readable MG output

#Loop

JP#Loop

EN

#COMINT

JS#PARSE

EN1,1

#PARSE

'routine to parse input

str=P1ST;

IF (str="GO")

JS#GO

ENDIF

IF (str="STOP")

JS#STOP

ENDIF

MG{P1}"$:"{N}

EN

#GO

JG 1000; BGA;

MG{P1}"Motion Starting"

EN

#STOP
STX;

MG{P1}"Motion Stopping"

EN

#CMDERR

MG{P1}"ERROR ",_TC1

ZS

JP#Main

RE