First VM - softioc, adapt existing stuff
authorHeinz Junkes <junkes@fhi-berlin.mpg.de>
Mon, 10 Jun 2013 13:56:06 +0200
changeset 1 425def26d5f1
parent 0 50cbed80af1a
child 2 57c937174a2e
First VM - softioc, adapt existing stuff
Makefile
configure/CONFIG_SITE
db/IOCPG9520.db
db/fht.db
db/fht.proto
db/pg9520.proto
db/vega.db
db/vega.proto
--- a/Makefile	Wed Jun 05 14:34:28 2013 +0200
+++ b/Makefile	Mon Jun 10 13:56:06 2013 +0200
@@ -14,4 +14,11 @@
 
 include $(TOP)/configure/RULES_TOP
 
+all:
+	cp db/fht.db /srv/ioc/sys/db/
+	cp db/fht.proto /srv/ioc/sys/db/
+	cp db/IOCPG9520.db /srv/ioc/sys/db/
+	cp db/pg9520.proto /srv/ioc/sys/db/
+	cp db/vega.db /srv/ioc/sys/db/
+	cp db/vega.proto /srv/ioc/sys/db/
 
--- a/configure/CONFIG_SITE	Wed Jun 05 14:34:28 2013 +0200
+++ b/configure/CONFIG_SITE	Mon Jun 10 13:56:06 2013 +0200
@@ -24,7 +24,7 @@
 # To install files into a location other than $(TOP) define
 #   INSTALL_LOCATION here.
 #INSTALL_LOCATION=</path/name/to/install/top>
-INSTALL_LOCATION=/srv/ioc/sys/infrastructure
+INSTALL_LOCATION=/srv/ioc/sys
 
 # Set this when your IOC and the host use different paths
 #   to access the application. This will be needed to boot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/IOCPG9520.db	Mon Jun 10 13:56:06 2013 +0200
