db/IOCPG9520.db
author Heinz Junkes <junkes@fhi-berlin.mpg.de>
Tue, 28 Oct 2014 04:47:56 +0100
changeset 4 f4ddf0ee30a9
parent 1 425def26d5f1
permissions -rw-r--r--
new structure, local EPICS-base and support files, not included in repo

# pg9520.db   Uwe Hoppe   Fritz-Haber-Institut der MPG   1/2013

record(stringin, "$(P)$(R)GetVersion") {
    field(DESC, "Get Contr. Firmware Version")
    field(DTYP, "stream")
    field(INP, "@pg9520.proto getVersion $(BUS)")
}

record(ao, "$(P)$(R)Recall") {
    field(DESC, "Restores the state of PG")
    field(DTYP, "stream")
    field(OUT, "@pg9520.proto recall $(BUS)")
    field(DRVL, "0")
    field(DRVH, "12")
}

record(ao, "$(P)$(R)Save") {
    field(DESC, "Store current state of PG")
    field(DTYP, "stream")
    field(OUT, "@pg9520.proto save $(BUS)")
    field(DRVL, "1")
    field(DRVH, "12")
}

record(bo, "$(P)$(R)State") {
    field(DESC, "En-/Disables all channels")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setState $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
}

record(bi, "$(P)$(R)GetState") {
    field(DESC, "Get state of all channels")
    field(DTYP, "stream")
    field(INP,  "@pg9520.proto getState $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
    field(SCAN, "2 second")
# Some commands can stop the generator
    field(FLNK, "$(P)$(R)CheckState")
}

record(calcout,"$(P)$(R)CheckState") {
    field(DESC, "Update state button")
    field(OOPT, "On Change")
    field(INPA,"$(P)$(R)GetState NPP NMS")
    field(CALC,"A")
    field(OUT, "$(P)$(R)State PP NMS")
}

record(ao, "$(P)$(R)Period") {
    field(DESC, "Sets the T0 period")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPeriod $(BUS)")
    field(PREC, "4")
    field(DRVL, "100e-9")
    field(DRVH, "5000")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserPeriod") {
    field(DESC, "Sets the T0 user period")
    field(OUT, "$(P)$(R)Period2BaseUnit PP NMS")
    field(PREC, "6")
    field(DRVL, "100e-6")
    field(DRVH, "5000000")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Period2BaseUnit") {
    field(DESC, "Convert Period to base unit")
    field(INPA,"$(P)$(R)UserPeriod NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)Period PP NMS")
}
record(calcout,"$(P)$(R)Period2UserUnit") {
    field(DESC, "Convert Period to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)Period NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserPeriod NPP NMS")
}
record(ao,"$(P)$(R)PeriodTweak") {
    field(DESC, "Step of Up/Down PeriodTweak")
    field(VAL, "1e0")
    field(PREC,"5")
}
record(calcout,"$(P)$(R)PeriodTweakDown") {
    field(DESC, "New period after Down Tweak")
    field(INPA,"$(P)$(R)PeriodTweak NPP NMS")
    field(INPB,"$(P)$(R)UserPeriod NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserPeriod PP NMS")
}
record(calcout,"$(P)$(R)PeriodTweakUp") {
    field(DESC, "New period after Up Tweak")
    field(INPA,"$(P)$(R)PeriodTweak NPP NMS")
    field(INPB,"$(P)$(R)UserPeriod NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserPeriod PP NMS")
}

record(mbbo, "$(P)$(R)Mode") {
    field(DESC, "Sets the T0 mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setMode $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Single")
    field(ONVL, "1")
    field(TWST, "Burst")
    field(TWVL, "2")
    field(THST, "Duty Cycle")
    field(THVL, "3")
}

record(mbbo, "$(P)$(R)GateMode") {
    field(DESC, "Sets Global Gate Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setGateMode $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Pulse inhibit")
    field(ONVL, "1")
    field(TWST, "Output inhibit")
    field(TWVL, "2")
    field(THST, "Channel")
    field(THVL, "3")
}

record(mbbo, "$(P)$(R)GateLogic") {
    field(DESC, "Sets Chan. Gate Logic Level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setGateLogic $(BUS)")
    field(ZRST, "Active low")
    field(ZRVL, "0")
    field(ONST, "Active high")
    field(ONVL, "1")
}

record(mbbo, "$(P)$(R)GateEdge") {
    field(DESC, "Select which edge to use")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setGateEdge $(BUS)")
    field(ZRST, "Rising")
    field(ZRVL, "0")
    field(ONST, "Falling")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)GateLevel") {
    field(DESC, "Sets the gate threshold")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setGateLevel $(BUS)")
    field(PREC, "3")
    field(DRVL, "0.2")
    field(DRVH, "15")
    field(EGU,  "V")
}

record(mbbo, "$(P)$(R)TriggerMode") {
    field(DESC, "Sets Global Trigger Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setTriggerMode $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Trigger")
    field(ONVL, "1")
}

record(mbbo, "$(P)$(R)TriggerEdge") {
    field(DESC, "Select which edge to trigger")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setTriggerEdge $(BUS)")
    field(ZRST, "Rising")
    field(ZRVL, "0")
    field(ONST, "Falling")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)TriggerLevel") {
    field(DESC, "Sets the trigger threshold")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setTriggerLevel $(BUS)")
    field(PREC, "3")
    field(DRVL, "0.2")
    field(DRVH, "15")
    field(EGU,  "V")
}

record(ao,"$(P)$(R)TimeUnitCF") {
    field(DESC, "ms")
    field(VAL, "1000.0")
}

#============================== Channel A ==============================

record(bo, "$(P)$(R)StateA") {
    field(DESC, "En-/Disable output pulse A")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPState(1) $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
}

