Embedded Galil Software Routines
AUTO
This function is called on system reset. It's a special label (Galil Firmware) to create an autostart program on power-up. Everything starts from here. One of it's main functions is to flag that nothing is initialized. Various functions read the variable "Reboot" and terminate if it is non zero. Other functions are to lock the brakes and turn the drives off.
File: main.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called from this one:
JS #Brakes
JS #DbCreat
JS #Temp
Brakes
This function locks/unlocks the brakes on the x/y gantry.
File: xyops.g
Args:
BraARG1 -- Lock/unlock flag
0 = lock Brakes
<> 0 = un-lock Brakes
Results:
BraRSLT1
0 = No Error.
>0 = Gallil error code resulting from "OB" command.
Messages sent to the Mid-level code:
(normal)
MG "boxBrakes set state starting"
MG "boxBrakes set mode locked"
MG "boxBrakes set mode unlocked"
MG "boxBrakes done"
(errors)
MG "boxBrakes set result error"
MG "boxBrakes set error NoBrakes"
Close
This function closes the gripper. It then tests for button presence. It takes no arguments and set two different result variables before it exits. Result variable CloRSLT1 is set to the result of closing the gripper. Result variable CloRSLT2 is set to zero if the gripper is empty after closing the jaw. If after closing the jaw a button is present CloRSLT2 is set to one.
File: gripops.g
Args: (none )
Results:
CloRSLT1 Result of closing gripper.
0 = No error, i.e. closed
2-99 = Error. Value from galil "SC" command.
CloRSLT2 Button presence after gripper close.
0 = Gripper empty
1 = Button in gripper
Messages sent to the Mid-level code:
(normal)
MG "boxClose set state starting"
MG "boxClose set result ok"
MG "boxClose set mode closed"
MG "boxClose done"
(errors)
MG "boxClose set result error"
MG "boxClose set error NoClose"
Embedded functions called from this one: (none)
CMDERR
This function traps command errors and causes them to retrun an error code to whatever function happened to be running at the time. Basically this is a "I forgot to test for it" trap.
File: main.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called from this one: (none)
Cold
This function starts up the system. First, the system is put in a safe state. Next the satus monitor is started up. Finally, the initialization functions (init and home) for each axis are called with safety checks along the way. The initialization will abort if there is an unexpected error.
File: coldstart.g
Args:
ColARG1 = Level of safety override
0 = No safety overrides.
1 = Initialize with a button present.
Results: (none)
Messages sent to the Mid-level code:
(normal)
MG "boxCold set state starting"
MG "boxCold set result ok"
MG "boxCold done"
(errors)
MG "boxCold set result error"
MG "boxCold set error ButtonOnInit"
MG "boxCold set error ButtonNotID"
MG "boxCold set error GripInit"
MG "boxCold set error NoStatMon"
MG "boxCold set error NoGripInit"
MG "boxCold set error NoZInit"
MG "boxCold set error NoXYInit"
MG "boxCold set error UnknownErrInit"
Embedded functions called from this one:
JS #Ginit -- initializes the gripper axis
JS #Ghome -- homes the gripper axis
JS #IfButt -- see if a button is present
JS #Zinit -- initializes z axis
JS #Zhome -- homes the z axis
JS #XYinit -- initializes xy gantry system
JS #XYhome -- home the xy gantry system
Drop
This function drops up a button on the plate using the user supplied argument to decide how much to descend on the z axis. It determines the Z distance based on current radius from the center of the plate. Set argument variable DroARG1 to zero to compute the drop height based on x/y position. Set GraARG1 to 1 to assume drop on plate. Set GraARG1 to 2 to assume drop on park circle.
File: gripops.g
Args:
DroARG1 = Plate distance. See comment block above.
0 = Compute drop height from x/y position
1 = Assume drop on plate.
2 = Assume drop on park circle.
Results:
DroRSLT1 = Result of attempt to drop button.
0 = No Error.
1 = button still in gripper.
2 = Motion error
3 = Bad Argument
DroRSLT2 = Z status after dropping.
0 = No Error.
>1 = Galil "SC" result for last z move
DroRSLT3 = griper status after dropping.
0 = No Error.
>1 = Galil "SC" result for last gripper move
Messages sent to the Mid-level code:
(normal)
MG "boxDrop set state starting"
MG "boxDrop set result ok"
MG "boxDrop done"
(error)
MG "boxDrop set result error"
MG "boxDrop set error GripInop"
MG "boxDrop set error NotDropped"
MG "boxDrop set error zInop"
MG "boxDrop set error BadArg"
Embedded functions called from this one:
#Open -- opens the gripper
#Close -- closes the gripper
encCalc
This function computes the encoder position from the distance between two reference marks. Note that this algorithm is specific to the Heidenhain Encoders. Variable names follow those in the documentation from the manufacturer.
The basic premise of this scheme is that index marks can be positioned in such a way that one only need traverse two of them and knowing the direction of travel, the absolute position of the first mark encountered can be determined.
The xhome, whome, and yhome routines all call this function as they all use the same type of encoder. This is a generic routine for any encoder of this type.
Note that this function is used internally and sends no messages back to the mid level code.
One should read the encoder documentation and the source for a complete understanding of how these routines work.
Args:
encARG1 = encoder position of 1st index mark encountered
encARG2 = encoder position of 2nd index mark encountered
encARGz = direction of travel
Results:
encRSLT1 = result of encoder formula.
Fan
This function turns the electronic box cooling fan on/off. Set the argument variable FanARG1 to zero if you want to turn the fan off, and set it to one if you want to turn the fan on. The function use output 16 of the Galil Box to command the fan.
File: periphio.g
Args:
FanARG1
0 = Fan Goes off
1 = Fan Goes on
Results: (none, just writes an i/o bit)
Messages sent to the Mid-level code:
MG "boxFan set state starting"
MG "boxFan set mode 0"
MG "boxFan set mode 1"
MG "boxFan set result ok"
MG "boxFan done"
Embedded functions called from this one: (none)
Fault
This function handles the hardware "error" interrupt. This interrupt is assigned to input 5.
File: errors.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called from this one: (none)
Ghome
This function homes the Gripper axis. First it checks to see if it's already into the home switch. If so, it backs out of it. Then it jogs slowly into the switch.
File: gripops.g
Args: (none)
Results:
GhoRSLT1 = 0 % Result code.
0 = No error
Messages sent to the Mid-level code:
(normal)
MG "boxGhome set state starting"
MG "boxGhome set result ok"
MG "boxGhome done"
(error)
MG "boxGhome set result error"
MG "boxGhome set error NoHome"
Embedded functions called from this one: (none)
Ginit
This function initializes the gripper axis. Every time this function is called it loads the GripPos array. Then configures the encoders and motor type for G and enable the motor.
File: gripops.g
Args: (none)
Results:
GinRSLT1 = Result of homing gripper.
0 = No error
Messages sent to the Mid-level code:
MG "boxGinit set state starting"
MG "boxGinit set result ok"
MG "boxGinit done"
Embedded functions called from this one: (none)
Grab
This function picks up a button from the plate using the user supplied argument to decide how much to descend on the z axis. It determines the Z distance based on current radius from the center of the plate. Set argument variable GraARG1 to zero to compute the distance based on x/y position. Set GraARG1 to 1 to assume gripper is over the plate. Set GraARG1 to 2 to assume gripper is over the park/stow area.
File: gripops.g
Args:
GraARG1 = What height to use
0 = Compute z distance based on x/y position
1 = Assume gripper is over the plate
2 = Assume gripper is over the park/stow area.
Results:
GraRSLT1 = Result code.
0 = No Error.
1 = Gripper Inoperative.
2 = No button found.
Messages sent to the Mid-level code:
(normal)
MG "boxGrab set state starting"
MG "boxGrab set result ok"
MG "boxGrab done"
(errors)
MG "boxGrab set result error"
MG "boxGrab set error GripInop"
MG "boxGrab set error NotFound"
MG "boxGrab set error BadArg"
Embedded functions called from this one:
#Open -- opens the gripper #Close -- closes the gripper
IfButt
This function Determines if a button is in the gripper. It first insures that the gripper is configured such that the test is valid. Under the present design, this means closing the jaws, and returning the result of the close operation. Later, it might be possible to detect a button no matter what the state of the gripper, and this function would be modified accordingly.
File: gripops.g
Args: (none)
Results:
IfBRSLT1 = Result of test for button.
0 = No Button.
1 = Button in gripper.
>1 = Gripper Error ( See "Close" )
Messages sent to the Mid-Level code:
(normal)
MG "boxIfButt set state starting"
MG "boxIfButt set mode nobutton"
MG "boxIfButt set mode button"
MG "boxIfButt set result ok"
MG "boxIfButt done"
(errors)
MG "boxIfButt set result error"
MG "boxIfButt set error NoClose"
Embedded functions called by this one:
#Close -- closes the gripper
ININT
This function is reserved by the box as the input intterupt handler. If any of the input interrupts have been enbled by the "II" command, this routine will called when the associated input bit goes low. From there, this routine will poll to see what needs service. "Reboot" and terminate if it is non zero.
File: main.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called by this one: (none)
IntrOn
This function allows a user to reenable interrupts after an error.
File: errors.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called by this one: (none)
IsWarpd
This function read back the vacuum sense switch on the plate. It takes no arguments. The current on/off state of the sense switch is returned in result variable IsWRSLT1. The function reads analog input 9 to check the switch out.
File: periphio.g
Args: (none)
Results:
IsWRSLT1 = sense sqitch status.
0 Plate is flat.
1 Plate is warped.
Messages sent to the Mid-level code:
MG "boxIsWarpd set state starting"
MG "boxIsWarpd set mode", IsWRSLT1 {F2.0}
MG "boxIsWarpd set result ok"
MG "boxIsWarpd done"
Embedded functions called from this one: (none)
Led
This function turn the gripper LED on to the specified level (Or else off....). Set argument variable LedARG1 to the desire level of intensity. A value of zero will turn the gripper LED off. The function uses the lowest 3 bits of I/O port 0 on the Galil Box to select the desired level (mask used with "OP" is 65532 or "1111 1111 1111 1000").
File: periphio.g
Args:
LedARG1 = intensity level.
0 = Led off
1 = On, low
2 = On, medium
3 = On, high.
Results: (none, just sets IO bits)
Messages sent to the Mid-level code:
MG "boxLed set state starting"
MG "boxLed set result ok"
MG "boxLed done"
Embedded functions called by this one: (none)
Move
Caution: This page is meant to be an abstract of calling conventions and function behavior and does not document the details of the code.
The #Move function moves a fiber from one location to another as specified in the arguments. This is the fundemental function of the system, and all other functions are secondary to this one.
Pre-move safety checks include making sure of no collisions, valid destination, and no button presence in the gripper. All this checkings must be made by the mid/high-level code before moving a fiber. If you are using this function directly then be very careful because no safety checks are made by this function.
Next, the gripper travels to the button (see the functions in "xyops.g"), and attempts to grab it. (documented with the file "gripops.g") If successful, the gripper relax and the button is carried to the new location, and an attempt made to drop it. If the drop fails, the button can be parked directly from the gripper.
File: buttmove.g
Args:
MovARG1 = x current location
MovARG2 = y current location
MovARG3 = x destination location
MovARG4 = y destination location
Results:
MovRSLT1 = Result code. Note that 0-4 are same as button status.
0 = No Error.
1 = Locked.
2 = Not found
3 = Dropped
4 = Positioner not operational
5 = Last move not yet broadcast.
6 = Could not drop
7 = X,Y Motion Failure
8 = Button present on entry
9 = Database has not been initialized since reboot
Messages sent to the Mid-level code:
(normal)
MG "boxMove set state starting"
MG "boxMove set state seek"
MG "boxMove set state grab"
MG "boxMove set state carry"
MG "boxMove set state drop"
MG "boxMove set result ok"
MG "boxMove done"
(errors)
MG "boxMove set error FibLocked"
MG "boxMove set error NotFound"
MG "boxMove set error LostInTransit"
MG "boxMove set error PosNotOp"
MG "boxMove set error LastNotBroadcast"
MG "boxMove set error NotDropped"
MG "boxMove set error NoXYmove"
MG "boxMove set error GripNotEmpty"
MG "boxMove set error DbaseUndef"
Embedded functions called from this one:
JS #IfButt -- see if a button is present.
JS #xygo -- the xy move function
JS #Grab -- pick up the button.
JS #xygo -- the xy move function
JS # IfButt -- see if a button is present.
JS #Drop -- drop the button.
Open
This function opens the gripper. The user supplied argument is used to determine the final position. If OpeARG1 is 0 then the final position will be "closed". If set to 1 the final position will be "relaxed". If set to 2 final position will be "normal open" position. If set to 3 the final position will be "open wide" position. This are the same values used in the array GripPos.
File: gripops.g
Args:
OpeARG1 = Position to open gripper to.
0 = Closed position
1 = Relaxed position
2 = Normal open position
3 = Open wide position
Note that the values used are in the array "GripPos", defined at the top of this file. Note also that this function doesn't return any button presence and that an open with an arg of zero is NOT the same as a "close" The first option is just there for completeness.
Results:
OpeRSLT1 = Result of opening gripper.
0 = No error, i.e. open
2-99 = Error moving gripper jaws. Value from galil "SC" command
Messages sent to the Mid-level code:
(normal)
MG "boxOpen set state starting"
MG "boxOpen set mode ", OpenARG1
MG "boxOpen set result ok"
MG "boxOpen done"
(errors)
MG "boxOpen set result error"
MG "boxOpen set error NoOpen"
Embedded functions called from this one: (none)
OrthStp
This function is called by the interrupt handler to see if the interrupt was caused by a stage mis-alignment.
File: errors.g
Args: (none)
Results:
OrtRSLT1
0 = No Orthoganality Problem
1 = Stages mis-aligned, System stopped.
2 = Stages mis-aligned, Couldn't stop.
Messages sent to the Mid-level code:(none)
Embedded functions called from this one: (none)
Park (not used)
DISCUSSION
This function parks the specified button. It is simply a shell wrapped around the Move function. It generates the appropriate destination coordinate mathematically, and adds one additional return value: "button already parked". The computations used to determine the park position are discussed below:
Compute the angle, at the center of the plate, between the "zero" fiber and the park position of the target fiber. thetaSep is the angle between adjacent parked buttons, in a polar coordinate system coincident to the center of the focal plane plate.
thetaP = thetaSep * ParARGid
Since variables are scarce, use the input variables for the move command as working storage... Then, if we actually move, they'll already be ready to go.
MovARGx = rPark * @COS[ thetaP ] MovARGy = rPark * @SIN[ thetaP ]
We always test for already being there. First, compute the x,y errors from the desired position, and then skip the rest if both are less than the prescribed value. tmp1 and tmp2 are scratch variables and my get used by other functions. Don't count on them being valid any time after this function ends.
tmp1 = @ABS[ MovARGx - ButtX[MovARGid] ] distance from "parked" in X
tmp2 = @ABS[ MovARGy - ButtY[MovARGid] ] distance from "parked" in Y
tmp1 and tmp2 then get tested against a tolerance.
File: buttmove.g
Args:
ParARGid , button to be moved.
Results:
ParRSLT1 , Result code. Note that the first 8 are the same as "Move" and are simply passed back from it.
0 = No Error.
1 = Locked.
2 = Not found
3 = Dropped
4 = Positioner not operational
5 = Last move not yet broadcast.
6 = Could not drop
7 = X,Y Motion Failure
8 = Button present on entry
9 = Already parked, no action.
Messages sent to the Mid-level code:
(normal)
MG "boxPark set result ok"
MG "boxPark done"
(errors)
MG "boxPark set result error"
MG "boxPark set error NotParked"
MG "boxPark set error AlreadyParked!"
Embedded functions called from this one:
JS #Move % Call the Move Subroutine.
Plate
This function warp or flatten the focal plane plate. Set PlaARG1 to 0 to flatten the focal plate. Set PlaARG1 to 1 to warp the focal plate. The function uses output bit 10 to open/close the vaccum valve thus warping or flattening the plate.
File: periphio.g
Args:
PlaARG1 = Warp or flatten.
0 = Flatten plate
1 = Warpe plate
Results:
PlaRSLT1 = Result code.
0 = NoError
1 = Plate didn't warp
2 = Plate didn't flatten
Messages sent to the Mid-level code:
(normal)
MG "boxPlate set state starting"
MG "boxPlate set mode warp"
MG "boxPlate set mode flat"
MG "boxPlate set result ok"
MG "boxPlate done"
(errors)
MG "boxPlate set state error"
MG "boxPlate set error NoWarp"
MG "boxPlate set error NoFlat"
Embedded functions called from this one:
JS #IsWarpd -- read back the vaccum sense switch.
Pwr
This function returns the status of various power monitoring bits. Use this function to check the status of the power supplies and U.P.S. Bit 0 (blackbox input 11) refers to the 'on battery' U.P.S. condition. Bits 1 (blackbox input 12) refers to the 'low battery' U.P.S. condition. A value of one for bits 0 and 1 indicates that the condition is active. Bit 3 (blackbox input 14) shows the status of the 5V power suply. Bit 4 (blackbox input 15) shows the status of the 12V power supply. A value of zero for bits 3 and 4 indicates fault condition.
File: periphio.g
Args: (none)
Results:
PwrRSLT1, returns an integer with the appropriate bits
Messages sent to the Mid-level code:
MG "boxPwr set state starting"
MG "boxPwr set mode", PwrTmp {F3.0}
MG "boxPwr set result ok"
MG "boxPwr done"
Embedded functions called from this one: (none)
ShutDn
This function shut's down the system to an inert state system. Each level representents a progressively greater shutdown and includes the operations from the level below it.
File: coldstart.g
Args:
ShuARG1, how far the shut down
0 = Gripper Moves out
1 = Brakes lock and Drives power off.
2 = All switchable Optos go off.
3 = DataBase is invalidated.
Results:
ShuRSLT1, result of shutting down
0 = No Error.
Messages sent to the Mid-level code:
(normal)
MG "boxShutDn set state starting"
MG "boxShutDn set state GripOut"
MG "boxShutDn set state DrivesOff"
MG "boxShutDn set state OptosOff"
MG "boxShutDn set result ok"
MG "boxShutDn done"
(errors)
MG "boxShutDn set result error"
MG "boxShutDn set error NoShutDown"
Embedded functions called from this one:
JS #xygo -- moves the xy gantry system
JS #Brakes -- lock/unlock brakes on xy gantry system
Temp
This function choose and read back one of the temperature sensors. The temperature sensors are selected by writing the given 3 bit mask TemARG1 to the I/O port 0 on the box. The function uses bits 5-7 of this port. The mask used with "OP" is 65311 or "1111 1111 0001 1111". Once the channel is selected the function reads back analog input 5. This readout is then scaled and corrected using local constants "Tscale" and "Toofset" to get the actual temperature.
File: periphio.g
Args:
TemARG1, 3 bit mask for selection of channel
Results:
TemRSLT1, number respresenting temp.
Messages sent to the Mid-level code:
MG "boxTemp set state starting"
MG "boxTemp set mode", TempVal {F3.2}
MG "boxTemp set result ok"
MG "boxTemp done"
Embedded functions called from this one: (none)
where
This function Simply returns the positions of the various axis as a TCL set.
File: xyops.g
Args: (none)
Results: Outpouts a string
Messages sent to the Mid-level code:
(normal)
MG "boxwhere set state starting"
MG "boxwhere set mode { ", {N}
MG " ", _TPX {F7.0}, {N}
MG " ", _TPY {F7.0}, {N}
MG " ", _TPW {F7.0}, {N}
MG " ", _TPZ {F6.0}, {N}
MG "}"
MG "boxwhere done"
xhome, yhome & whome
These functions home the various gantry axis (note that this function is essentially identical for all 3 axis and only the variable names change. The one exception to this is that the X encoder is mounted backwards and there is a bit of extra code in "xhome" to compensate for that). These homing routines are *entirely* dependent on the Heidenhein encoders and their coded referrence marks. This will not work with any other kind of encoder. The axis moves until two index pulses are found and then the positions are fed to an algorithm that determines the absolute position of the first index mark. The stage moves back to that mark and then sets the encoder value to the computed position, offset by a user supplied constant that is used to put the zero point at the convenient position.
File: xyops.g
Args: (none)
Results:
xhRSLT1
0 = No Error.
1 = Motion didn't start.
2 = No index pulses were found.
Messages sent to the Mid-level code:
(normal)
MG "boxxhome set state starting"
MG "boxxhome set result ok"
MG "boxxhome done"
(errors)
MG "boxxhome set result error"
MG "boxxhome set error NoMotion"
MG "boxxhome set error NoIndexMark"
Embedded functions called from this one:
JS #encCalc
xygo
This function Moves the x/y gantry system to the specified coordinates.
NOTE: This is the master function for x/y motion and should be the only one used since it impliments various safety checks. Direct operation of the x,y,w axis should be avoided. Moves generated using this function will be coordinated in X and Y. This function also makes sure that all the drives are on, and sets up a non-orthognality interrupt.
File: xyops.g
Args:
xygARGx -- New X position
xygARGy -- New Y position
xygARGa -- Acceleration along the vector
xygARGv -- Velocity along the vector
Results:
xygRSLT1
0 = No Error.
1 = No motion
2 = Motion inhibited
3 = No Drives
Messages sent to the Mid-level code:
(normal)
MG "boxxygo set state starting"
MG "boxxygo set result ok"
MG "boxxygo done"
(errors)
MG "boxxygo set result error"
MG "boxxygo set error NoDrive"
MG "boxxygo set error NoMotion"
MG "boxxygo set error Inhibited"
Embedded functions called from this one: (none)
XYhome
This function homes the x/y gantry system including setting the orthoganality of x/y. If the argument is zero, it will exit upon finding a button in the gripper, without moving anything. The steps followed are:
1 Check for buttons.
2 Gear X to W.
3 Home W.
4 Gear W to X
5 Home X
6 Send X/W to the average of their positions. (This is the orthoganality correction)
7 Define the true position of X/W.
8 Home Y
9 Define the true position of Y.
10 Move the gantry to the 0,0 point (tradition)
File: xyops.g
Args:
XYhARG1 Level of safety override
0 = No safety overrides.
1 = Home with button present.
2 = Continue even if one axis fails
Results:
XYhRSLT10 = No Error.
1 = Called before initialization
2 = Unknown button in jaws.
3 = Individual axis failure.
Messages sent to the Mid-level code:
(normal)
MG "boxXYhome set state starting"
MG "boxXYhome set state wHome"
MG "boxXYhome set state xHome"
MG "boxXYhome set state align"
MG "boxXYhome set state yHome"
MG "boxXYhome set result ok"
MG "boxXYhome done"
(errors)
MG "boxXYhome set error NoInit"
MG "boxXYhome set state error"
MG "boxXYhome set error ButtonFound"
MG "boxXYhome set error AxisFailure"
Embedded functions called from this one:
JS #whome
JS #xhome
JS #yhome
JS #xygo
XYinit
This function initializes the x/y gantry system to the proper modes. See the Galil DMC1500 manual and the source for an explanation of the initialization commands used. Most of the commands called have no real return code so this function tends to be dependent on working on the first pass. If this function won't run to completion, nothing else is going to.
File: xyops.g
Args: (none)
Results:
XYiRSLT1
0 = No Error.
1 = Brakes not released
Messages sent to the Mid-level code:
(normal)
MG "boxXYinit set state starting"
MG "boxXYinit set result ok"
MG "boxXYinit done"
(errors)
MG "boxXYinit set result error"
MG "boxXYinit set error NoXYinit"
Embedded functions called from this one:
JS #Brakes
zgo
This function moves the z gantry to the specified coordinate. The new Z position must be in encoder steps. The screw lead is 0.2 inches and the motor resolution is 2000 steps per revolution. The scale is then 2.54 microns per step.
File: gripops.g
Args:
zgoARGz = New Z position
zgoARGa = Acceleration along the vector
zgoARGv = Velocity along the vector
Results:
zgoRSLT1
0 = No Error.
Messages sent to the Mid-level code
(normal)
MG "boxzgo set state starting"
MG "boxzgo set result ok"
MG "boxzgo done"
(errors)
MG "boxzgo set result error"
MG "boxzgo set error NoDrive"
MG "boxzgo set error NoMotion"
MG "boxzgo set error Inhibited"
Embedded functions called from this one: (none)
Zhome
This function homes the Z axis. First make sure that the motor and the opto for the home switch are on. Then moves the motor until it find the edge on home switch and gets a little ways off the edge in the positive direction. Then it makes a nice and slow final aproach to the the edge.
File: gripops.g
Args: (none)
Results:
ZhoRSLT1 = 0 Result code.
0 = No error
Messages sent to the Mid-level code:
(normal)
MG "boxZhome set state starting"
MG "boxZhome done"
(errors)
MG "boxZhome set result error"
MG "boxZhome set error NoHome"
Embedded functions called from this one: (none)
Zinit
This function initializes the Z axis. It configures the encoders and motor type for Z. It also configures the Z home switch level, make sure sure the opto is on and enable the motor.
File: gripops.g
Args: (none)
Results:
ZinRSLT1 Result of z axis initialization.
0 = No error
Messages sent to the Mid-level code:
(normal)
MG "boxZinit set state starting"
MG "boxZinit set result ok"
MG "boxZinit done"
(errors)
MG "boxZinit set result error"
MG "boxZinit set error NoInit"
Embedded functions called from this one: (none)
Last Modified: March 23, 2000
rcantarutti
Updated on April 11, 2024, 9:48 am