perm filename UNI2.X[V,VDS] blob
sn#411687 filedate 1979-01-18 generic text, type C, neo UTF8
COMMENT ā VALID 00018 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002
C00007 00003 \F1\CMONITOR COMMANDS: PROGRAM CONTROL
C00017 00004 \F1\CMONITOR COMMANDS: COMPUTER STATUS AND CONTROL
C00021 00005 \F1\CPROGRAM INSTRUCTION SET
C00028 00006 \!command(REST)
C00033 00007 \F1\CUSER PROGRAM INSTRUCTIONS: ARM CONFIGURATION CONTROL STATEMENTS
C00036 00008 \F1\CUSER PROGRAM INSTRUCTIONS: INTEGER VARIABLE AND ASSIGNMENT INSTRUCTIONS
C00039 00009 \!command((SHIFT <trans> BY [<dx>],[<dy>],[<dz>]))
C00040 00010 \F1\CUSER PROGRAM INSTRUCTIONS: CONTROL STRUCTURES
C00051 00011 \F1\CUSER PROGRAM INSTRUCTIONS: SPECIAL SWITCH STATEMENTS
C00054 00012 \!command(SPEED <value> [ALWAYS])
C00056 00013 \F1\CUSER PROGRAM INSTRUCTIONS: MISC. STATEMENTS
C00057 00014 \F1\CEXAMPLE PROGRAM
C00060 00015 \,\F1\CERROR CODES
C00061 00016 \, UN-INCORPORATED NOTES
C00063 00017 \F1\CSUMMARY OF INSTRUCTION SET
C00068 00018 \, APPENDIX 1: LOADING INSTRUCTIONS
C00070 ENDMK
Cā;
\F3\J\N
The following commands are used to store and retrieve user programs and
position data on the mini-floppy disk. The disk is logically divided into
files. Files are referred to by six character names, which must begin with a
letter (A-Z) followed by any combination of letters and numbers.
In all cases where
an operation may result in destructively writing over valid data which
is contained on the disk, verification is first required before the
operation is performed. The execution of these commands can be aborted by
typing carriage-return at any time.\.
\!command(DELETE <file>);
\j[ . *]After requesting confirmation, the specified file is deleted from the disk.\.
\!command(ERASE);
\j[ . *] This routine completely erases the contents of the floppy diskette
and initializes the diskette's file directory information.\.
\!command(FORMAT);
\j[ . *] This command must always be executed first before a new diskette
can be used for storing programs or data. It initializes the file
directory and has the effect of erasing the entire diskette by writing over
any information that it may contain.\.
\!command(LISTF);
\j[ . *] Types the file directory of the diskette currently loaded in the
mini-floppy disk and prints the amount of space still available for storage.\.
\!command(LOADP <file>);
\j[ . *] Loads the program's contained in <file> into the computer's memory.
If a program already exists which has the same
name as a program contained in the disk file,it will be deleted and replaced by the
program contained on the disk.\.
\!command(LOADT <file>);
\j[ . *] Loads all of the position variables which are contained in the
specified disk file into the computer's memory. If a position
variable is already defined and a variable with the same name is contained
in the disk file, the position's value will be replaced by the value
read from the disk.\.
\!command((STOREP <file> = [<program1>],...,[<program7>]));
\j[ . *] Stores up to seven specified programs in <file>. If no program names are
given, all existing programs are saved in the specified file.\.
\!command(STORET <file>);
\j[ . *] Stores the names and values of all defined position variables
in the specified floppy disk file.\.
\F1\CMONITOR COMMANDS: PROGRAM CONTROL
\F3\J\N
The following commands are used for executing and stepping through
user programs.\.
\!command(ABORT);
\j[*] Program execution is terminated at the completion of the step
currently being executed.\.
\!command(DO <program instruction>);
\j[.] The single specified program instruction is executed as though it
were te next step in the previously executed program. Thus, this command
can be used for moving the arm (eg. DO MOVE T1) or altering the sequence
of program step execution (eg. DO GOTO 100). If no instruction is
specified, the previously specified instruction is performed once again.\.
\!command((EXECUTE [<program>],[<nloop>],[<step>]));
\j[ . ] Executes the user <program>, <nloop> number of times. A loop is
terminated when either a STOP instruction or the last defined step of the
program is encountered. The value of <nloop> can be between 32767 and
-32768. Negative values of <nloop> put the program into a continuous
loop. If <nloop> is omitted or zero, the program will be
executed one time. If <program> is omitted, execution of the last user
program EXECUTE'd will be re-initiated. If <step> is specified, the motion
program begins execution at motion program step <step> for the first pass,
otherwise, the program starts execution at step #1. All successive passes
begin at the start of the program.\.
\!command((NEXT [<program>],[<nloop>],[<step>]));
\j[ . ] Program single step mode. If any of the three optional arguments
are specified, the program execution is initiated in exactly the same
manner as an EXEC command. However,
unlike an EXEC command, program execution is halted immediately after the
first program instruction is completed. If all three arguments are
omitted, the next program instruction is executed and then the program is
again halted. As with the PROCEED and RETRY commands, NEXT with no arguments can
only be executed after a PAUSE instruction, a non-fatal run-time error, or
after single step execution of the previous program instruction.\.
\!command(PROCEED);
\j[ . *] Proceeds user program at the step following the step where
execution was halted due to a PAUSE instruction or runtime error. If a
program is currently running but is in a WAIT loop, waiting for an
external signal to be given, typing PPOCEED has the effect of skipping over the
WAIT instruction. If a program is executing but is not in a WAIT loop,
this instruction has no effect.\.
\!command(RETRY);
\j[ . ] As with the PROCEED instruction, this command can be used for
restarting program execution after a runtime error.
In this case, execution resumes at the previous executed instruction
step. This allows the user to RETRY a step that may have been
aborted.\.
\!command(SPEED <value>);
\j[ . *] Alters the speed at which all subsequent program controlled
manipulator motions are executed. The speed at which a particular motion
will execute is approximately related to the product of the speed set by
this monitor command and the speed set by a program speed instruction.
The <value> of the speed can range from .01 (very slow) to 327.67 (very
fast) where 100.00 is normal speed. As an example, if the monitor speed
command is 50.00 and the program instruction speed is 60.00, the arm will
move at approximately 30% of its normal speed.\.
\J\N
When a program terminates execution due to a PAUSE or STOP statement or
from any one of a number of runtime errors, an appropriate message will
be typed out followed by one of the
following three phrases: 1) "HALTED AT STEP xxx", 2) "HALTED AT ppp-xxx", or
3) "USER PROGRAM TERMINATED". The first message is printed when the main
program terminates execution due to an error or a PAUSE statement. In
this case, "xxx" is the number of the program step following the instruction
that generated the halt. If a similiar termination takes place but the
halt occurs during the execution of a program subroutine, the subroutine
name is printed (ppp) followed by the subroutine step number. Finally, if
a STOP instruction is executed or the last defined step of a
program has completed execution, the third phrase is printed.\.
\.
\F1\CMONITOR COMMANDS: COMPUTER STATUS AND CONTROL
\F3\J\N
There are a number of commands which can be used to determine the current
state of the manipulator computer and to initialize and terminate
execution. These commands are briefly summarized below.\.
\!command(CALIB);
\j[ . ] This command is used in the Unimate 500 robot system to calibrate
the joint position sensors. The arm must be calibrated whenever the arm
controller power is switched on. Although the system can be run under
manual or program control while uncalibrated, it is recommended that the
CALIB instruction be executed as soon after power-up as possible.\.
\!command(DONE);
\j[ . ] MONITOR program stops, computer exits to ODT. The program can be
started by starting execution at location 100000 by typing 100000G. \.
\!command(ENABLE <switch> or DISABLE <switch>);
\j[ . *] These commands are used for turning on and off special system
hardware features. At present, the only switch defined is "HHT". This
switch is used for enabling and disabling the output of special control
characters which are necessary for the operation of the Unimation Hand
Held Terminal. For terminals other than the HHT, these control characters
will normally not affect the output display.\.
\!command(FREE);
\j[ . *] Types the percentage of available memory that is not currently in use. As
the available memory is being added up, a simple check of the
whole area is made to ensure that the bookkeeping tags are
consistent.\.
\!command(STATUS);
\j[ . *] Prints the status information of the user program being executed.
This includes data on the program and subroutine step
currently being executed, the speed set by the monitor SPEED command,
and the number of program EXEC loops completed and
still remaining. Note that if the program is in an infinite EXEC loop,
i.e. nloop < 0, the print out of the number of loops completed can be off
by 32767*n counts (n=1,2,..,ā), since the loop counter is permitted to
overflow.\.
\!command(ZERO);
\j[ . *] Re-initializes the VAL system and deletes all defined positions
and user programs. This is a totally destructive operation. This
function first asks "ARE YOU SURE (Y,N)?" to verify that the operation is
to be performed.\.
\,
\F1\CPROGRAM INSTRUCTION SET
\F3\J\N
The following sections describe the available program instructions.
Because of the great flexibility of the basic structure of the VAL language,
new instructions and data types which are deemed necessary can be easily added.\.
\F1\CUSER PROGRAM INSTRUCTIONS: MOTION STATEMENTS
\F3\JIn the following motion instructions all distances are in inches, time
is in seconds, and strings can be up to one line
long.\.
\!command(GO <position> [!]);
\jMoves the arm to the position and orientation specified by the <position>
variable. There is no path computed for this motion, the hardware position
servo operates in slew mode. Any changes in configuration requested by
the user are executed during the motion. If the position name is followed
by an exclamation mark (!), <position> will be set equal to the manipulator's
location at the time the GO instruction is typed.\.
\!command(MOVE <position> [!]);
\jMoves the arm to the position and orientation specified by the <position>
varible. Intermediate set points between the initial and final arm
position are computed by interpolating the initial and final joint angles.
Any changes in configuration requested by the user are performed during
the motion. See GO for an explanation of [!].\.
\!command((MOVEI [<jt1>],[<jt2>],[<jt3>],[<jt4>],[<jt5>],[<jt6>],[<hand>],[<speed>]));
\jPerforms the same type of motion as a MOVE instruction, except that the
final arm position is explicitly stated in terms of its six joint angles
and its hand opening instead of a position variable. The specified speed supersedes
any previously executed SPEED program instruction.\.
\!command(MOVES <position> [!]);
\jMoves the arm to the position and orientation specified by the <position>
variable. The hand is moved along a straight line path and the hand
orientation is smoothly rotated to its final position. No changes in
configuration are permitted during this motion. See GO for an explanation
of [!].\.
\!command((DRAW [<dX>],[<dY>],[<dZ>]));
\jMoves the arm along a straight line a distance of dX in the X direction,
dY in the Y direction and dZ in the Z direction. Any distances omitted
are assumed to be zero. The arm configuration and orientation are
maintained during this motion.\.
\!command(DEPART <distance>);
\jMoves the hand a distance <distance> along the current axis of
rotation of the last joint. Negative distances move the hand forward,
positive distances move the hand back.\.
\!command((APPRO <position>[!], <distance>));
\jMoves the hand to the position and orientation specified by
<position>, offset by a distance <distance> along the axis of rotation of the
last joint. Positive distances move the hand back from the specified
position, negative distances move the hand beyond the position. See GO
for an explanation of [!].\.
\!command((APPROS <position>[!], <distance>));
\jSame as APPRO, but the hand is moved along a straight line path and the
hand orientation is smoothly rotated to its final position. No changes in
configuration are permitted during this motion. See GO for an explanation
of [!].\.
\!command(READY);
\jMoves the arm to the READY position above the work space. This forces
the arm into a standard configuration. No matter where the manipulator
is originally positioned, this instruction will always succeed.\.
\,
\!command(REST);
\jMoves the arm to the REST position. This leaves the arm in a safe
position in case power is turned off. If no special speed has been set
via the SPEED command, the arm will move to rest at half the normal
speed.\.
\!command(OPEN <distance> or CLOSE <distance>);
\jFor 2-state hands these instructions are used without the <distance>
argument to either OPEN or CLOSE the hand during the execution of the next
motion instruction. For proportional hands, these instructions change
the hand opening to <distance> inches during the execution of the next
motion instruction. If <distance> is negative, the hand is closed as far
as possible, and if <distance> is very large, the hand is opened as far as
possible, otherwise the hand opening is set equal to <distance>. Both the
OPEN and the CLOSE instructions produce exactly the same effect.\.
\!command(OPENI <distance> or CLOSEI <distance>);
\jFor 2-state hands these instructions without a <distance> argument
either open or close the hand immediately. For proportional hands OPENI or
CLOSEI perform the same change in hand opening as an OPEN or CLOSE but the
operation is performed immediately instead of waiting for the next motion
instruction.\.
\!command((GRASP <distance>,[<label>]));
\jFor proportional hands only, this instruction closes the hand and checks
to see if the final hand opening was less than the specified distance. If
so, the program branches to the step indicated by the program label or an
error message is generated if the optional program label is not specified.
This instruction provides a simple one step method for grasping an object
and testing to ensure that proper contact was achieved.\.
\!command((DRIVE <jt>,<angle>,<time>));
\jOperates the single joint specified by the parameter <jt> (1-7). The
current joint angle is changed by an amount <angle>. The change in joint
angle must be specified in degrees. The duration <time> must be specified
in seconds.\.
\!command(DELAY <duration>);
\jPuts the program in a wait loop for the specified amount of time. The
duration can be given as any value between .01 and 327.67 seconds. This
instruction operates just like a "move to nowhere" motion instruction.
In particular if there is a pending hand operation, the hand motion will
take place during the execution of the DELAY instruction and if any
temporary special switches have been specified, they will be cleared after
the conclusion of the DELAY (see section on special switches).\.
\,
\F1\CUSER PROGRAM INSTRUCTIONS: ARM CONFIGURATION CONTROL STATEMENTS
\F3\J\N
For an anthropomorphic, six-joint manipulator, most points in the work
space of the arm can be reached by assuming one of eight possible spatial
configurations. Normally, the arm will remain in whatever configuration
it starts in when the user program begins execution or continues from a
PAUSE statement or runtime error. The only exceptions to this rule are:
1) when the arm is forced to change from FLIP to NOFLIP or vice versa in
order to keep joints 4 or 6 within stop limits or 2) when a READY or REST
instruction is executed or 3) when a specific change in configuration is
requested by the user program through the execution of any of the
following program instructions. When the user specifies a change in arm
configuration, the requested change with be accomplished during the
execution of the next GO, MOVE, or APPRO motion instruction.\.
\!command(RIGHTY or LEFTY);
\jRequests a change in the arm configuration so that the manipulator's
first three joints resemble a human's right or left shouldered arm,
respectively.\.
\!command(ABOVE or BELOW);
\jRequests a change in arm configuration so that the elbow of the arm is
either pointed up or down.\.
\!command(FLIP or NOFLIP);
\jChanges the range of operation of joint 5 to plus (NOFLIP) or minus (FLIP)
angles.\.
\,
\F1\CUSER PROGRAM INSTRUCTIONS: INTEGER VARIABLE AND ASSIGNMENT INSTRUCTIONS
\F3\J\N
In most cases where an integer variable is required as an argument for a
user program instruction, either the symbolic name of a variable can be
given or an integer value can be specified. Integer variable names conform
to the syntax given for position variables and program names and their
values must be between 32767 and -32768. The only time that an integer
value cannot be used in place of a integer variable is when the specified
operation would result in an attempt to alter the value of the constant.
In this case an error message is generated.\.
\!command(SETI <i.var1> = <i.var2> [<operation> <i.var3>]);
\jThe value of <i.var1> is set equal to the result of evaluating
the expression on the right side of the equal sign. The permitted
<operation>'s are: addition (+), subtraction (-), multiplication (*),
integer division (/), and modulus determination (%). If both the operation
and the third variable are missing, the instruction is a direct assignment
statement.\.
\!command(TYPEI <i.var>);
\jTypes the value of the integer variable <i.var>.\.
\!command(HERE <position>);
\jSets the value of the specified position variable equal to the current
manipulator position and orientation.\.
\!command(SET <point1> = <point2>);
\jThe value of point 1 is set equal to the value of
point 2. If the position and orientation of point 2
are not yet defined an error message will be generated.\.
\,
\!command((SHIFT <trans> BY [<dx>],[<dy>],[<dz>]));
\jThe X, Y, and Z positions of the transformation <trans> are
modified by adding the changes in distances <dx>, <dy>, and <dz>,
respectively. If the value of the transformation has not yet been defined
or if its new X, Y, Z position is too large to represent, an error message
will be generated.\.
\,
\F1\CUSER PROGRAM INSTRUCTIONS: CONTROL STRUCTURES
\F3\J\N
The following instructions are used to alter the sequence in which user
program instructions are executed and for interlocking the arm computer
with other devices. In what follows, <channel> is used to designate one of
the external signal input or output lines. <channel> can be either an
integer number or an integer variable. The absolute value of <channel> is
used to specify a particular signal line. The magnitude of <channel> must
be between 1 and N, where N is the number of hardware interlocks provided
with the system. For certain instructions, the sign of <channel> is used
to specify high and low signal values. In these instances, a positive
<channel> value indicates a high signal and a negative value indicates a
low signal.\.
\!command(GOSUB <prog>);
\jExecution of the current program is temporarily suspended and program
execution continues starting with the first step of the user program
<prog>. The address of the next step in the current program is
automatically saved and up to 10 programs can be superseded at any given
time.\.
\!command(RETURN [<skip count>]);
\jTerminates execution of the current user program and resumes execution
of the last suspended program. The suspended program resumes running at
<skip count>+1 number of steps following the executed GOSUB instruction.
Hence, if the skip count is omitted or a count of 0 is specified,
execution resumes at the instruction following the executed GOSUB. If the
subroutine started execution due to the triggering of a REACTI statement,
a skip count of 1 can be used to resume execution of the interrupted
routine without re-executing the interrupted program step. Executing a
RETURN in the main program produces the same effect as executing a STOP
instruction.\.
\!command(IF <i.var1> <relationship> <i.var2> THEN <label>);
\jThe value of <i.var1> is compared to the value of <i.var2> and if
the stated <relationship> is true, the program branches execution to the
program step specified by <label>. Otherwise, the next sequential step of the
program is executed as usual. The possible relationships that can be
tested for are: equal (EQ), not equal (NE), greater than (GT), greater
than or equal (GE), less than (LT), and less than or equal (LE).\.
\!command((IFSIG <channel>[,<channel>][,<channel>][,<channel>] THEN <label>));
\jIf the states of the external signals exactly match the specified signal
states, the program branches to the program instruction specified by
<label>. Otherwise, if any mismatch is detected, the next sequential
program step is executed. The <channel>s are specified as signed values
to indicate if each test is to be made for a high or low signal. Omitted
channel numbers or channel numbers with a value of zero always satisfy the
matching test.\.
\!command(IGNORE <channel> [ALWAYS]);
\jDisables the triggering of the REACT or REACTI instruction which is
associated with the specified external signal channel. If ALWAYS is
specified, the reaction is permanently disabled until completion of the
next motion statement. The value of <channel> must always be greater than
zero.\.
\!command(GOTO <label>);
\jPerforms an unconditional branch to the program step specified by
<label>.\.
\!command(SIGON <channel>);
\jTurns on the signal to the device attached to the specified output channel.
Only positive values of <channel> are permitted.\.
\!command((REACT <channel>,[<program>] [ALWAYS]));
\jThis instruction initiates the continuous monitoring of the external
signal specified by <channel>. If a high value is detected, the program
reacts by altering the sequence in which the following program steps are
executed. The reaction is equivalent to performing a "GOSUB <program>" at
the completion of the program step folllowing the first occurance of a
high signal value.
If ALWAYS is specified, the signal monitoring is active until either
an IGNORE statement is executed or the reaction is triggered (in which
case the equivalent of an "IGNORE <channel> ALWAYS" is automatically
performed). If ALWAYS is omitted, the signal will only be checked until
the completiion of the next arm motion instruction. If <program> is
omitted, the program step following the first occurance of a high value
will be skipped and execution will continue at the following program
step. Only one REACT or REACTI command can be associated with any channel
at any given time.\.
\!command((REACTI <channel>,[<program>] [ALWAYS]));
\jLike REACT, this instruction initiates the continuous monitoring of the
external signal specified by <channel>. However, in this case, when a
high value is detected, the current instruction is immediately aborted
and the equivalent of a "GOSUB <program>" is executed. The subroutine call
to <program> is performed such that if a
"RETURN 0" is used to exit from <program>, the
interrupted program step will be executed once again. In order to return
control to the interrupted program and to skip the furthur execution of
the interrupted step, a "RETURN 1" must be used to exit from <program>.
If <program> is omitted, when a high signal on <channel> is detected, the
current program step is immediately aborted and the next sequential step
is executed. The optional argument ALWAYS and the IGNORE instruction have
exactly the same effect on REACTI as they do on the REACT instruction.
Only one REACT or REACTI command can be be associated with any channel at
any given time.\.
\!command(SIGOFF <channel>);
\jTurns off the signal to the device attached to the specified output channel.
Only positive values of <channel> are permitted.\.
\!command(WAIT <channel>);
\jThe program is put into a wait loop until the proper sense of the
external signal specified by <channel> is detected. Positive channel
numbers indicate waiting until the external signal goes true (high).
Negative channel numbers indicate waiting until the signal is false (low).
A signal wait loop can be aborted by using the monitor PROCEED command.\.
\!command(PAUSE <string>);
\jTerminates execution of a user program and types the message <string>. Execution
can be continued from this point by typing PROCEED.\.
\!command(STOP);
\jSame as PAUSE except that the program cannot be continued unless
more program loops were specified at the time that program execution was
initiated (see EXECUTE command).\.
\,
\F1\CUSER PROGRAM INSTRUCTIONS: SPECIAL SWITCH STATEMENTS
\F3\JThe following instructions are used for enabling and disabling special
features of the hardware position servo and the software trajectory
generator. As indicated below, some of these instructions can be
followed by the word ALWAYS if it is desired that the requested option be
turned off or on during all successive motions. Whenever a switch is not
followed by ALWAYS, it is assumed that the switch setting is only to
affect the next motion.\.
\!command(COARSE [ALWAYS]);
\jThe low tolerance feature is enabled in the hardware servo so that
larger errors in the final position of the arm joints will be permitted at
the end of the next motion. This will result in much faster motion
execution times if high accuracy is not required.\.
\!command(FINE [ALWAYS]);
\jOpposite of the COARSE instruction. This is the default state of the
hardware servo.\.
\!command(NONULL [ALWAYS]);
\jThe next executed motion is terminated without waiting for the electronics
to signal that all moving joints have reached their specified positions.
Like the COARSE command, this mode results in faster motion times if final
position accuracy is not required. However, since no position error
checking whatsoever is done, motion execution times will be fixed and
final position errors can be quite large.\.
\!command(NULL [ALWAYS]);
\jOpposite of the NONULL instruction. This is the default state of the
software control system.\.
\!command(INTOFF [ALWAYS]);
\jTurns off the hardware position error integration feature during the
next motion. However, the hardware integration is always enabled during
the final position error nulling period.\.
\!command(INTON [ALWAYS]);
\jForces the hardware to integrate the position error throughout the next
motion.\.
\,
\!command(SPEED <value> [ALWAYS]);
\jRequests that the next arm motion be performed at a speed other than
normal (=100). The speed can range from .01 (extremely slow) to
327.67 (extremely fast).\.
\!command((TOOL <tool#> = [<dX>],[<dY>],[<dZ>],[<rZ>]));
\jChanges the current arm tool to <tool#> and optionally changes the
dimensions of <tool#>. See monitor instruction "TOOL" for a description of the
effect of this instruction.\.
\,
\F1\CUSER PROGRAM INSTRUCTIONS: MISC. STATEMENTS
\F3\!command(REMARK <string>);
\jComment line, a no-operation at run-time.\.
\!command(TYPE <string>);
\jTypes the message <string> on the console terminal.\.
\F1\CEXAMPLE PROGRAM
\F3\J\N
Writing an example program named DEMO1 to pick up an item at point PICK and place it at
point PLACE.\.
.EDIT DEMO1 User types this in to start editing program DEMO1.
EDITING DEMO1 VAL response
1. OPEN Open hand during next motion.
2. APPRO PICK, 50 Approach to 50 mm away from point PICK.
3. SPEED 30 Slow down to 30% speed for next move only.
4. MOVE PICK! Move to point PICK. Current arm position is point PICK.
5. CLOSEI Close hand now, before next motion.
6. DEPART 70 Move 70 mm away along hand vector.
7. APPROS PLACE,75 Move in straight line to 75 mm from point PLACE
8. SPEED 20 Slow down to 20% speed for next motion only.
9. MOVES PLACE Move in straight line to point PLACE.
10. OPENI Open hand before next motion.
11. DEPART 50 Retract 50 mm. away from point PLACE.
12. E Exit from editor, program is completely written.
\F3\J\N
One way of entering the point PLACE.\.
.HERE PLACE Typing this tells VAL to make the current position of the arm point PLACE.
X Y Z O A T
300.25 -56.82 105.00 58.44 125.30 90.00
CHANGES? VAL asks if operator wishes to make any typed in changes.
. A carriage return signifies no changes desired.
Running program DEMO1. First at 50% speed to see everything is right.
.Speed 50
.EXEC DEMO1,3 Executes DEMO1 3 times at 50% speed.
STATUS Using background mode to check status while arm is running.
.
.
.
.
PROGRAM COMPLETED VAL says its done ...back to monitor mode.
.SPEED 100 Now run at 100 % speed.
.EXEC ,50 50 times through DEMO1 at 100% speed.
\,\F1\CERROR CODES
\F1\L Code\cMeaning
\F3\N
1,2,3,4,5,6,7 \jNumber of arm joint out of tolerance or preventing
required arm solution.\.
8 \jDesired position too close.\.
9 \jDesired position too far out.\.
\, UN-INCORPORATED NOTES
DPOINT 8 POSITIONS
DONT RECOVER EVERYTHING
LABELS RANGE FROM 0 TO 32767. JUMPS TO UNDEFINED LABELS DONT GENERATE
ERROR MESSAGES UNTIL RUN-TIME WHEN THE BRANCH IS ATTEMPTED.
USING FREE STORAGE RTNS DURING TOUCH UP MODE MAY AT TIMES CAUSE
SLIGHT TIME DELAYS IN THE EXECUTION OF A PROGRAM THAT IS COMPETING
FOR USE OF THE F.S. RTNS.
PROM CHECKSUM
LISTT DOES PRINT UNDEFINED POSITION VARIABLES.
TOOL # = X,Y,Z,Z ROT
;THIS ROUTINES SETS TOOLX, TOOLY, TOOLZ AND TOOLRT FOR USE BY THE A
;SOLUTION ROUTINES. IF THE DIMENSIONS OF A TOOL ARE SPECIFIED THE NEW
;TOOL DIMENSIONS ARE SAVED AND THE CURRENT TOOL IS SET EQUAL TO THE
;SPECIFIED DIMENSION. IF DIMENSIONS OF ZERO ARE SPECIFIED FOR THE TOOL
;OR IF NO DIMENSIONS ARE GIVEN, THE CURRENT TOOL IS SWITCHED TO THE
;DIMENSIONS OF THE TOOL WHICH WHERE PREVIOUSLY SPECIFIED. THE TOOL
;DIMENSIONS ARE AUTOMATICALLY RESET TO THE DEFAULT VALUES ON POWER UP
;AND BY THE "CLEAR" INSTRUCTION. THE TOOL INSTRUCTION CANNOT BE GIVEN
;WHICH THE ARM IS BEING DRIVEN UNDER MANUAL CONTROL IN EITHER TOOL OR
;WORLD COORDINATES.
;IF TOOL #0 IS SPECIFIED, THE DIMENSION ARGUMENTS AR IGNORED AND
;THE CURRENT TOOL IS SET EQUAL TO THE DIMENSIONS OF THE DEFAULT TOOL.
\F1\CSUMMARY OF INSTRUCTION SET
Monitor Instructions\F5
\!col1;Base [<dX>],[<dY>],[<Z rotation>]\N
\!col2;DIRectory
\!col1;EDit [<program>],[<nstep>]\N
\!col2;DPoint [<position1>],...[<position8>]
\!col1;LISTP <program>,[<step1>],[<step2>]\N
\!col2;Here <position>
\!col1;POint <position1> [=<position2>]\N
\!col2;LISTT [<position1>],...,[<position8>]
\!col1;Tool <tool#> = [<dX>],[<dY>],[<dZ>],[<rZ>]\N
\!col2;Where
\!col1;DElete <file>\N
\!col2;ERase
\!col1;FOrmat\N
\!col2;LISTF
\!col1;LOADP <file>\N
\!col2;LOADT <file>
\!col1;STOREP <file>= [<program1>],...,[<program7>]\N
\!col2;STORET <file>
\!col1;Abort\N
\!col2;CAlib
\!col1;DISable <switch>\N
\!col2;DO <program instruction>
\!col1;DONe\N
\!col2;ENable <switch>
\!col1;EXec [<program>],[<nloop>],[<step>]\N
\!col2;FRee
\!col1;Next [<program>],[<nloop>],[<step>]\N
\!col2;PRoceed
\!col1;Retry\N
\!col2;SPeed <value>
\!col1;STAtus\N
\!col2;Zero
\F1Edit Instructions\F5
\!col1;<any program instruction>\N
\!col2;<carriage return>
\!col1;C <program>,[<nstep>]\N
\!col2;D [<nstep>]
\!col1;E\N
\!col2;I
\!col1;L\N
\!col2;P [<nstep>]
\!col1;R [<arg#>],[<new value>]\N
\!col2;S <step>
\!col1; \N
\!col2;T
\F1User Program Instructions\F5
\!col1;APPRO <position>[!], <dist>\N
\!col2;APPROS <position>[!], <dist>
\!col1;CLOSE <dist>\N
\!col2;CLOSEI <dist>
\!col1;DELay <duration>\N
\!col2;DEPart<distance>
\!col1;DRAw [<dX>],[<dY>],[<dZ>]\N
\!col2;DRIve <jt>,<angle>,<time>
\!col1;GO <position> [!]\N
\!col2;GRasp <distance>,[<label>]
\!col1;MOVE <position> [!]\N
\!col2;MOVEI [<jt1>],[<jt2>],[<jt3>],[<jt4>],[<jt5>],[<jt6>],[<hand>],[<speed>]
\!col1;MOVES <position> [!]\N
\!col2;OPEN <dist>
\!col1;OPENI <dist>\N
\!col2;REAdy
\!col1;ABove\N
\!col2;BElow
\!col1;FLip\N
\!col2;LEfty
\!col1;NOFlip\N
\!col2;RIghty
\!col1;GOSub <prog>\N
\!col2;GOTo <label>
\!col1;Here <position>\N
\!col2;IF <i.var1> <relationship> <i.var2> THEN <label>
\!col1;IGnore <chan> [ALways]\N
\!col2;IFSig <chan>[,<chan>][,<chan>][,<chan>] THEN <label>
\!col1;PAuse <string>\N
\!col2;REACT <chan> [,<prog>] [ALWAYS]
\!col1;REACTI <chan> [,<prog>] [ALWAYS]\N
\!col2;RETurn <skip count>
\!col1;SET <trans1> = <trans2>\N
\!col2;SETI <i.var1> = <i.var2> [<operation> <i.var3>]
\!col1;SHift <trans> BY [<dx>],[<dy>],[<dz>]\N
\!col2;SIGON <channel>
\!col1;SIGOFF <channel>\N
\!col2;STop
\!col1;TYPEI <i.var>\N
\!col2;Wait <channel>
\!col1;COarse [ALWAYS]\N
\!col2;Fine [ALWAYS]
\!col1;INTOFf [ALWAYS]\N
\!col2;INTON [ALWAYS]
\!col1;NONull [ALWAYS]\N
!col2;NUll [ALWAYS]
\!col1;SPeed <value> [ALWAYS]\N
\!col2;TOol <tool#> = [<dX>],[<dY>],[<dZ>],[<rZ>]
\!col1;REMark <string>\N
\!col2;TYPE <string>
\, APPENDIX 1: LOADING INSTRUCTIONS
The Absolute Loader can be read in using the high speed reader by
manually entering the following Bootstrap Loader in the LSI via ODT
and starting execution at loc = 57744.
LOCATION CONTENTS
100 102 CLOCK TRAP
102 2 RTI
R6 1000 STACK POINTER
57744 16701 MOV 57776,R1
57746 26
57750 12702 MOV #352,R2
57752 352
57754 5211 INC (R1)
57756 5711 TST (R1)
57760 100376 BPL .-2
57762 116162 MOVB 4(R1),57400(R2)
57764 4
57766 57400
57770 5267 INC 57752
57772 177756
57774 765 BR 57750
57776 167770 HSR STATUS WORD
After entering the above instructions, the Bootstrap Loader can be
executed by typing:
57744G
After the paper tape has been read, the compute will halt at
location 57500 indicating that the Absolute Loader has been
properly entered into memory. The ARM CONTROL PROGRAM can now
be loaded by typing:
57500G OR P
Once loader, the ARM CONTROL PROGRAM can always be restarted by
typing:
1000G