diff --git a/PS300/PS300-IOC-01App/src/build.mak b/PS300/PS300-IOC-01App/src/build.mak
index e43786763..b356d27ae 100644
--- a/PS300/PS300-IOC-01App/src/build.mak
+++ b/PS300/PS300-IOC-01App/src/build.mak
@@ -29,6 +29,7 @@ $(APPNAME)_DBD += calcSupport.dbd
$(APPNAME)_DBD += asyn.dbd
$(APPNAME)_DBD += drvAsynSerialPort.dbd
$(APPNAME)_DBD += drvAsynIPPort.dbd
+$(APPNAME)_DBD += drvPrologixGPIB.dbd
$(APPNAME)_DBD += luaSupport.dbd
$(APPNAME)_DBD += stream.dbd
## add other dbd here ##
diff --git a/PS300/iocBoot/iocPS300-IOC-01/config.xml b/PS300/iocBoot/iocPS300-IOC-01/config.xml
index 992b3ab8e..597e7a286 100644
--- a/PS300/iocBoot/iocPS300-IOC-01/config.xml
+++ b/PS300/iocBoot/iocPS300-IOC-01/config.xml
@@ -5,7 +5,9 @@
IOC to control the Stanford powersupply 300 series IOCs
-
+
+
+
diff --git a/PS300/iocBoot/iocPS300-IOC-01/st-common.cmd b/PS300/iocBoot/iocPS300-IOC-01/st-common.cmd
index d1b1a56f9..696caa1fd 100644
--- a/PS300/iocBoot/iocPS300-IOC-01/st-common.cmd
+++ b/PS300/iocBoot/iocPS300-IOC-01/st-common.cmd
@@ -4,24 +4,31 @@ epicsEnvSet "DEVICE" "L0"
##ISIS## Run IOC initialisation
< $(IOCSTARTUP)/init.cmd
+stringiftest("GPIB", "$(IPADDR=)", 3)
+stringiftest("SERIAL", "$(PORT=)", 3)
+
## Device simulation mode IP configuration
$(IFDEVSIM) drvAsynIPPortConfigure("$(DEVICE)", "localhost:$(EMULATOR_PORT=57677)")
## For recsim:
$(IFRECSIM) drvAsynSerialPortConfigure("$(DEVICE)", "$(PORT=NUL)", 0, 1, 0, 0)
-## For real device:
-$(IFNOTDEVSIM) $(IFNOTRECSIM) drvAsynSerialPortConfigure("$(DEVICE)", "$(PORT=NO_PORT_MACRO)", 0, 0, 0, 0)
-$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "baud", "$(BAUD=9600)")
-$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "bits", "$(BITS=8)")
-$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "parity", "$(PARITY=none)")
-$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "stop", "$(STOP=1)")
+## For real RS2323 serial device:
+$(IFSERIAL) $(IFNOTDEVSIM) $(IFNOTRECSIM) drvAsynSerialPortConfigure("$(DEVICE)", "$(PORT=NO_PORT_MACRO)", 0, 0, 0, 0)
+$(IFSERIAL) $(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "baud", "$(BAUD=9600)")
+$(IFSERIAL) $(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "bits", "$(BITS=8)")
+$(IFSERIAL) $(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "parity", "$(PARITY=none)")
+$(IFSERIAL) $(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", -1, "stop", "$(STOP=1)")
## Hardware flow control off
-$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", 0, "clocal", "Y")
-$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"crtscts","N")
+$(IFSERIAL) $(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)", 0, "clocal", "Y")
+$(IFSERIAL) $(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"crtscts","N")
## Software flow control off
-$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"ixon","N")
-$(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"ixoff","N")
+$(IFSERIAL) $(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"ixon","N")
+$(IFSERIAL) $(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"ixoff","N")
+
+## GPIB prologix
+$(IFGPIB) $(IFNOTDEVSIM) $(IFNOTRECSIM) prologixGPIBConfigure("$(DEVICE)", "$(IPADDR=)")
+$(IFGPIB) $(IFNOTDEVSIM) $(IFNOTRECSIM) prologixGPIBSetOption("$(DEVICE)", "timeout_ms", 2000)
## Load record instances
@@ -29,7 +36,7 @@ $(IFNOTDEVSIM) $(IFNOTRECSIM) asynSetOption("$(DEVICE)",0,"ixoff","N")
< $(IOCSTARTUP)/dbload.cmd
## Load our record instances
-dbLoadRecords("$(PS300)/db/devSRS_PS$(MODEL=350_pos).db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX),R=$(IOCNAME):,A=-1, PORT=$(DEVICE)")
+dbLoadRecords("$(PS300)/db/devSRS_PS$(MODEL).db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX),R=$(IOCNAME):,A=$(GPIBADDR),PORT=$(DEVICE)")
dbLoadRecords("$(PS300)/db/devSRS_PS300_common.db","PVPREFIX=$(MYPVPREFIX),P=$(MYPVPREFIX),R=$(IOCNAME):,RECSIM=$(RECSIM=0),DISABLE=$(DISABLE=0),PORT=$(DEVICE)")
##ISIS## Stuff that needs to be done after all records are loaded but before iocInit is called