record(ao, "$(P)$(R)WidthA") {
    field(DESC, "Width of the output pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPWidth(1) $(BUS)")
    field(PREC, "8")
    field(DRVL, "10e-9")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserWidthA") {
    field(DESC, "User-Width of the pulse")
    field(OUT, "$(P)$(R)Width2BaseUnitA PP NMS")
    field(PREC, "8")
    field(DRVL, "10e-6")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Width2BaseUnitA") {
    field(DESC, "Convert Width to base unit")
    field(INPA,"$(P)$(R)UserWidthA NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)WidthA PP NMS")
}
record(calcout,"$(P)$(R)Width2UserUnitA") {
    field(DESC, "Convert Width to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)WidthA NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserWidthA NPP NMS")
}
record(ao,"$(P)$(R)WidthTweakA") {
    field(DESC, "Step of Up/Down Width Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)WidthTweakDownA") {
    field(DESC, "New width after Down Tweak")
    field(INPA,"$(P)$(R)WidthTweakA NPP NMS")
    field(INPB,"$(P)$(R)UserWidthA NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserWidthA PP NMS")
}
record(calcout,"$(P)$(R)WidthTweakUpA") {
    field(DESC, "New width after Up Tweak")
    field(INPA,"$(P)$(R)WidthTweakA NPP NMS")
    field(INPB,"$(P)$(R)UserWidthA NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserWidthA PP NMS")
}

record(ao, "$(P)$(R)DelayA") {
    field(DESC, "Time f. start T0 to 1.edge")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPDelay(1) $(BUS)")
    field(PREC, "8")
    field(DRVL, "-999.99999999975")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserDelayA") {
    field(DESC, "User-Delay of the pulse")
    field(OUT, "$(P)$(R)Delay2BaseUnitA PP NMS")
    field(PREC, "8")
    field(DRVL, "-999999.99999975")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Delay2BaseUnitA") {
    field(DESC, "Convert Delay to base unit")
    field(INPA,"$(P)$(R)UserDelayA NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)DelayA PP NMS")
}
record(calcout,"$(P)$(R)Delay2UserUnitA") {
    field(DESC, "Convert Delay to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)DelayA NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserDelayA NPP NMS")
}
record(ao,"$(P)$(R)DelayTweakA") {
    field(DESC, "Step of Up/Down Delay Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)DelayTweakDownA") {
    field(DESC, "New delay after Down Tweak")
    field(INPA,"$(P)$(R)DelayTweakA NPP NMS")
    field(INPB,"$(P)$(R)UserDelayA NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserDelayA PP NMS")
}
record(calcout,"$(P)$(R)DelayTweakUpA") {
    field(DESC, "New delay after Up Tweak")
    field(INPA,"$(P)$(R)DelayTweakA NPP NMS")
    field(INPB,"$(P)$(R)UserDelayA NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserDelayA PP NMS")
}

record(mbbo, "$(P)$(R)SyncA") {
    field(DESC, "Selects the Sync source")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPSync(1) $(BUS)")
    field(ZRST, "T0")
    field(ZRVL, "0")
    field(ONST, "Error")
    field(ONVL, "1")
    field(TWST, "B")
    field(TWVL, "2")
    field(THST, "C")
    field(THVL, "3")
    field(FRST, "D")
    field(FRVL, "4")
    field(FVST, "E")
    field(FVVL, "5")
    field(SXST, "F")
    field(SXVL, "6")
    field(SVST, "G")
    field(SVVL, "7")
    field(EIST, "H")
    field(EIVL, "8")
}

record(ao, "$(P)$(R)MultiplexerA") {
    field(DESC, "Select which timers are on")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPMux(1) $(BUS)")
    field(DRVL, "0")
    field(DRVH, "255")
}

record(mbbo, "$(P)$(R)PolarityA") {
    field(DESC, "Set polarity of the pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPolarity(1) $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Complement")
    field(ONVL, "1")
    field(TWST, "Inverted")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)OutputModeA") {
    field(DESC, "Select Amplitude mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputMode(1) $(BUS)")
    field(ZRST, "TTL")
    field(ZRVL, "0")
    field(ONST, "Adjustable")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)OutputAmplitudeA") {
    field(DESC, "Set adjustable output level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputAmplitude(1) $(BUS)")
    field(PREC, "3")
    field(DRVL, "2")
    field(DRVH, "20")
    field(EGU,  "V")
}

record(mbbo, "$(P)$(R)GateModeA") {
    field(DESC, "Sets Channel Gate Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGate(1) $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Pulse inhibit")
    field(ONVL, "1")
    field(TWST, "Output inhibit")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)GateLogicA") {
    field(DESC, "Set Chan. Gate Logic Level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGateLogic(1) $(BUS)")
    field(ZRST, "Active low")
    field(ZRVL, "0")
    field(ONST, "Active high")
    field(ONVL, "1")
}


record(mbbo, "$(P)$(R)ChannelModeA") {
    field(DESC, "Set Chan. pulse series Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPCMode(1) $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Single")
    field(ONVL, "1")
    field(TWST, "Burst")
    field(TWVL, "2")
#    field(THST, "D-Cycle")
#    field(THVL, "3")
}

record(ao, "$(P)$(R)BurstCounterA") {
    field(DESC, "Set no. of pulses in Burst")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPBCounter(1) $(BUS)")
#    field(PREC, "8")
    field(DRVL, "1")
    field(DRVH, "9999999")
}


#============================== Channel B ==============================

record(bo, "$(P)$(R)StateB") {
    field(DESC, "En-/Disable output pulse B")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPState(2) $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
}

