perm filename PROP.POX[1,VDS]1 blob sn#300579 filedate 1977-08-14 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00017 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	\|\\M0NGR25\M1BDR30\M2SIGN57\M3NGR25\M4NGR20\
C00005 00003	\F1\CUNIMATE 500 - MECHANICS
C00009 00004	\F1\CUNIMATE 500 CONTROLLER - ELECTRONICS\F0
C00023 00005	\F1\CUNIMATE 500 - COMPUTER SOFTWARE AND TEACH BOX OPERATION\F0
C00044 00006	\F1\CDEFINING POSITIONS\F0
C00050 00007	\F1\CCREATING AND EDITING PROGRAMS\F0
C00054 00008	\F1\CINPUT AND OUTPUT COMMANDS\F0
C00057 00009	\F1\CCOMPUTER STATUS\F0
C00060 00010	\F1\CEXECUTION CONTROL\F0
C00064 00011	\F1\CPROGRAM INSTRUCTION SET\F0
C00065 00012	\F1\CMANIPULATOR MOTIONS\F0
C00071 00013	\F1\CGRIPPER INSTRUCTIONS\F0
C00073 00014	\F1\CARM CONFIGURATION CONTROL STATEMENTS\F0
C00075 00015	\F1\CPROGRAM CONTROL LOGIC AND ARITHMETIC\F0
C00082 00016	\F1\CSPECIAL SWITCH STATEMENTS\F0
C00086 00017	\F1\CMISCELLANEOUS INSTRUCTIONS\F0
C00087 ENDMK
C⊗;
\|\\M0NGR25;\M1BDR30;\M2SIGN57;\M3NGR25;\M4NGR20;\
\⊂'210555;\turn on flags outovl option, nest⊃quote, multiarg macros, lf sim,
\←=30;\→S\ε\N Interbase spacing in register S:  single spacing
\
\	page numbers and binder indentation
\←L\+=100;\→L\;  moving the left margin in to give the binder room
\\←R\-=100;\→R\;  moving the right margin in to give the binder room
\←L\+=100;\→l\←R\-=100;\→r \ set up secondary margin
\
\←=1;\→N\;  This is the starting page number
\∞EVERYPAGE[\
\oHEAD{1[\DN]}\ This has no section number included
\\oHEAD{1[V.\DN]}\ This has the section number included.
\←R\→D\1HEAD;\¬D\→D\2HEAD;\¬D\-=1;\→D\  This is for right numbering
\\←L\→D\ This is for left numbering
\WHEAD,D=150;\
\←N\+=1;\→N]\;
\
\∞figure[\←N\+=1;\→N]
\
\F1\CUNIMATE 500 - MECHANICS

GENERAL\F0

\J\
The mechanical manipulator is an all electric motor powered device
having five degrees of freedom, plus an output plate suitable for mounting 
a terminal device.  The manipulator is connected to its computer based controller
by one electrical power/signal cable up to 3 meters in length.  The manipulator
weighs approximately 40 kg. and mounts with four bolts to any solid surface.  An
electronics enclosure with a rigid top surface is provided for attaching the
manipulator and controller as a complete unit to a conveyor or other piece of
equipment.   Both the manipulator and electronics chassis are individually removeable
and replaceable.\.

\F1\CMECHANICAL DRIVES\F0

\J\
Each of the five joints is characterized by the following mechanical components:
an electric motor, an optical encoder position sensor, a tachometer, two stages
of gear reduction, and backlash and wear adjustment components for each 
stage of reduction.   Joints 1,2, and 3 have failsafe electromechanical 
brakes added to their motor shafts to prevent joint sag or coast in the event
of power failure.  On joint 1, backlash is controlled by a tandem gear drive
system, featuring two gear trains in parallel, with different torsional
spring rates, and preloaded against each other.   On all other joints, backlash is
controlled through adjustment of gear center distances.   All gear pairs are mounted
in pre-assembled cartridges having the gear shafts offset from the centerline of the
cartridge.  Turning of the housing provides for gear center adjustment.   
All gears are made from nitrided alloy steel for good wear life and high load
capacity.   Grease pack lubrication is used on all joints.   

The base and shoulder sections of the manipulator structure are machined from
plate and tube, while the structure of the outer extremeties is characterized
by formed aluminum sheet box sections.    All motors, drives and shafts are
attached directly to this thin structure.  This results in a lightweight
but stiff manipulator.\.

	
\F1\CUNIMATE 500 CONTROLLER - ELECTRONICS\F0


\J\
The electronic hardware section of the Unimate 500 Controller consists
of three basic modules:  a computer, an interface for data I/O and
a servo system.  Ancillary input devices include a terminal,
cassette unit and a manual control unit.  These devices are for programming
and loading convenience only; they are not necessary for program execution.
 
The computer provides high level control of the arm to the user through
means of extensive software.  The software consists of English language word
and number sequences which are converted to operating code upon execution.
 
The computer communicates with a Data Acquisition Interface through 
which it commands manipulator position and reads inputs from the arm and 
manual control unit.
 
Position commands are loaded into the Digital Sum section of the servo
where they are summed with position signals from optical encoders on the arm.
Resolution is up to sixteen bits (one part in 65,536).  Position Error is 
amplified, compensated and summed with a velocity signal in the power stage
of the servo.  The power stage provides motor currents to the arm joint electric
motors.\.
  
\F1\CCOMPUTER\F0

