tomoScan_PSO.template

# Database for EPICS PVS for tomography data collection software using the Aerotech
# PSO output from the rotation stage as a detector trigger.

################
# PSO parameters
################

record(mbbi, "$(P)$(R)PSOControllerModel") 
{
    field(DESC, "Aerotech controller model")
    field(ZRVL, "0")
    field(ZRST, "Ensemble")
    field(ONVL, "1")
    field(ONST, "A3200")
    field(VAL,  "$(PSO_MODEL)")
}

record(ai, "$(P)$(R)PSOStartTaxi") 
{
    field(DESC, "Start position with taxi")
    field(EGU,  "degrees")
    field(PREC, "5")
}

record(ai, "$(P)$(R)PSOEndTaxi") 
{
    field(DESC, "End position with taxi")
    field(EGU,  "degrees")
    field(PREC, "5")
}

record(longin, "$(P)$(R)PSOEncoderCountsPerStep") 
{
    field(DESC, "Encoder counts per projection")
}

record(asyn, "$(P)$(R)PSOCommand")
{
    field(PORT, "$(PSO_PORT)")
    field(ADDR, "0")
    field(OMAX, "256")
    field(IMAX, "256")
    field(OFMT, "Hybrid")
    field(IFMT, "Hybrid")
    field(TMOD, "Write/Read")
}

record(stringin, "$(P)$(R)PSOAxisName")
{
    field(VAL,  "$(PSO_AXIS_NAME)")
}

# This is a signed number, and must be negative if the encoder direction and motor direction
# in the controller are different.
# On the A3200 this value is read from the controller in the constructor,
# and includes the correct sign.  This overrides the value in the subsitutions file.
# However, on the Ensemble this value must be provided in the substitutions file

record(ai, "$(P)$(R)PSOCountsPerRotation") 
{
    field(DESC, "Number of encoder counts per revolution")
    field(VAL,  "$(PSO_ENC_PER_ROTATION)")
}

record(longin, "$(P)$(R)PSOEncoderInput") 
{
    field(DESC, "Encoder input")
    field(VAL,  "$(PSO_ENC_INPUT)")
}

record(ao, "$(P)$(R)PSOPulseWidth") 
{
    field(DESC, "Output pulse width in microseconds")
    field(VAL,  "10")
}

# This record is needed on the Ensemble to keep the socket from timing out.
# It is not needed on the A3200, but does not hurt. 
# SCAN could be set to Passive on the A3200.
record(asyn, "$(P)$(R)PSOKeepAlive")
{
    field(PORT, "$(PSO_PORT)")
    field(AOUT, "ROUND(1.1)")
    field(SCAN, "10 second")
}

record(bo, "$(P)$(R)ProgramPSO")
{
   field(ZNAM, "No")
   field(ONAM, "Yes")
}