record(ao, "$(P)$(R)WidthB") {
    field(DESC, "Width of the output pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPWidth(2) $(BUS)")
    field(PREC, "8")
    field(DRVL, "10e-9")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserWidthB") {
    field(DESC, "User-Width of the pulse")
    field(OUT, "$(P)$(R)Width2BaseUnitB PP NMS")
    field(PREC, "8")
    field(DRVL, "10e-6")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Width2BaseUnitB") {
    field(DESC, "Convert Width to base unit")
    field(INPA,"$(P)$(R)UserWidthB NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)WidthB PP NMS")
}
record(calcout,"$(P)$(R)Width2UserUnitB") {
    field(DESC, "Convert Width to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)WidthB NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserWidthB NPP NMS")
}
record(ao,"$(P)$(R)WidthTweakB") {
    field(DESC, "Step of Up/Down Width Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)WidthTweakDownB") {
    field(DESC, "New width after Down Tweak")
    field(INPA,"$(P)$(R)WidthTweakB NPP NMS")
    field(INPB,"$(P)$(R)UserWidthB NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserWidthB PP NMS")
}
record(calcout,"$(P)$(R)WidthTweakUpB") {
    field(DESC, "New width after Up Tweak")
    field(INPA,"$(P)$(R)WidthTweakB NPP NMS")
    field(INPB,"$(P)$(R)UserWidthB NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserWidthB PP NMS")
}

record(ao, "$(P)$(R)DelayB") {
    field(DESC, "Time f. start T0 to 1.edge")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPDelay(2) $(BUS)")
    field(PREC, "8")
    field(DRVL, "-999.99999999975")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserDelayB") {
    field(DESC, "User-Delay of the pulse")
    field(OUT, "$(P)$(R)Delay2BaseUnitB PP NMS")
    field(PREC, "8")
    field(DRVL, "-999999.99999975")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Delay2BaseUnitB") {
    field(DESC, "Convert Delay to base unit")
    field(INPA,"$(P)$(R)UserDelayB NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)DelayB PP NMS")
}
record(calcout,"$(P)$(R)Delay2UserUnitB") {
    field(DESC, "Convert Delay to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)DelayB NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserDelayB NPP NMS")
}
record(ao,"$(P)$(R)DelayTweakB") {
    field(DESC, "Step of Up/Down Delay Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)DelayTweakDownB") {
    field(DESC, "New delay after Down Tweak")
    field(INPA,"$(P)$(R)DelayTweakB NPP NMS")
    field(INPB,"$(P)$(R)UserDelayB NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserDelayB PP NMS")
}
record(calcout,"$(P)$(R)DelayTweakUpB") {
    field(DESC, "New delay after Up Tweak")
    field(INPA,"$(P)$(R)DelayTweakB NPP NMS")
    field(INPB,"$(P)$(R)UserDelayB NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserDelayB PP NMS")
}

record(mbbo, "$(P)$(R)SyncB") {
    field(DESC, "Selects the Sync source")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPSync(2) $(BUS)")
    field(ZRST, "T0")
    field(ZRVL, "0")
    field(ONST, "A")
    field(ONVL, "1")
    field(TWST, "Error")
    field(TWVL, "2")
    field(THST, "C")
    field(THVL, "3")
    field(FRST, "D")
    field(FRVL, "4")
    field(FVST, "E")
    field(FVVL, "5")
    field(SXST, "F")
    field(SXVL, "6")
    field(SVST, "G")
    field(SVVL, "7")
    field(EIST, "H")
    field(EIVL, "8")
}

record(ao, "$(P)$(R)MultiplexerB") {
    field(DESC, "Select which timers are on")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPMux(2) $(BUS)")
    field(DRVL, "0")
    field(DRVH, "255")
}

record(mbbo, "$(P)$(R)PolarityB") {
    field(DESC, "Set polarity of the pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPolarity(2) $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Complement")
    field(ONVL, "1")
    field(TWST, "Inverted")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)OutputModeB") {
    field(DESC, "Select Amplitude mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputMode(2) $(BUS)")
    field(ZRST, "TTL")
    field(ZRVL, "0")
    field(ONST, "Adjustable")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)OutputAmplitudeB") {
    field(DESC, "Set adjustable output level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputAmplitude(2) $(BUS)")
    field(PREC, "3")
    field(DRVL, "2")
    field(DRVH, "20")
    field(EGU,  "V")
}

record(mbbo, "$(P)$(R)GateModeB") {
    field(DESC, "Sets Channel Gate Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGate(2) $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Pulse inhibit")
    field(ONVL, "1")
    field(TWST, "Output inhibit")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)GateLogicB") {
    field(DESC, "Set Chan. Gate Logic Level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGateLogic(2) $(BUS)")
    field(ZRST, "Active low")
    field(ZRVL, "0")
    field(ONST, "Active high")
    field(ONVL, "1")
}

#============================== Channel C ==============================

record(bo, "$(P)$(R)StateC") {
    field(DESC, "En-/Disable output pulse C")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPState(3) $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
}