\J\
The computer used in the Unimate 500 Controller is Digital Equipment 
Corporation's LSI-ll microcomputer.  Incorporated in the computer are a 
sixteen bit CPU with 4K of RAM, 8K of ROM, a parallel interface for execution
data I/O, and a serial interface for user terminal devices.  A second serial
interface for communicating with a master computer or process controller is
optional.  Power status is monitored and a backup battery is provided to maintain
CPU memory in case of short term power failure.  Operating software is resident
in ROM, however, user programs are stored in RAM.  Programs may be either loaded
or stored by means of a cassette unit or terminal.\.
 
 
\F1\CMANUAL CONTROL/TEACH UNIT\F0

\J\
The manual control unit consists of a rotary switch which selects mode of
operation, seven center return toggle switches for commanding arm motion, a 
proportional control for setting speed, a teach button for recording points and
an emergency stop button.\.
 
Modes of Operation:
 
\jOFF   In the off mode the arm is stationary and no inputs from the manual
           control box or computer are possible.\.
 
\jFREE   When the free mode is selected, the arm behaves initially as if it 
           were in off mode: all joints are stationary.  Pushing a toggle switch
           towards a number releases the joint indicated by that number.  The joint
           goes limp with no brake on or motor current applied.  This free mode is
           used for manually placing the arm in position.\.
 
\jJOINT   Joint mode allows the toggle switches to command motion of their respective
           numbered joints.  Joint speed is selected by the speed potentiometers.  When the pot
           is rotated counterclockwise into the detent and the "INC" indicator light
           is lit, the joint will switch to incremental mode, i.e., it will move an
           increment equal to the resolution of the joint.  Turning the pot out of 
           detent, clockwise, gradually increases joint speed.\.
 
\jWORLD   In this mode, the toggle switches command motions of the tool tip along
           the X,Y or Z axes relative to the base of the arm.  The switches labeled
           O,A and T command angles of the tool about its tip.\.
 
\jTOOL   In this mode, the arm moves along pre-defined axes fixed to the tool in
           use.  Tool axes must be defined through the terminal.  A "no tool" default
           condition is assumed if this is not done.\.
 
\jCOMP   In computer mode, motion programs may be executed.\.
 
\jTEACH   Pushing the teach button records the current position of the arm, and
           performs any other operations defined by terminal entries.\.
 
\jSTOP   The stop button halts the arm.  To restart the arm in manual mode, it is
           necessary to select off position and then reselect a manual mode.  In 
           comp mode, pushing stop interrupts execution of the program.  It is 
           necessary for the program to be restarted.\.
   
\JThe tool toggle switch controls bits for operating a terminal device from the
teach box.  The manipulator may also be operated without the teach box attatched.  In this mode, 
all modes and functions are controlled through the terminal.\.
 
\F1\CINTERFACE/DATA ACQUISITION\F0
 
\JThe Unimation Interface may be divided into two sections, the Encoder Counters
and the Data Acquisition section.
 
The encoders on the arm are bi-directional, incremental encoders with two output
signals in quadrature and a zero reference track.  The encoder counters decode these signals into up or down
counts.  The encoder count output registers may be zeroed or preset to a value by
the computer during startup and initialization procedures.  These counters are            
addressable by the computer through its DRV-ll parallel interface.  This allows the
computer to read the manipulator position at all times.  Other registers contain the
servo status bits, peripheral device bits and brake bits.  These, too, are addressable
by the computer.\.
 
\F1\CSERVO\F0
 
\JThe servo system is a digital position servo with analog velocity damping.
Current limiting is provided for DC motor protection.
 
Position commands are loaded into registers Z1 and Z2 in the form of a sixteen
bit word.  They are summed in adders Z3 through Z6.  If there are ten bits or fewer
of position error, the DAC is loaded with the error to produce an output in the                 
linear region.                                                                    
 
The DAC output, which represents position error, is fed into amplifier A1A of the
analog amplifier, where lead compensation may be added.  Thee error is amplified by A1C,
which for errors larger than eight counts (three bits), has a linear gain of       
eleven.  For small errors, FET Z16 is switched on, which turns A1C into an integrator.
This allows the elimination of steady state offsets and provides a final error null.
 
Position error is converted to an absolute value by amplifiers                       
A1D, A2A and A2B.  This absolute value of error drives comparators C1A and              
C1B.  When the magnitude of the error falls below the selected comparator threshold,
C1A turns on the position error integrator and C1B outputs a bit to the interface 
signifying that the position error is within the selected tolerance.  For high
accuracy, this tolerance threshold is set to one bit of resolution.      
 
It is not always desirable to turn on the integrator and servo to zero error;
it may be sufficient to be within several degrees of a position before advancing
to the next position.  To allow this, F3 can be turned on by the wide tolerance bit,
which causes a much higher threshold to be set at C1B, and consequently, the 
tolerance bit comes up at a larger error.  This wider tolerance region allows the
manipulator to proceed rapidly through a succession of approximate points without
entering the integration region.
 
In order to have a stable high bandwidth servo with adequate damping,it is 
necessary to have velocity feedback.  This is accomplished through high gain 
tachometers which are buffered and compensated by the tach amplifier.  Position 
error and velocity damping are summed at A3B.  P3 adjusts damping and P4 adjust
amplifier gain.
 
