pg9520/db/pg9520.db
changeset 1 0ba93e52269a
child 2 c68ad80babeb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pg9520/db/pg9520.db	Wed May 22 12:18:16 2013 +0200
@@ -0,0 +1,1797 @@
+# 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(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(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")
+}