record(ao, "$(P)$(R)WidthC") {
    field(DESC, "Width of the output pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPWidth(3) $(BUS)")
    field(PREC, "8")
    field(DRVL, "10e-9")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserWidthC") {
    field(DESC, "User-Width of the pulse")
    field(OUT, "$(P)$(R)Width2BaseUnitC PP NMS")
    field(PREC, "8")
    field(DRVL, "10e-6")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Width2BaseUnitC") {
    field(DESC, "Convert Width to base unit")
    field(INPA,"$(P)$(R)UserWidthC NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)WidthC PP NMS")
}
record(calcout,"$(P)$(R)Width2UserUnitC") {
    field(DESC, "Convert Width to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)WidthC NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserWidthC NPP NMS")
}
record(ao,"$(P)$(R)WidthTweakC") {
    field(DESC, "Step of Up/Down Width Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)WidthTweakDownC") {
    field(DESC, "New width after Down Tweak")
    field(INPA,"$(P)$(R)WidthTweakC NPP NMS")
    field(INPB,"$(P)$(R)UserWidthC NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserWidthC PP NMS")
}
record(calcout,"$(P)$(R)WidthTweakUpC") {
    field(DESC, "New width after Up Tweak")
    field(INPA,"$(P)$(R)WidthTweakC NPP NMS")
    field(INPB,"$(P)$(R)UserWidthC NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserWidthC PP NMS")
}

record(ao, "$(P)$(R)DelayC") {
    field(DESC, "Time f. start T0 to 1.edge")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPDelay(3) $(BUS)")
    field(PREC, "8")
    field(DRVL, "-999.99999999975")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserDelayC") {
    field(DESC, "User-Delay of the pulse")
    field(OUT, "$(P)$(R)Delay2BaseUnitC PP NMS")
    field(PREC, "8")
    field(DRVL, "-999999.99999975")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Delay2BaseUnitC") {
    field(DESC, "Convert Delay to base unit")
    field(INPA,"$(P)$(R)UserDelayC NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)DelayC PP NMS")
}
record(calcout,"$(P)$(R)Delay2UserUnitC") {
    field(DESC, "Convert Delay to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)DelayC NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserDelayC NPP NMS")
}
record(ao,"$(P)$(R)DelayTweakC") {
    field(DESC, "Step of Up/Down Delay Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)DelayTweakDownC") {
    field(DESC, "New delay after Down Tweak")
    field(INPA,"$(P)$(R)DelayTweakC NPP NMS")
    field(INPB,"$(P)$(R)UserDelayC NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserDelayC PP NMS")
}
record(calcout,"$(P)$(R)DelayTweakUpC") {
    field(DESC, "New delay after Up Tweak")
    field(INPA,"$(P)$(R)DelayTweakC NPP NMS")
    field(INPB,"$(P)$(R)UserDelayC NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserDelayC PP NMS")
}

record(mbbo, "$(P)$(R)SyncC") {
    field(DESC, "Selects the Sync source")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPSync(3) $(BUS)")
    field(ZRST, "T0")
    field(ZRVL, "0")
    field(ONST, "A")
    field(ONVL, "1")
    field(TWST, "B")
    field(TWVL, "2")
    field(THST, "Error")
    field(THVL, "3")
    field(FRST, "D")
    field(FRVL, "4")
    field(FVST, "E")
    field(FVVL, "5")
    field(SXST, "F")
    field(SXVL, "6")
    field(SVST, "G")
    field(SVVL, "7")
    field(EIST, "H")
    field(EIVL, "8")
}

record(ao, "$(P)$(R)MultiplexerC") {
    field(DESC, "Select which timers are on")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPMux(3) $(BUS)")
    field(DRVL, "0")
    field(DRVH, "255")
}

record(mbbo, "$(P)$(R)PolarityC") {
    field(DESC, "Set polarity of the pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPolarity(3) $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Complement")
    field(ONVL, "1")
    field(TWST, "Inverted")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)OutputModeC") {
    field(DESC, "Select Amplitude mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputMode(3) $(BUS)")
    field(ZRST, "TTL")
    field(ZRVL, "0")
    field(ONST, "Adjustable")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)OutputAmplitudeC") {
    field(DESC, "Set adjustable output level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputAmplitude(3) $(BUS)")
    field(PREC, "3")
    field(DRVL, "2")
    field(DRVH, "20")
    field(EGU,  "V")
}

record(mbbo, "$(P)$(R)GateModeC") {
    field(DESC, "Sets Channel Gate Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGate(3) $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Pulse inhibit")
    field(ONVL, "1")
    field(TWST, "Output inhibit")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)GateLogicC") {
    field(DESC, "Set Chan. Gate Logic Level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGateLogic(3) $(BUS)")
    field(ZRST, "Active low")
    field(ZRVL, "0")
    field(ONST, "Active high")
    field(ONVL, "1")
}

#============================== Channel D ==============================

record(bo, "$(P)$(R)StateD") {
    field(DESC, "En-/Disable output pulse D")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPState(4) $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
}

record(ao, "$(P)$(R)WidthD") {
    field(DESC, "Width of the output pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPWidth(4) $(BUS)")
    field(PREC, "8")
    field(DRVL, "10e-9")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserWidthD") {
    field(DESC, "User-Width of the pulse")
    field(OUT, "$(P)$(R)Width2BaseUnitD PP NMS")
    field(PREC, "8")
    field(DRVL, "10e-6")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Width2BaseUnitD") {
    field(DESC, "Convert Width to base unit")
    field(INPA,"$(P)$(R)UserWidthD NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)WidthD PP NMS")
}
record(calcout,"$(P)$(R)Width2UserUnitD") {
    field(DESC, "Convert Width to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)WidthD NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserWidthD NPP NMS")
}
record(ao,"$(P)$(R)WidthTweakD") {
    field(DESC, "Step of Up/Down Width Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)WidthTweakDownD") {
    field(DESC, "New width after Down Tweak")
    field(INPA,"$(P)$(R)WidthTweakD NPP NMS")
    field(INPB,"$(P)$(R)UserWidthD NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserWidthD PP NMS")
}
record(calcout,"$(P)$(R)WidthTweakUpD") {
    field(DESC, "New width after Up Tweak")
    field(INPA,"$(P)$(R)WidthTweakD NPP NMS")
    field(INPB,"$(P)$(R)UserWidthD NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserWidthD PP NMS")
}

record(ao, "$(P)$(R)DelayD") {
    field(DESC, "Time f. start T0 to 1.edge")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPDelay(4) $(BUS)")
    field(PREC, "8")
    field(DRVL, "-999.99999999975")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserDelayD") {
    field(DESC, "User-Delay of the pulse")
    field(OUT, "$(P)$(R)Delay2BaseUnitD PP NMS")
    field(PREC, "8")
    field(DRVL, "-999999.99999975")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Delay2BaseUnitD") {
    field(DESC, "Convert Delay to base unit")
    field(INPA,"$(P)$(R)UserDelayD NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)DelayD PP NMS")
}
record(calcout,"$(P)$(R)Delay2UserUnitD") {
    field(DESC, "Convert Delay to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)DelayD NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserDelayD NPP NMS")
}
record(ao,"$(P)$(R)DelayTweakD") {
    field(DESC, "Step of Up/Down Delay Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)DelayTweakDownD") {
    field(DESC, "New delay after Down Tweak")
    field(INPA,"$(P)$(R)DelayTweakD NPP NMS")
    field(INPB,"$(P)$(R)UserDelayD NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserDelayD PP NMS")
}
record(calcout,"$(P)$(R)DelayTweakUpD") {
    field(DESC, "New delay after Up Tweak")
    field(INPA,"$(P)$(R)DelayTweakD NPP NMS")
    field(INPB,"$(P)$(R)UserDelayD NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserDelayD PP NMS")
}

record(mbbo, "$(P)$(R)SyncD") {
    field(DESC, "Selects the Sync source")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPSync(4) $(BUS)")
    field(ZRST, "T0")
    field(ZRVL, "0")
    field(ONST, "A")
    field(ONVL, "1")
    field(TWST, "B")
    field(TWVL, "2")
    field(THST, "C")
    field(THVL, "3")
    field(FRST, "Error")
    field(FRVL, "4")
    field(FVST, "E")
    field(FVVL, "5")
    field(SXST, "F")
    field(SXVL, "6")
    field(SVST, "G")
    field(SVVL, "7")
    field(EIST, "H")
    field(EIVL, "8")
}

record(ao, "$(P)$(R)MultiplexerD") {
    field(DESC, "Select which timers are on")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPMux(4) $(BUS)")
    field(DRVL, "0")
    field(DRVH, "255")
}

record(mbbo, "$(P)$(R)PolarityD") {
    field(DESC, "Set polarity of the pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPolarity(4) $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Complement")
    field(ONVL, "1")
    field(TWST, "Inverted")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)OutputModeD") {
    field(DESC, "Select Amplitude mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputMode(4) $(BUS)")
    field(ZRST, "TTL")
    field(ZRVL, "0")
    field(ONST, "Adjustable")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)OutputAmplitudeD") {
    field(DESC, "Set adjustable output level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputAmplitude(4) $(BUS)")
    field(PREC, "3")
    field(DRVL, "2")
    field(DRVH, "20")
    field(EGU,  "V")
}