Transistors Q1 and Q2 in the feedback loop around A3B are driven by a circuit
which integrates current in an electrical model of the thermal time constant of the
DC motors.  Should this integral reach a level which would indicate overheating of
the motors, a proportional decrease in motor current is effected through lowering
the voltage at the base of Q1 and Q2, and hence, decreasing amplifier gain.  This
protects the motors without disabling the arm.
 
A3C provides the current summing mode which drives the power stages of the 
amplifier.  Current is sensed through current sensing resistors.
 
The power transistors are mounted on a separate heat sink which is fan          
cooled.  The joint servos are mounted on individual, interchangeable, printed circuit
cards.                 
 
During normal operation, the brakes(joints 1-3 only) are not used and the arm motors run continuously.
The brakes are failsafe type brakes which are on whenever power is off.  They may
be set by pushing emergency stop or by the computer in a power down sequence.
The brake card also contains an eight bit A/D for digitizing the analog
speed control signal from the manual control box and provides I/O to the servo       
back plane for the manual control bits.\.

\F1\CUNIMATE 500 - COMPUTER SOFTWARE AND TEACH BOX OPERATION\F0

\J\
The computer is responsible for both the execution of motion programs and
for the interpretation and execution of the functions contained on the
teach box.  From the standpoint of the software trajectory generator,
motion commands can either emanate from a motion program or the manual
teach box.  However, these two modes are mutually exclusive.  Therefore,
initiating the execution of a program automatically disables the motion
functions on the manual control box.  At all other times, so long as the
computer is properly initialized, the teach box can be used
for moving the arm.\.

\F1\COPERATING THE TEACH BOX\F0

\J\
Using only the manual control teach box, it is possible to move the arm in
either joint coordinates, world ( cartesian ) coordinates, or hand
coordinates.  In addition, the control box allows the specification of a
number of different speeds ranging from an incremental step of one
resolution element per button depression to a continuous velocity capable of
moving each joint from stop to stop in a matter of seconds.  The teach
box also permits the recording of positions or sequences of motions to
positions.  As a safety precaution, a button is provided which can be used
to bring the arm to an immediate stop.  Finally, using the control box,
the brakes on individual joints can be released, allowing the manipulator
to be taught positions by physically moving it by hand from point to
point.

The teach box operations are controlled by five different sets of buttons:
mode select, joint/cartesian component select, speed select, position
record, and panic.  The mode select buttons are used to
specify the type of motion control that is to be used: joint coordinates,
world coordinates, hand coordinates, or free motion.  If joint coordinate
control is selected, then five of the six joint/cartesian component select
buttons are used for controlling the speeds of the individual joints.
While if world or hand coordinate control is selected, the
joint/cartesian component buttons are used for specifying straight line
motions along and rotations about the X, Y, and Z axes of the applicable
coordinate system.  Finally, if the free mode is selected, five
of the joint/cartesian component buttons are used to set and release the
manipulator's joint servos or brakes (joints 1 to 3 only) to allow the arm 
to be manually repositioned.
In any of the first three motion control modes, additional switches
have been provided for specifying if motions are to be incremental or
continuous and for selecting the size of the step or the magnitude of
the speed with which to move.  The remaining two buttons on the teach
box are for position recording and panic error stop.  The function of
the position record button depends upon the state of the computer and
will be described in detail in the following sections on "Defining 
Positions" and "Creating Programs".  The Panic Button can be used to
immediately stop the motion of the manipulator whether the
arm is moving under teach box or program control.\.



\,
\F1\CDEFINING POSITIONS\F0
	
\J\
The position and orientation of the manipulator, which will be called the
manipulator's position, can be stored within the computer using
either a transformation or a precision point.

A transformation is a cartesian description of the position of the
manipulator's hand.  The hand's X, Y, Z location is
stored as a vector and its orientation is stored as a 3 by 3 matrix.  This
representation is advantageous where relative translations and
rotations are to be performed.  Furthermore, because transformations only
refer to the position of the hand, they are independent of the geometry of
the manipulator.  However, where high precision position recording and
playback are required, transformations are somewhat inaccurate due to the
complexity of the computations necessary to convert between
joint angles and cartesian coordinates.

If high precision is required, the manipulator's position can be stored
as a precision point.  Precision points save the five joint angles of
the manipulator and are therefore capable of achieving full precision
playback.  For most instructions requiring a manipulator position,
precision points and transformations can be used interchangeably.

The names of both precision points and transformations consist of a string
of six characters starting with a letter and followed by any sequence of
letters and numbers.  Precision points and transformations are
distinguished by the fact that precision point names must always be
preceded by the symbol "#".  The number of precision points and
transformations that can be stored in the computer is only limited by the
size of the computer memory. The standard memory will store at least
128 precision points or transforms.

There are several commands that can be used for defining positions and
determining the current location of the arm.\.

\jPOINT position  -  
Used to specify and modify the value of the position.  If the position is
a transformation, its current value is printed as an X, Y, Z location
followed by three Euler angles which specify orientation.  If the position
is a precision point, the five joint angles are displayed.  In either
case, the operator is repeatedly asked for changes to the position
components until no further changes are to be made.\.
	
\jHERE position  -  
Sets the position value equal to the current arm position.  As with
POINT, post modification of the position is permitted.\.