@@ -0,0 +1,1837 @@
+# 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")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/fht.db	Mon Jun 10 13:56:06 2013 +0200
@@ -0,0 +1,19 @@
+
+record(ai, "$(P)$(R)GetRadiation_1")
+{
+    field(DESC, "Get Radiation")
+    field(DTYP, "stream")
+    field(INP,  "@fht.proto getRadiation(138) $(BUS)")
+    field(EGU, "uSiv")
+    field(SCAN, "1 second")
+}
+
+
+record(ai, "$(P)$(R)GetRadiation_2")
+{
+    field(DESC, "Get Radiation")
+    field(DTYP, "stream")
+    field(INP,  "@fht.proto getRadiation(239) $(BUS)")
+    field(EGU, "uSiv")
+    field(SCAN, "1 second")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/fht.proto	Mon Jun 10 13:56:06 2013 +0200
@@ -0,0 +1,7 @@
+Terminator = ETX;
+
+getRadiation {
+    out "\a01RM\$1";
+    in "\a01RM%E%*i%*i%*x";
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/pg9520.proto	Mon Jun 10 13:56:06 2013 +0200
@@ -0,0 +1,266 @@
+# pg9520.proto   Uwe Hoppe   Fritz-Haber-Institut der MPG   1/2013
+
+ReplyTimeout = 2000;
+Terminator = CR LF;
+iWT = 35;
+
+getVersion {
+   out "*IDN?";
+   in "%s";
+   @init {out "*IDN?"; in "%s"; wait $iWT;}
+}
+
+recall {
+   out "*RCL %i";
+   in "ok";
+}
+
+save {
+   out "*SAV %i";
+   in "ok";
+}
+
+getState {
+   out ":PULSE0:STATE?";
+   in  "%d";
+   wait $iWT;
+}
+
+setState {
+   out ":PULSE0:STATE %d";
+   in  "ok";
+   @init {getState;}
+}
+
+getPeriod {
+   out ":PULSE0:PERIOD?";
+   in  "%f";
+}
+
+setPeriod {
+   out ":PULSE0:PERIOD %e";
+   in  "ok";
+   @init {getPeriod; wait $iWT;}
+}
+
+getMode {
+   out ":PULSE0:MODE?";
+   in  "%{NORM|SING|BURS|DCYC}";
+}
+
+setMode {
+   out ":PULSE0:MODE %{NORM|SING|BURS|DCYC}";
+   in  "ok";
+   @init {getMode; wait $iWT;}
+}
+
+getGateMode {
+   out ":PULSE0:GATE:MODE?";
+   in  "%{DIS|PULS|OUTP|CHAN}";
+}
+
+setGateMode {
+   out ":PULSE0:GATE:MODE %{DIS|PULS|OUTP|CHAN}";
+   in  "ok";
+   @init {getGateMode; wait $iWT;}
+}
+
+getGateLogic {
+   out ":PULSE0:GATE:LOGIC?";
+   in  "%{LOW|HIGH}";
+}
+
+setGateLogic {
+   out ":PULSE0:GATE:LOGIC %{LOW|HIGH}";
+   in  "ok";
+   @init {getGateLogic; wait $iWT;}
+}
+
+getGateEdge {
+   out ":PULSE0:GATE:EDGE?";
+   in  "%{RIS|FALL}";
+}
+
+setGateEdge {
+   out ":PULSE0:GATE:EDGE %{RIS|FALL}";
+   in  "ok";
+   @init {getGateEdge; wait $iWT;}
+}
+
+getGateLevel {
+   out ":PULSE0:GATE:LEVEL?";
+   in  "%f";
+}
+
+setGateLevel {
+   out ":PULSE0:GATE:LEVEL %f";
+   in  "ok";
+   @init {getGateLevel; wait $iWT;}
+}
+
+getTriggerMode {
+   out ":PULSE0:TRIGGER:MODE?";
+   in  "%{DIS|TRIG}";
+}
+
+setTriggerMode {
+   out ":PULSE0:TRIGGER:MODE %{DIS|TRIG}";
+   in  "ok";
+   @init {getTriggerMode; wait $iWT;}
+}
+
+getTriggerEdge {
+   out ":PULSE0:TRIGGER:EDGE?";
+   in  "%{RIS|FALL}";
+}
+
+setTriggerEdge {
+   out ":PULSE0:TRIGGER:EDGE %{RIS|FALL}";
+   in  "ok";
+   @init {getTriggerEdge; wait $iWT;}
+}
+
+getTriggerLevel {
+   out ":PULSE0:TRIGGER:LEVEL?";
+   in  "%f";
+}
+
+setTriggerLevel {
+   out ":PULSE0:TRIGGER:LEVEL %f";
+   in  "ok";
+   @init {getTriggerLevel; wait $iWT;}
+}
+
+#=================================================
+
+getPState {
+   out ":PULSE\$1:STATE?";
+   in  "%d";
+}
+
+setPState {
+   out ":PULSE\$1:STATE %d";
+   in  "ok";
+   @init {getPState; wait $iWT;}
+}
+
+getPWidth {
+   out ":PULSE\$1:WIDTH?";
+   in  "%f";
+}
+
+setPWidth {
+   out ":PULSE\$1:WIDTH %e";
+   in  "ok";
+   @init {getPWidth; wait $iWT;}
+}
+
+getPDelay {
+   out ":PULSE\$1:DELAY?";
+   in  "%f";
+}
+
+setPDelay {
+   out ":PULSE\$1:DELAY %e";
+   in  "ok";
+   @init {getPDelay; wait $iWT;}
+}
+
+getPSync {
+   out ":PULSE\$1:SYNC?";
+   in  "%{T0|CHA|CHB|CHC|CHD|CHE|CHF|CHG|CHH}";
+}
+
+setPSync {
+   out ":PULSE\$1:SYNC %{T0|CHA|CHB|CHC|CHD|CHE|CHF|CHG|CHH}";
+   in  "ok";
+   @init {getPSync; wait $iWT;}
+}
+
+getPMux {
+   out ":PULSE\$1:MUX?";
+   in  "%u";
+}
+
+setPMux {
+   out ":PULSE\$1:MUX %u";
+   in  "ok";
+   @init {getPMux; wait $iWT;}
+}
+
+getPolarity {
+   out ":PULSE\$1:POLARITY?";
+   in  "%{NORM|COMP|INV}";
+}
+
+setPolarity {
+   out ":PULSE\$1:POLARITY %{NORM|COMP|INV}";
+   in  "ok";
+   @init {getPolarity; wait $iWT;}
+}
+
+getOutputMode {
+   out ":PULSE\$1:OUTPUT:MODE?";
+   in  "%{TTL|ADJ}";
+}
+
+setOutputMode {
+   out ":PULSE\$1:OUTPUT:MODE %{TTL|ADJ}";
+   in  "ok";
+   @init {getOutputMode; wait $iWT;}
+}
+
+getOutputAmplitude {
+   out ":PULSE\$1:OUTPUT:AMPLITUDE?";
+   in  "%f";
+}
+
+setOutputAmplitude {
+   out ":PULSE\$1:OUTPUT:AMPLITUDE %f";
+   in  "ok";
+   @init {getOutputAmplitude; wait $iWT;}
+}
+
+getPCMode {
+   out ":PULSE\$1:CMODE?";
+   in  "%{NORM|SING|BURS|DCYC}";
+}
+
+setPCMode {
+   out ":PULSE\$1:CMODE %{NORM|SING|BURS|DCYC}";
+   in  "ok";
+   @init {getPCMode; wait 50}
+}
+
+getPBCounter {
+   out ":PULSE\$1:BCOUNTER?";
+   in  "%u";
+}
+
+setPBCounter {
+   out ":PULSE\$1:BCOUNTER %u";
+   in  "ok";
+   @init {getPBCounter; wait $iWT;}
+}
+
+getPGate {
+   out ":PULSE\$1:CGATE?";
+   in  "%{DIS|PULS|OUTP}";
+}
+
+setPGate {
+   out ":PULSE\$1:CGATE %{DIS|PULS|OUTP}";
+   in  "ok";
+   @init {getPGate; wait 50}
+}
+
+getPGateLogic {
+   out ":PULSE\$1:CLOGIC?";
+   in  "%{LOW|HIGH}";
+}
+
+setPGateLogic {
+   out ":PULSE\$1:CLOGIC %{LOW|HIGH}";
+   in  "ok";
+   @init {getPGateLogic; wait $iWT;}
+}
--- a/db/vega.db	Wed Jun 05 14:34:28 2013 +0200
+++ b/db/vega.db	Mon Jun 10 13:56:06 2013 +0200
@@ -1,6 +1,14 @@
 #
 # VEGA power control
 #
+record(ao, "$(P)$(R)EnergyMode")
+{
+   field(DESC, "force Energy mode")
+   field(DTYP, "stream")
+   field(OUT,  "@vega.proto forceEnergyMode $(BUS)")
+   field(PINI, "YES")
+}
+
 
 record(ai, "$(P)$(R)GetEnergy")
 {
@@ -11,11 +19,18 @@
     field(SCAN, "2 second")
 }
 
+record(ai, "$(P)$(R)GetRange")
+{
+   field(DESC, "Get range")
+   field(DTYP, "stream")
+   field(INP,  "@vega.proto getRange $(BUS)")
+   field(PINI, "YES")
+}
+
 record(ao, "$(P)$(R)SetRange")
 {
     field(DESC, "Set range")
     field(DTYP, "stream")
+    field(FLNK, "$(P)$(R)GetRange")
     field(OUT,  "@vega.proto setRange $(BUS)")
-    field(EGU, "")
-    field(SCAN, "2 second")
 }
--- a/db/vega.proto	Wed Jun 05 14:34:28 2013 +0200
+++ b/db/vega.proto	Mon Jun 10 13:56:06 2013 +0200
@@ -4,10 +4,20 @@
 
 getEnergy {
     out "$SE";
-    in "* %E\r\000";
+    in "*\ %E\r\000";
 }
 
 setRange {
-    out "$WN %f";
+    out "$WN%f";
+    in "*\r\000";
 }
 
+getRange {
+    out "$RN";
+    in "*%d\r\000";
+}
+
+forceEnergyMode {
+    out "$FE";
+}
+