record(mbbo, "$(P)$(R)GateModeD") {
    field(DESC, "Sets Channel Gate Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGate(4) $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Pulse inhibit")
    field(ONVL, "1")
    field(TWST, "Output inhibit")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)GateLogicD") {
    field(DESC, "Set Chan. Gate Logic Level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGateLogic(4) $(BUS)")
    field(ZRST, "Active low")
    field(ZRVL, "0")
    field(ONST, "Active high")
    field(ONVL, "1")
}

#============================== Channel E ==============================

record(bo, "$(P)$(R)StateE") {
    field(DESC, "En-/Disable output pulse E")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPState(5) $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
}

record(ao, "$(P)$(R)WidthE") {
    field(DESC, "Width of the output pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPWidth(5) $(BUS)")
    field(PREC, "8")
    field(DRVL, "10e-9")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserWidthE") {
    field(DESC, "User-Width of the pulse")
    field(OUT, "$(P)$(R)Width2BaseUnitE PP NMS")
    field(PREC, "8")
    field(DRVL, "10e-6")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Width2BaseUnitE") {
    field(DESC, "Convert Width to base unit")
    field(INPA,"$(P)$(R)UserWidthE NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)WidthE PP NMS")
}
record(calcout,"$(P)$(R)Width2UserUnitE") {
    field(DESC, "Convert Width to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)WidthE NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserWidthE NPP NMS")
}
record(ao,"$(P)$(R)WidthTweakE") {
    field(DESC, "Step of Up/Down Width Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)WidthTweakDownE") {
    field(DESC, "New width after Down Tweak")
    field(INPA,"$(P)$(R)WidthTweakE NPP NMS")
    field(INPB,"$(P)$(R)UserWidthE NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserWidthE PP NMS")
}
record(calcout,"$(P)$(R)WidthTweakUpE") {
    field(DESC, "New width after Up Tweak")
    field(INPA,"$(P)$(R)WidthTweakE NPP NMS")
    field(INPB,"$(P)$(R)UserWidthE NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserWidthE PP NMS")
}

record(ao, "$(P)$(R)DelayE") {
    field(DESC, "Time f. start T0 to 1.edge")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPDelay(5) $(BUS)")
    field(PREC, "8")
    field(DRVL, "-999.99999999975")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserDelayE") {
    field(DESC, "User-Delay of the pulse")
    field(OUT, "$(P)$(R)Delay2BaseUnitE PP NMS")
    field(PREC, "8")
    field(DRVL, "-999999.99999975")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Delay2BaseUnitE") {
    field(DESC, "Convert Delay to base unit")
    field(INPA,"$(P)$(R)UserDelayE NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)DelayE PP NMS")
}
record(calcout,"$(P)$(R)Delay2UserUnitE") {
    field(DESC, "Convert Delay to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)DelayE NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserDelayE NPP NMS")
}
record(ao,"$(P)$(R)DelayTweakE") {
    field(DESC, "Step of Up/Down Delay Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)DelayTweakDownE") {
    field(DESC, "New delay after Down Tweak")
    field(INPA,"$(P)$(R)DelayTweakE NPP NMS")
    field(INPB,"$(P)$(R)UserDelayE NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserDelayE PP NMS")
}
record(calcout,"$(P)$(R)DelayTweakUpE") {
    field(DESC, "New delay after Up Tweak")
    field(INPA,"$(P)$(R)DelayTweakE NPP NMS")
    field(INPB,"$(P)$(R)UserDelayE NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserDelayE PP NMS")
}

record(mbbo, "$(P)$(R)SyncE") {
    field(DESC, "Selects the Sync source")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPSync(5) $(BUS)")
    field(ZRST, "T0")
    field(ZRVL, "0")
    field(ONST, "A")
    field(ONVL, "1")
    field(TWST, "B")
    field(TWVL, "2")
    field(THST, "C")
    field(THVL, "3")
    field(FRST, "D")
    field(FRVL, "4")
    field(FVST, "Error")
    field(FVVL, "5")
    field(SXST, "F")
    field(SXVL, "6")
    field(SVST, "G")
    field(SVVL, "7")
    field(EIST, "H")
    field(EIVL, "8")
}

record(ao, "$(P)$(R)MultiplexerE") {
    field(DESC, "Select which timers are on")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPMux(5) $(BUS)")
    field(DRVL, "0")
    field(DRVH, "255")
}

record(mbbo, "$(P)$(R)PolarityE") {
    field(DESC, "Set polarity of the pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPolarity(5) $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Complement")
    field(ONVL, "1")
    field(TWST, "Inverted")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)OutputModeE") {
    field(DESC, "Select Amplitude mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputMode(5) $(BUS)")
    field(ZRST, "TTL")
    field(ZRVL, "0")
    field(ONST, "Adjustable")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)OutputAmplitudeE") {
    field(DESC, "Set adjustable output level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputAmplitude(5) $(BUS)")
    field(PREC, "3")
    field(DRVL, "2")
    field(DRVH, "20")
    field(EGU,  "V")
}