\jTEACH position -  
Each time that the TEACH button on the teach box is pressed, the current
manipulator position is determined and saved either as a transformation or
a precision point depending upon the type of the "position" argument
specified.  In this case, the position name must end in one or more
numbers.  For instance: C1, TX25, PIN007, and BOX10 are all legal names.
Each successive recorded position will be assigned the name with the next largest
number.  For our examples, the second positions would be assigned the
names:  C2, TX26, PIN008, and BOX11.  This mode is terminated by typing a
RETURN on the terminal keyboard.\.

\jWHERE -  
Prints out the current X, Y, Z location of the arm together with the
Euler and joint angles and the current hand opening.\.


\,
\F!\CCREATINGAND EDITING PBOGRAMS\F0

TJ\
Distinct sequefces of instructiOns to be executed are stored as motion
programs Within the computer.  The number of programs that can be sav@∃H~∃SLAYS[%iKHA=]YrA	rAiQ∀AC[←U]hA←_AG←[AkiKd↓[K[←IrACm¬SYCE1J\@AAe←Oe¬[fACIJ~∃e∃MKeK⊂Ai↑A	rAgS`AGQCICGiKHA]C[∃fAoQ%GPXA1SWJAQeC]g→←e[CQS←]f0A[kgPAEKO%\~∃o%iPAB↓YKii∃dAC]⊂AGC\↓EJAM=YY←o∃HAEr↓C]rAMKckK9GJA←_AYKiQKefA¬]HA]U[EKeL\~∀~)!e←OIC[fA
C\AE∀AIKm∃Y←aK⊂A←ML5YS]J↓∨≤Aβ92Aπ∨5!+)HAGCa¬EYJA=LAOK9KeCi%]N~∃¬'ε[∪$AiKqPAgie%]OfA=dAiQ∃rAGC8AEJA⊃KmKY=aKHAUgS]N↓iQJAAe←Oe¬Z~∃K⊃SiS]≤Ae←kQS]Kf↓oQSG ACeJ↓BAgi¬]ICe⊂AMKCQkeJA=LAiQ%fAYC9OkCO∀\@A)!KgJ~)KISi%]NAe=kiS]∃fAGC8AEJAUgKHA→←dAE=iPA[=ISMs%]NAKaSgiS9NAae=OeC[LAC]H4∃GeK¬iS]N↓]KnAAe←Oe¬[f\@↓)QJA
←[[C9HAi↑↓EKOS8AKISQS]NA∧Aae←≥eCZA¬hAB~)aCei%GkYCHAgiK@A]k[	KdASM8\~∀4∀∩∩∪qπ	∪PAae←≥eCZX↓giK`↓]k[E∃d~∀~)9∃8⊗4∃∪LA9↑Agi∃`A]k5EKdA%fAga∃GSMS∃HXAK⊃SiS]≤Aae←
KKIf↓Me←Z↓iQJAMiK`A]QKeJ↓iQJ~)YCgh↓KISi%]NAg∃ggS←8AoCf↓iKe[%]CiK⊂@Z@b8@A∪L↓]↑AaI←OeC4ASfAMaKGS→SKHX↓iQJ~)YCgh↓ae←OICZAK⊃SiKH↓SfAe∀[←aK9KH\~(~∃∨]
JAiQ∀A	∪PAe←kQS]JA!CfAE∃K\AS9SiSCQKHXAQQJAaI←OeC5[KdA
C\AKaC[S]∀AC]r4∃giK@AoSi!S\Ai!JAae=OeCZ0AIKY∃iJAS9giek
iS←]LA←dA%]gKePA]Kn↓←]Kf0AC]H↓KmK\4∃CIH↓]KnA5←iS←8AgiKAfAkg%]NAi!JAiK¬GPAE=p\@AQQJAi∃CGPA	←pA⊃∪(A[=IJ~∃→k]Gi%←]fA%\A[k
PAiQ∀AgC[∀AMCg!S←\A¬fAiQ∀A)β
⊂AG←5[C]H↓kgKH↓M←d~)[K[←ISuS]≤Aa←g%iS←]L\@A⊃=oKmKHXAKC
P~∃i%[JAi!JA)¬π⊂AEUii←\↓SfAI∃aeKgMKHA←8AiQJ↓iKCG AE←p0AE←i ABAa=gSiS=\ASf4∃eKG=eIKH↓C]HA∧A]Kn↓ae←OICZAS9giek
iS←\↓SfAO∃]KeCQKHAM=dAga∃GSMs%]NAB↓[←iS=\~∃i<AO↑AQ↑AiQ¬hAa←MSiS←8\~∀~)CGP↓ae←OICZAS9giek
iS←\↓SfAe∃MKee∃HAi↑↓ErAB↓k]ScUJAgi∃`A]k5EKd\4∃'iK@A]k[	KefA¬eJA]U[EKe∃HAG←9gKGkQSmKYdAC]H4∃CeJ↓Cki←5CiSG¬YYrA¬IUkgQKHAo!K]Km∃dAS]MiekGQS←]f↓CeJA%]gKeQKH~∃=dAIK1KiKH8@AαAQsaSG¬XAgKEkK]G∀A←LAAe←Oe¬ZAgi∃afAo%YXAE∀AISgAYCsK⊂ACf~)M←YY=ofu88~∀~∀$∩∩∩∩$@∩@@t~∀∩$∩∩∩@d\@@@@@@@↓≠∨-
↓!∨∪≥Pb~∀∩$∩∩∩b@\@@@H`bA≠=-
A!=∪≥(d4∀∩∩∩$∩∩∩@@t~∀4∃9∃8,~∃∪\↓iQSf↓KqC[AYJXAMiKafrAC]⊂@b`A¬eJAE=iPA[=iS←\↓G←[[¬]IfA¬]HAgQK`@b@~∃G←9iCS]LABAY¬EKXXd`bX↓oQSG AGC\↓EJAkMKHAM=dAae=OeCZ↓EeC]
QS]N8@A∪]MiekGQS←\~)YCEK1fACe∀AS]i∃OKdA9k[EKIfAoQ%GPAG¬\ACgMk[JAYCYkKLAS\AQQJAe¬]OJA→e←Z~(`Ai↑fdnl\]8\~(~∀~∀4∃8X~(\F1\CINPUT AND OUTPUT COMMANDS\F0

\J\
The following commands are used for writing and reading hard copies of
programs and positions.  All input and output is directed to either the
console terminal or to the cassette magnetic tape peripheral.  As an option, it
is possible to connect the manipulator computer directly to another
computer and perform inter-computer data transfers to load and store
programs and positions.\.

\jLISTT p1,....,p8  -
Types out the values of up to eight different positions on the console
terminal.  If no position names are specified, the values of all existing
positions will be printed.\.

\jSTORET p1,...,p8 -  
Writes the values of up to eight different positions onto cassette
magnetic tape.  As with LISTT, if no positions names are specified, all
positions will be written out.\.

\jLOADT -  
Reads in the positions stored on cassette magnetic tape.\.

\jLISTP program, s1, s2  -  
Types out the user motion program from step s1 to step s2.
If the step numbers are omitted the entire program will be printed.\.

\jSTOREP program  -  
Writes the entire program on cassette magnetic tape.\.

\jLOADP -  
Reads in a program from cassette magnetic tape.\.

\jPROGS  -  
Prints out the names of all programs that have at least one
program step defined.\.



\,
\F1\CCOMPUTER STATUS\F0

\J\
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.\.

\jCLEAR  -  
Re-initializes ARM program so that all positions and programs are
deleted.  This is a totally destructive operation.  This function first
asks "Are you sure (Y,N)?" to verify that the operation is to be
performed.\.

\jFREE  -  
Types the percentage of free storage that is not currently in use.  As
the available free storage area is being added up, a simple check of the
whole area is made to ensure that the free storage book-keeping tags are
consistent.\.

\jSTATUS  -  
Prints the status information of the program being executed.  This
includes data on the program or subroutine step which will be executed next
and the number of program EXEC loops completed and those 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.\.

\jDONE  -  
Monitor program stops, computer exits to ODT. The program can be
restarted by starting execution at location '20000.\.



\,
\F1\CEXECUTION CONTROL\F0

\J\
Once a program has been written and all of the required manipulator positions
have been defined, the following commands can be used for executing and
single stepping through the program.\.

\jEXEC program, nloop, step  -  
Executes the motion program, "nloop" number of times.  The value of nloop
can be between 32767 and -32768.  All negative values of nloop put the
program into a infinite looping mode.  If nloop is omitted or assigned a zero
value, the program will be executed one time.  If the program name is
omitted, the last program executed will be re-started.  If "step" is
specified, the motion program begins execution at specified program step
for the first pass, otherwise, the program starts execution at
step 1.  All successive passes begin at the start of the program.\.

\jP  -  
Proceeds the program at the step following the step where execution
was halted due to a PAUSE instruction or runtime error.\.

\jX  -  
Program single step mode.  Executes the next instruction in the user
program and then halts.  Like the "P" instruction, "X" can only be typed
after a PAUSE instruction has been executed or after a non-fatal run-time
error has occurred.\.

\jABORT  -  
Program execution is terminated at the completion of the step currently
being executed.\.

\J\
When a program terminates execution for whatever reason, a message is
typed on the console terminal indicating the reason for termination and
the program location where the termination occurred.

In addition, while a program is being executed, the following functions
can be executed from the console terminal:  POINT, TEACH, HERE, WHERE,
LISTT, STORET, LOADT, LISTP, STOREP, LOADP, PROGS, FREE, STATUS, EDIT.
This ability allows the programmer to touch up positions while the
manipulator is in motion and even to alter the program being executed or
to load or develop new programs.  Furthermore, this facility enables the
interrogation of the computer as to the status of the program currently
being executed.\.



\,
\F1\CPROGRAM INSTRUCTION SET\F0

\J\
The following sections describe the available program instructions.
Due to the great flexibility of the basic structure of the language,
new instructions and data types which are deemed necessary can be added
very easily.\.


\,
\F1\CMANIPULATOR MOTIONS\F0

\J\
There are three basic methods that can be employed for moving the
manipulator's hand from one point to another:  hardware
slewing, joint interpolation, or straight line.  Each of these methods is
described below.

In hardware slewing mode, the computer generates a single set of joint
angles corresponding to the desired final position of the manipulator.
These angles are sent to the individual joint hardware position servos at
the start of the motion and each joint is permitted to move to its final
position at its own speed.  The resulting motion is therefore very
fast.  However, the path of the terminal device will not, in general,
follow a simple curve.  A typical program instruction for moving the
arm to a position called "PT1" using the slewing method can be written
as follows:\.

		\CGO PTI

\J\
For a joint interpolated motion, the software generates a
series of joint angles which go from the manipulator's initial position to its
final position using an interpolating polynomial.  The speed and position
of each joint is continuously and accurately controlled throughout the
trajectory.  The path of the terminal device is smooth and quite
predictable.  The total time required for each motion can be controlled
by altering the maximum permitted joint speed ( see SPEED instruction ),
or if no special speed is specified a default value will be assumed.
Naturally, the default speed is also under the control of the programmer.
A sample instruction for generating a interpolated motion to a position
"PT1" follows:\.

			\CMOVE PT1

\J\
The final method for trajectory generation moves the manipulator's
terminal device along a straight line path.  As with joint interpolated
motion, set points are continuously generated by the computer and the
movement of the terminal device is smooth and accurately controlled.
Once again, the speed of each motion can be individually specified by
a SPEED instruction or a default value will be utilized.  A typical
straight line motion instruction follows:\.

			\CMOVES PT1

\J\
In addition to the three basic motion instructions, there are several
special instructions which are extensions of MOVE and MOVES.  These
are briefly described below:\.

\jREADY  -  
Moves the arm to the READY position above the work space.  This forces
the arm into a standard configuration and position.\.
	
\jREST  -
Moves the arm to the REST position.  This leaves the arm in a
position for power shutdown.\.

\jDRAW dx,dy,dz  -  
Moves the hand along a straight line a distance of dx in the X direction,
dy in the Y direction, and dz in the Z direction.\.

\jAPPRO position, distance  -  
Moves the manipulator to the indicated position offset by the specified
distance along the Z axis of the hand.  This instruction is used to move
the manipulator just above the final desired destination.\.

\jDEPART distance  -  
Moves the hand a specified distance along its Z axis.  This is
a very convenient way of retracting the hand so that it clears all
obstacles before moving off to the next destination.\.

\jDRIVE joint, angle, time  -  
Drives a single joint through a specified angle taking the indicated
amount of time to execute the operation.\.




\,
\F1\CGRIPPER INSTRUCTIONS\F0

\J\
Several instructions currently exist for controlling the opening of
a gripper device which can be provided with the manipulator.  Similar
commands for operating any terminal device attached to the arm can
be added to the basic language upon request.  The following instructions
are intended to indicate the type of control possible.\.

\jOPEN distance  -  
Changes the hand opening to the specified distance during the execution of
the next motion instruction.\.

\jOPENI distance  -  
Performs the same change in hand opening as in OPEN but the operation is
performed immediately instead of waiting for the next motion instruction\.

\jGRASP distance, program label  -  
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 no program label
is specified.  This instruction provides a simple one step method for
grasping an object and testing to ensure that proper contact was
achieved.\.



\,
\F1\CARM CONFIGURATION CONTROL STATEMENTS\F0

\J\
For the UNIMATE 500 manipulator, most X, Y, Z locations in the workspace of the
arm can be reached by assuming one of four possible spatial
configurations.  These configurations correspond to having the manipulator
resemble a human's right or left shouldered arm and having its elbow ( the
end of joint 3 ) either pointed up or down.  The four instructions that
have been provided for controlling the manipulator's configuration are:\.

\CRIGHTY, LEFTY, ABOVE, and BELOW

\J\
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 a READY or
REST instruction is executed or 2) when a specific change in configuration
is requested by the user program through the execution of any of the above
program instructions.  When a change in configuration is requested, the
change will be accomplished during the execution of the next GO
or MOVE motion instruction.\.



