Skip to content

Latest commit

 

History

History
146 lines (130 loc) · 10.6 KB

pv-mappings.org

File metadata and controls

146 lines (130 loc) · 10.6 KB

PV Mappings for Austin Robot PV

Dashboard (25idAustin:dashboard)

  • PUT PV is the name of the PV appended to the prefix (e.g. 25idAustin:dashboard:play).
  • PUT cmd is the command that is sent over the wire to the robot (i.e. dashboard command).
  • GET PV is the corresponding PV for retrieving the value the value.
  • Scan cmd is the command that is sent over the wire periodically (e.g. 0.5 sec) to check for new values.
    TPUT PVPUT cmdGET PVScan cmddtype
    :playplaybool
    :stopstopbool
    :pausepausebool
    :quitquitbool
    :shutdownshutdownbool
    :release_brakebrake releasebool
    :close_safety_popupclose safety popupbool
    :operational_modeset operational mode <value>:operational_mode_rbvget operational modeenum (manual/automatic)
    :powerpower on / power off:power_rbv[check robot mode?]bool
    :unlock_protective_stopunlock protective stopbool
    :restart_safetyrestart safetybool
    :installationload installation <value>str
    :programload <value>:program_rbvget loaded programstr
    :program_stateprogramStateenum
    :robot_moderobotmodeenum
    :safety_status*safetystatusenum
    :program_savedisProgramSavedbool
    :program_runningrunningbool
    :remote_controlis in remote controlbool
    :software_versionPolyscopeVersionstr
    T:serial_numberget serial numberstr
    T:model_numberget robot modelstr
    • This :safety_status PV should use the SafetyStatus enum, but some of the strings are longer than the 26 character limit, and so this will need to be factored.

Commands we skipped

  • close popup
  • popup
  • addToLog
  • safetymode
  • clear operational mode
  • generate flight report
  • generate support file
  • version (unrecognized)

Status (25idAustin)

Joint and position PV are set to mimic the EPICS motor records. Currently the following features are supported:

  • Setting the position directly (.VAL)
  • Readback value (.RBV)
  • Jog forward and backward (.TWV, .TWF, .TWR)
  • Jog velocity and acceleration (.JVEL, .JAR)
  • Moving status, and done moving (.MOVN, .DMOV)
PV SuffixHas .RBV field?Read-onlyPutterDtypeDesc
:i.RBVYfloatPosition of the first joint
:j.RBVYfloatPosition of the second joint
:k.RBVYfloatPosition of the third joint
:l.RBVYfloatPosition of the fourth joint
:m.RBVYfloatPosition of the fifth joint
:n.RBVYfloatPosition of the sixth joint
:x.RBVYfloatCartesion position x
:y.RBVYfloatCartesion position y
:z.RBVYfloatCartesion position z
:rx.RBVYfloatRotation around the x axis
:ry.RBVYfloatRotation around the y axis
:rz.RBVYfloatRotation around the z axis
:busyYboolWhether the run lock is acquired
:accelerationfloatAcceleration setting for robot movements
:velocityfloatVelocity setting for robot movements

[0/1] Tasks/Questions

  • [ ] Should we assume the driver will handle threads
  • [ ] Sort out the busy signal

Gripper (25idAustin:gripper)

PV SuffixdtypeRead-onlyPutterScanDesc
.ACTboolYRequest to activate the gripper
.ACRenumYYWhether the gripper is activate
.CLSfloatYYCalibrated “closed” position
.OPNfloatYYCalibrated “open” position
.CALboolYCalibrate the robot’s open/closed range
.RBVfloatYYCurrent gripper position readback value
.VALfloatYDesired position set point
.VELfloatHow fast the gripper should move
.FRCfloatHow much force the gripper may apply

Questions

  1. Can we caput the calibrated open/close gripper positions?
  2. Are scanned parameters correct?
  3. How does “calibrate” relate to the calibrated positions?
  4. Do we need a global lock for comms via urx?

Actions

Each action represents a python function.

The IOC get PVs for the typed arguments to the function, plus PVs to run the function (:Process), report busy status (:Status), and return a value (:Retval).

Pick (25idAustin:pick)

async def pick(i: float, j:float, k: float, l: float, m: float, n: float) -> int

25idAustin:pick:i 25idAustin:pick:j … 25idAustin:pick:n 25idAustin:pick:Process 25idAustin:pick:RetVal 25idAustin:pick:Status

Place (25idAustin:place)

async def place(i: float, j:float, k: float, l: float, m: float, n: float) -> int

Home (25idAustin:home)

async def home(i: float, j:float, k: float, l: float, m: float, n: float) -> int

Samples

Each sample position has a PV group (record). This pv group executes pick and place to and from the given sample position.

For example, for 25idcAustin:sample0

PV SuffixdtypeRead-onlyPutterScanDesc
:presentboolYYWhether the sensor detects a sample stage is present
:loadboolYDirect the robot to load this sample to the stage
:xfloatYTranslation coordinate of the sample pick position
:yfloatYTranslation coordinate of the sample pick position
:zfloatYTranslation coordinate of the sample pick position
:rxfloatYRotation coordinate of the sample pick position
:ryfloatYRotation coordinate of the sample pick position
:rzfloatYRotation coordinate of the sample pick position

There are also several overall sample PVs. For example, relative to for 25idcAustin

PV SuffixdtypeRead-onlyPutterScanDesc
:current_samplestrSample number for the currently loaded sample, or “None”
:unload_current_sampleboolYReturn the current sample to its board position
:current_sample_resetboolYReset the current_sample PV to it’s default value (“None”)
:homeboolYInstruct the robot to return to the first waypoint position
:cal_stageboolYInstruct the robot to calibrate the stage position