record(mbbo, "$(P)$(R)GateModeE") {
    field(DESC, "Sets Channel Gate Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGate(5) $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Pulse inhibit")
    field(ONVL, "1")
    field(TWST, "Output inhibit")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)GateLogicE") {
    field(DESC, "Set Chan. Gate Logic Level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGateLogic(5) $(BUS)")
    field(ZRST, "Active low")
    field(ZRVL, "0")
    field(ONST, "Active high")
    field(ONVL, "1")
}

#============================== Channel F ==============================

record(bo, "$(P)$(R)StateF") {
    field(DESC, "En-/Disable output pulse F")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPState(6) $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
}

record(ao, "$(P)$(R)WidthF") {
    field(DESC, "Width of the output pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPWidth(6) $(BUS)")
    field(PREC, "8")
    field(DRVL, "10e-9")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserWidthF") {
    field(DESC, "User-Width of the pulse")
    field(OUT, "$(P)$(R)Width2BaseUnitF PP NMS")
    field(PREC, "8")
    field(DRVL, "10e-6")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Width2BaseUnitF") {
    field(DESC, "Convert Width to base unit")
    field(INPA,"$(P)$(R)UserWidthF NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)WidthF PP NMS")
}
record(calcout,"$(P)$(R)Width2UserUnitF") {
    field(DESC, "Convert Width to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)WidthF NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserWidthF NPP NMS")
}
record(ao,"$(P)$(R)WidthTweakF") {
    field(DESC, "Step of Up/Down Width Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)WidthTweakDownF") {
    field(DESC, "New width after Down Tweak")
    field(INPA,"$(P)$(R)WidthTweakF NPP NMS")
    field(INPB,"$(P)$(R)UserWidthF NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserWidthF PP NMS")
}
record(calcout,"$(P)$(R)WidthTweakUpF") {
    field(DESC, "New width after Up Tweak")
    field(INPA,"$(P)$(R)WidthTweakF NPP NMS")
    field(INPB,"$(P)$(R)UserWidthF NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserWidthF PP NMS")
}

record(ao, "$(P)$(R)DelayF") {
    field(DESC, "Time f. start T0 to 1.edge")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPDelay(6) $(BUS)")
    field(PREC, "8")
    field(DRVL, "-999.99999999975")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserDelayF") {
    field(DESC, "User-Delay of the pulse")
    field(OUT, "$(P)$(R)Delay2BaseUnitF PP NMS")
    field(PREC, "8")
    field(DRVL, "-999999.99999975")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Delay2BaseUnitF") {
    field(DESC, "Convert Delay to base unit")
    field(INPA,"$(P)$(R)UserDelayF NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)DelayF PP NMS")
}
record(calcout,"$(P)$(R)Delay2UserUnitF") {
    field(DESC, "Convert Delay to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)DelayF NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserDelayF NPP NMS")
}
record(ao,"$(P)$(R)DelayTweakF") {
    field(DESC, "Step of Up/Down Delay Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)DelayTweakDownF") {
    field(DESC, "New delay after Down Tweak")
    field(INPA,"$(P)$(R)DelayTweakF NPP NMS")
    field(INPB,"$(P)$(R)UserDelayF NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserDelayF PP NMS")
}
record(calcout,"$(P)$(R)DelayTweakUpF") {
    field(DESC, "New delay after Up Tweak")
    field(INPA,"$(P)$(R)DelayTweakF NPP NMS")
    field(INPB,"$(P)$(R)UserDelayF NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserDelayF PP NMS")
}

record(mbbo, "$(P)$(R)SyncF") {
    field(DESC, "Selects the Sync source")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPSync(6) $(BUS)")
    field(ZRST, "T0")
    field(ZRVL, "0")
    field(ONST, "A")
    field(ONVL, "1")
    field(TWST, "B")
    field(TWVL, "2")
    field(THST, "C")
    field(THVL, "3")
    field(FRST, "D")
    field(FRVL, "4")
    field(FVST, "E")
    field(FVVL, "5")
    field(SXST, "Error")
    field(SXVL, "6")
    field(SVST, "G")
    field(SVVL, "7")
    field(EIST, "H")
    field(EIVL, "8")
}

record(ao, "$(P)$(R)MultiplexerF") {
    field(DESC, "Select which timers are on")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPMux(6) $(BUS)")
    field(DRVL, "0")
    field(DRVH, "255")
}

record(mbbo, "$(P)$(R)PolarityF") {
    field(DESC, "Set polarity of the pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPolarity(6) $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Complement")
    field(ONVL, "1")
    field(TWST, "Inverted")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)OutputModeF") {
    field(DESC, "Select Amplitude mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputMode(6) $(BUS)")
    field(ZRST, "TTL")
    field(ZRVL, "0")
    field(ONST, "Adjustable")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)OutputAmplitudeF") {
    field(DESC, "Set adjustable output level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputAmplitude(6) $(BUS)")
    field(PREC, "3")
    field(DRVL, "2")
    field(DRVH, "20")
    field(EGU,  "V")
}