\,
\F1\CPROGRAM CONTROL LOGIC AND ARITHMETIC\F0

\J\
Integer arithmetic has been built into the language to allow the
execution of simple program loops and conditional branching.  In most
cases where a integer variable is required as an argument for a program
instruction, either the symbolic name of a variable can be given or a
integer value can be specified.  Integer symbol names conform to the same
rules given for position and program names.  Integer values must be
between 32767 and -32768.  A brief description of the integer arithmetic
and control instructions follows:\.

\jSETI var1 = var2 operation var3  -  
The value of the first variable is set equal to the result of evaluating
the expression on the right side of the equal sign.  The permitted
operations are:  addition (+), subtraction (-), multiplication (*),
integer division (/), and modulus determination (%).  If both the operation
and the third variable are missing, the instruction is a direction assignment
statement.\.

\jIF var1 relationship var2 THEN program label  -  
The value of the first variable is compared to the value of the second
and if the stated "relationship" is true, the program branches execution
to the specified program step.  Otherwise, the
next sEquential step of the program is executed as usual.  The possible
relationships that↓GC\A	JAiKMiKHA→←dACIJtAKEkCX@!"RX↓]←hA∃ckCXQ≥
R0~∃Oe∃CiKd↓iQC\Q∂(R0AOeK¬iKdAQQC\A=dAKcUCX@Q≥
RXA1KgfAQQC\@!→(RX↓←d~∃1KgfAQQC\A=dAKcUCX@Q1
R]88~∀
∃qU∂∨)<Aae←≥eCZA1CEKX@Z@AAKeM←I[fAC8Ak\[
←]ISQS←]C0AEeC9GPAi<AiQJ↓ae←OICZ~∃MiK`AMaKGS→SKHA	rAiQ∀AOSm∃\AYC	KX]88~∀~∃qU	≡AYCeSC	YJ@z↓mCXb1mCXd1mCXf@Z@@4∃π←[5K]GKLABAY=←`Ao!KeJAQQJAm¬eSCE1JASf↓CggS≥]KHAQ↑AmC1kKfA→e←ZAYCXbAQ↑~∃m¬XdAS8AgiKAfA←L↓mCXf8@A)Q∀AY←←@ASfA¬YoCsLAKqK
kiKH↓ChAY∃CghA=]JAi%[J\~)C]HA	eC]G!S]NA%]i↑AQQJA[%IIYJ↓←LAB↓Y←←`↓SfA]=hAaKI[Sii∃H]8\4∀~∃9)≥1(↓mCeS¬EYJ@Z~∃≠¬eWfAQQJAK9HA←L↓iQJA⊃≡AY←=`AoQ%GPAS9GeK[∃]ifAQQJAgAKGSM%KHAm¬eSCE1K8\~(~∃9UQ3!∩↓mCeS¬EYJ@Z@@~))saKLAiQJ↓mCYk∀A←LAQQJAS9iKOKHAmCe%CEYJ98\~∀4∃9∃8,~∃∪\↓CIISQS←\X↓io↑A	CgSF↓S]giIkGiS=]fACIJAae=mSIK⊂AM←d↓CYiKIS]NAQQJ~∃A←gSi%←]fAMi←eK⊂AS\AQeC]g→←e[CQS←]fi8\~∀4∃9U'∃(Aie¬]fb@tAieC9f@d@Z@@~))QJAYCYkJ↓←LAiIC]gM=e[Ci%←\@b↓SfAg∃hAKcUCXAi<AiQJ↓mCYk∀A←L~)ieC]MM←e[¬iS←\d]8\4∀~∃9)'⊃∪
PAieC9fA¬2↓IpYIdYIt@Z@@~))QJA`XA2X↓C]HAhAa←g%iS←]LA←LAQQJAiIC]gM=e[Ci%←\ACIJA[←⊃SMSK⊂AErA¬IIS]≤AiQJ4∃GQC9OKfA%\AISMiC]G∃ftAI`XAIr0AC]H↓ItXAIKgaK
iSmK1r]8\4∀~∃9)8⊗~∃%\A←e⊃KdAi<AG←]MKemJ↓iQJAMaCGJ↓eKck%eKHA	rAeKAKCiK⊂AgKcUK]GKLA←L~)←aKe¬iS←]LAC]H↓i↑Aa∃e[Sh↓iQJA⊃KmKY=a[K]PA←LA1SEeCISKfA=LAae=OeC[LX~∃gUEe←kQS]Kf↓CeJA%]GYk⊃KHAS8AiQJ↓YC]OUCOJ\A'kEI←kiS9KfAG¬]]←h↓CfAs∃hAEJ4∃GCY1KHAo%iPAgAKGSM%KHACIOk[K9if\@↓)QKe∃M←eJ0Aae←≥eC[f↓C]HAMkEe←UiS]KLACeJ4∃SIK9iSGC0\@Aβ1g↑XAMS]GJ↓CYXA⊃CiBAMi←eK⊂AS\AQQJAG=[aki∃dASf↓OY←E¬YYrA⊃KMS]∃HXAC1X~∃S9iKOKIfAC]⊂Aa←g%iS←]LAGC\↓EJAC
GKgg∃HAEr↓C]rAAe←Oe¬ZA←d4∃gkEI←kiS9J]8\4∀~∃9)∂∨'+λAgkEI←kiS9J@@Z@~∃aKGki%←\A←_AiQJ↓Gkee∃]hAaI←OeC4ASfAQK[a←ICeSYdAgkgAK]IK⊂AC]H4∃ae←≥eCZA∃qKGkQS←\A
←]iS9kKfAMiCei%]NAo%iPAi!JAMSIghAgQK`A←_AiQJ4∃gkEI←kiS9J\@AQQJAC⊃IeKgLA←LAQQJA]∃qhAgQK`AS8AiQJ↓Gkee∃]h~∃Ae←Oe¬ZASf↓Cki←5CiSG¬YYrAMCmKH8@A+`↓i↑@b@Aae←≥eC[f↓GC\A	J~∃gUaKeg∃IKHA¬hAC]dAOSm∃\AiS5J]8\4∀~∃9)%)+I≤@@Z@~∃)∃e[S]¬iKfA∃qKGkQS←\A=LAiQ∀AGkeIK]hAMkEe←UiS]J↓C]HAIJ[S]%iSCi∃f~∃KaKGki%←\A←_AiQJ↓YCgh↓gkga∃]IKH↓ae←OICZACPAiQJ↓giK`↓M←YY=oS]N↓iQJA∃qKGkQKH~∃≥∨'+∧↓S]giIkGiS=\\@A∧A%)U%≤AS9giek
iS←\↓KqKGUiKHA%\AiQ∀A[CS8Aae←≥eCZ~)Mk]GQS←]f↓YSWJ↓BA')= AS]MiekGQS←\]p\~∀~)9∃8⊗4∃)QJ↓MS]C0AOe←U`A←L↓S]giIkGiS=]fACIJAkg∃HAM←HAS]i∃eY←G-S]NAQQJAKaKGki%←\~∃=LABA5C]SaUYCi←HAae←≥eCZA]SiPA=iQKd↓IKmS
KfAC9HAi↑↓gkga∃]HAi!JAKq∃GkiS=\~∃←_Aae←≥eC[fi8\~∀4∃9U'%∂≥β_↓GQC]9KX@@4@@~∃QeC]g5SifA∧AgSO9CXAi<AiQJ↓IKmS
JACiQCGQK⊂Ai↑AQQJA←Uiakh↓GQC]9KY8\4∀~∃9)/β∪(↓GQC]9KX@@4@@~∃Ae←Oe¬ZASf↓akhA%]i↑A∧AoCSPAY←←@Ak]i%XABAMSO]C0ASfAIKGKSYKHA←8AiQJ↓S]akP~∃GQ¬]]KX98\~∀4∃9U	∃→β2A⊃keCi%←\@@4@@~∃AkifAQQJAaI←OeC4AS\A∧AoCSPAY←←@AM←d↓iQJAMaKGS→SKHA¬[←k]PA←LAQS[J\A)QJ4∃Ike¬iS←\↓GC\A	JAOSYK\ACLAC]r↓mCYk∀AEKi]KK\@8`bAC9H@fd\\lnAMKG←]⊃f]8\4∀~∃9)!β+'∀A[KgMCOJ@Z@@~))Ke[%]CiKLAKqK
kiS←8A←LA∧AkgKHAae←≥eCZA¬]HAieaKfA∧A[KgMCOJA=\AiQ∀AG←]M←YJ~)iKe[%]CX\AqK
kiS←8~∃GC8AEJA
←]iS9kKHA→e←ZAQQSfAA←S]h↓ErAieaS]N↓ ]8\4∀~∃9)')∨ @Z@@4∃'kgAK]If↓KqKGUiJA←_ABAaI←OeC4\@A!I←OeC4AKqK
kiS←8AGC]9←hAE∀AG←]QS]kK⊂~∃Me=ZAiQ%fAa←%]h]88~∀~∀4∀~∃80~∀→9cqπ'!
∪β_AM/∪)π A')βQ≠≥Q'9`4∀~∃9)8⊗~∃QQJAM=YY←o%]NAS9giek
iS←]LACeJ↓kgKH↓M←dA∃]CEY%]NAC9HAISMCEYS9NAga∃GSCX4∃MKCQkeKf↓←LAi!JAQCIIoCe∀Aa←g%iS←\↓gKem<AC]H↓iQJAM←Mio¬eJAiICUKGQ←er~)OK]KICi←d8@Aβf↓S]IS
CiKH↓EKY←\XABA→KnA←_AiQKMJAS]MiekGQS←]f↓GC\A	J~∃M=YY←o∃HAEr↓iQJA]←eHA¬→/β3LASLA%hASf↓IKgSIKHAi!ChAi!JAeKEkKgi∃HA←aQS←\A	J~∃iUe]KH↓←MLA=dA←\↓IkeS9NACY0AgkG
KggSYJA[←QS←]f8@A/Q∃]KmKHABAg]SiGP↓SfA]=h~∃M=YY←o∃HAEr↓β→/βe&XASPASfA¬ggk[∃HAiQ¬hAiQ∀AgoSQGPAg∃iiS]≤ASfA=]YrAQ↑~∃K→MKGh↓iQJA9KqhA5←iS←8]8\~(~∃9U
∨β%'∀@yβ→]β3&|@Z@@4∃)QJ↓Y←nAQ←YKe¬]GJA→KCikIJASf↓K]CE1KHAS8AiQJ↓QCeI]CeJAMKem↑↓g↑Ai!Ch~∃1CeOKHAKee=efAS8AiQJ↓MS]C0Aa←g%iS←\↓←LAi!JACe4AU←S9ifAo%YXAE∀AaKe5SiiK⊂ACh~)iQJA∃]HA←_AiQJ↓]Kqh↓[←iS=\\@AQQSfA]SYXAIKgkYPAS\A5kGPA→CgiKHA[←i%←\~∃∃qKGkQS←\AQS[Kf↓SLAQ%OPAC
GkeC
rASf↓]←hAIKckSIKH]88~∀~∃qU
∪≥∀@yβ→]β3&|@Z@@4∃∨aa=gSiJ↓←LAi!JAπ∨¬%'
A%]gieUGiS←8]8\~(~∃9U9∨≥+→0@yβ→]β3&|@Z@@4∃)QJ↓]Kqh↓KqKGUiKHA5←iS←8ASfAQKe[S9CiKH↓oSiQ=khAo¬SiS]≤AM←d↓iQJA!CeIo¬eJ~∃Q↑AgS≥]CXAQQChA¬YXA[=mS]N↓U←S]QfAQCYJAeK¬GQKHtheir 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.\.

\jNULL <ALWAYS>  -  
Opposite of the NONULL instruction.\.

\jINTOFF  -  
Turns 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.\.

\jINTON  -  
Forces the hardware to integrate the position error throughout the next
motion.\.

\jPULSE  -  
Enables the hardware hand pulse mode during the next arm motion for
approximately 100msec.  This mode is useful for freeing the hand after it
has jammed open or closed.\.

\jSPEED value <ALWAYS>  -  
Requests that the next arm motion be performed at a speed other than
normal( = 100).  The percentage can range from 1 ( extremely slow ) to
32767 ( the largest possible integer variable number which in this case
produces a hardware slewing mode ).\.


\,
\F1\CMISCELLANEOUS INSTRUCTIONS\F0

\J\
The following two instructions have been included in the language to
allow program documentation and error message type out.\.

\jCOMMNT message  -  
Comment line, a no-operation at run-time.\.

\jTYPE message  -  
Types the message on the console terminal.\.