record(mbbo, "$(P)$(R)GateModeF") {
    field(DESC, "Sets Channel Gate Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGate(6) $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Pulse inhibit")
    field(ONVL, "1")
    field(TWST, "Output inhibit")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)GateLogicF") {
    field(DESC, "Set Chan. Gate Logic Level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGateLogic(6) $(BUS)")
    field(ZRST, "Active low")
    field(ZRVL, "0")
    field(ONST, "Active high")
    field(ONVL, "1")
}

#============================== Channel G ==============================

record(bo, "$(P)$(R)StateG") {
    field(DESC, "En-/Disable output pulse G")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPState(7) $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
}

record(ao, "$(P)$(R)WidthG") {
    field(DESC, "Width of the output pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPWidth(7) $(BUS)")
    field(PREC, "8")
    field(DRVL, "10e-9")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserWidthG") {
    field(DESC, "User-Width of the pulse")
    field(OUT, "$(P)$(R)Width2BaseUnitG PP NMS")
    field(PREC, "8")
    field(DRVL, "10e-6")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Width2BaseUnitG") {
    field(DESC, "Convert Width to base unit")
    field(INPA,"$(P)$(R)UserWidthG NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)WidthG PP NMS")
}
record(calcout,"$(P)$(R)Width2UserUnitG") {
    field(DESC, "Convert Width to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)WidthG NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserWidthG NPP NMS")
}
record(ao,"$(P)$(R)WidthTweakG") {
    field(DESC, "Step of Up/Down Width Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)WidthTweakDownG") {
    field(DESC, "New width after Down Tweak")
    field(INPA,"$(P)$(R)WidthTweakG NPP NMS")
    field(INPB,"$(P)$(R)UserWidthG NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserWidthG PP NMS")
}
record(calcout,"$(P)$(R)WidthTweakUpG") {
    field(DESC, "New width after Up Tweak")
    field(INPA,"$(P)$(R)WidthTweakG NPP NMS")
    field(INPB,"$(P)$(R)UserWidthG NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserWidthG PP NMS")
}

record(ao, "$(P)$(R)DelayG") {
    field(DESC, "Time f. start T0 to 1.edge")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPDelay(7) $(BUS)")
    field(PREC, "8")
    field(DRVL, "-999.99999999975")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserDelayG") {
    field(DESC, "User-Delay of the pulse")
    field(OUT, "$(P)$(R)Delay2BaseUnitG PP NMS")
    field(PREC, "8")
    field(DRVL, "-999999.99999975")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Delay2BaseUnitG") {
    field(DESC, "Convert Delay to base unit")
    field(INPA,"$(P)$(R)UserDelayG NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)DelayG PP NMS")
}
record(calcout,"$(P)$(R)Delay2UserUnitG") {
    field(DESC, "Convert Delay to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)DelayG NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserDelayG NPP NMS")
}
record(ao,"$(P)$(R)DelayTweakG") {
    field(DESC, "Step of Up/Down Delay Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)DelayTweakDownG") {
    field(DESC, "New delay after Down Tweak")
    field(INPA,"$(P)$(R)DelayTweakG NPP NMS")
    field(INPB,"$(P)$(R)UserDelayG NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserDelayG PP NMS")
}
record(calcout,"$(P)$(R)DelayTweakUpG") {
    field(DESC, "New delay after Up Tweak")
    field(INPA,"$(P)$(R)DelayTweakG NPP NMS")
    field(INPB,"$(P)$(R)UserDelayG NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserDelayG PP NMS")
}

record(mbbo, "$(P)$(R)SyncG") {
    field(DESC, "Selects the Sync source")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPSync(7) $(BUS)")
    field(ZRST, "T0")
    field(ZRVL, "0")
    field(ONST, "A")
    field(ONVL, "1")
    field(TWST, "B")
    field(TWVL, "2")
    field(THST, "C")
    field(THVL, "3")
    field(FRST, "D")
    field(FRVL, "4")
    field(FVST, "E")
    field(FVVL, "5")
    field(SXST, "F")
    field(SXVL, "6")
    field(SVST, "Error")
    field(SVVL, "7")
    field(EIST, "H")
    field(EIVL, "8")
}

record(ao, "$(P)$(R)MultiplexerG") {
    field(DESC, "Select which timers are on")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPMux(7) $(BUS)")
    field(DRVL, "0")
    field(DRVH, "255")
}

record(mbbo, "$(P)$(R)PolarityG") {
    field(DESC, "Set polarity of the pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPolarity(7) $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Complement")
    field(ONVL, "1")
    field(TWST, "Inverted")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)OutputModeG") {
    field(DESC, "Select Amplitude mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputMode(7) $(BUS)")
    field(ZRST, "TTL")
    field(ZRVL, "0")
    field(ONST, "Adjustable")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)OutputAmplitudeG") {
    field(DESC, "Set adjustable output level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputAmplitude(7) $(BUS)")
    field(PREC, "3")
    field(DRVL, "2")
    field(DRVH, "20")
    field(EGU,  "V")
}

record(mbbo, "$(P)$(R)GateModeG") {
    field(DESC, "Sets Channel Gate Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGate(7) $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Pulse inhibit")
    field(ONVL, "1")
    field(TWST, "Output inhibit")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)GateLogicG") {
    field(DESC, "Set Chan. Gate Logic Level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGateLogic(7) $(BUS)")
    field(ZRST, "Active low")
    field(ZRVL, "0")
    field(ONST, "Active high")
    field(ONVL, "1")
}

#============================== Channel H ==============================

record(bo, "$(P)$(R)StateH") {
    field(DESC, "En-/Disable output pulse H")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPState(8) $(BUS)")
    field(ZNAM, "Off")
    field(ONAM, "On")
}

record(ao, "$(P)$(R)WidthH") {
    field(DESC, "Width of the output pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPWidth(8) $(BUS)")
    field(PREC, "8")
    field(DRVL, "10e-9")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserWidthH") {
    field(DESC, "User-Width of the pulse")
    field(OUT, "$(P)$(R)Width2BaseUnitH PP NMS")
    field(PREC, "8")
    field(DRVL, "10e-6")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Width2BaseUnitH") {
    field(DESC, "Convert Width to base unit")
    field(INPA,"$(P)$(R)UserWidthH NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)WidthH PP NMS")
}
record(calcout,"$(P)$(R)Width2UserUnitH") {
    field(DESC, "Convert Width to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)WidthH NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserWidthH NPP NMS")
}
record(ao,"$(P)$(R)WidthTweakH") {
    field(DESC, "Step of Up/Down Width Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)WidthTweakDownH") {
    field(DESC, "New width after Down Tweak")
    field(INPA,"$(P)$(R)WidthTweakH NPP NMS")
    field(INPB,"$(P)$(R)UserWidthH NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserWidthH PP NMS")
}
record(calcout,"$(P)$(R)WidthTweakUpH") {
    field(DESC, "New width after Up Tweak")
    field(INPA,"$(P)$(R)WidthTweakH NPP NMS")
    field(INPB,"$(P)$(R)UserWidthH NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserWidthH PP NMS")
}

record(ao, "$(P)$(R)DelayH") {
    field(DESC, "Time f. start T0 to 1.edge")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPDelay(8) $(BUS)")
    field(PREC, "8")
    field(DRVL, "-999.99999999975")
    field(DRVH, "999.99999999975")
    field(EGU,  "sec")
}

record(ao, "$(P)$(R)UserDelayH") {
    field(DESC, "User-Delay of the pulse")
    field(OUT, "$(P)$(R)Delay2BaseUnitH PP NMS")
    field(PREC, "8")
    field(DRVL, "-999999.99999975")
    field(DRVH, "999999.99999975")
    field(EGU,  "ms")
}
record(calcout,"$(P)$(R)Delay2BaseUnitH") {
    field(DESC, "Convert Delay to base unit")
    field(INPA,"$(P)$(R)UserDelayH NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A/B")
    field(OUT, "$(P)$(R)DelayH PP NMS")
}
record(calcout,"$(P)$(R)Delay2UserUnitH") {
    field(DESC, "Convert Delay to user unit")
    field(PINI, "YES")
    field(INPA,"$(P)$(R)DelayH NPP NMS")
    field(INPB,"$(P)$(R)TimeUnitCF NPP NMS")
    field(CALC,"A*B")
    field(OUT, "$(P)$(R)UserDelayH NPP NMS")
}
record(ao,"$(P)$(R)DelayTweakH") {
    field(DESC, "Step of Up/Down Delay Tweak")
    field(VAL, "1e-1")
    field(PREC,"6")
}
record(calcout,"$(P)$(R)DelayTweakDownH") {
    field(DESC, "New delay after Down Tweak")
    field(INPA,"$(P)$(R)DelayTweakH NPP NMS")
    field(INPB,"$(P)$(R)UserDelayH NPP NMS")
    field(CALC,"B-A")
    field(OUT, "$(P)$(R)UserDelayH PP NMS")
}
record(calcout,"$(P)$(R)DelayTweakUpH") {
    field(DESC, "New delay after Up Tweak")
    field(INPA,"$(P)$(R)DelayTweakH NPP NMS")
    field(INPB,"$(P)$(R)UserDelayH NPP NMS")
    field(CALC,"B+A")
    field(OUT, "$(P)$(R)UserDelayH PP NMS")
}

record(mbbo, "$(P)$(R)SyncH") {
    field(DESC, "Selects the Sync source")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPSync(8) $(BUS)")
    field(ZRST, "T0")
    field(ZRVL, "0")
    field(ONST, "A")
    field(ONVL, "1")
    field(TWST, "B")
    field(TWVL, "2")
    field(THST, "C")
    field(THVL, "3")
    field(FRST, "D")
    field(FRVL, "4")
    field(FVST, "E")
    field(FVVL, "5")
    field(SXST, "F")
    field(SXVL, "6")
    field(SVST, "G")
    field(SVVL, "7")
    field(EIST, "Error")
    field(EIVL, "8")
}

record(ao, "$(P)$(R)MultiplexerH") {
    field(DESC, "Select which timers are on")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPMux(8) $(BUS)")
    field(DRVL, "0")
    field(DRVH, "255")
}

record(mbbo, "$(P)$(R)PolarityH") {
    field(DESC, "Set polarity of the pulse")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPolarity(8) $(BUS)")
    field(ZRST, "Normal")
    field(ZRVL, "0")
    field(ONST, "Complement")
    field(ONVL, "1")
    field(TWST, "Inverted")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)OutputModeH") {
    field(DESC, "Select Amplitude mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputMode(8) $(BUS)")
    field(ZRST, "TTL")
    field(ZRVL, "0")
    field(ONST, "Adjustable")
    field(ONVL, "1")
}

record(ao, "$(P)$(R)OutputAmplitudeH") {
    field(DESC, "Set adjustable output level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setOutputAmplitude(8) $(BUS)")
    field(PREC, "3")
    field(DRVL, "2")
    field(DRVH, "20")
    field(EGU,  "V")
}

record(mbbo, "$(P)$(R)GateModeH") {
    field(DESC, "Sets Channel Gate Mode")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGate(8) $(BUS)")
    field(ZRST, "Disable")
    field(ZRVL, "0")
    field(ONST, "Pulse inhibit")
    field(ONVL, "1")
    field(TWST, "Output inhibit")
    field(TWVL, "2")
}

record(mbbo, "$(P)$(R)GateLogicH") {
    field(DESC, "Set Chan. Gate Logic Level")
    field(DTYP, "stream")
    field(OUT,  "@pg9520.proto setPGateLogic(8) $(BUS)")
    field(ZRST, "Active low")
    field(ZRVL, "0")
    field(ONST, "Active high")
    field(ONVL, "1")
}