From 4cbf9f3d22d05a874eade7fba5f915c0731b1b05 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 4 Apr 2019 10:23:08 -0700 Subject: [PATCH 1/3] db cleanup remove unused macro $(SYSTEM) and $(controller) Provide default for $(SPT). The example shows SPT==SPLY. --- digitelQpcApp/Db/digitelQPCController.template | 2 -- digitelQpcApp/Db/digitelQpcIonp.template | 16 ++++------------ .../Db/SR00C-VA-IOC-01.substitutions | 14 +++++++------- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/digitelQpcApp/Db/digitelQPCController.template b/digitelQpcApp/Db/digitelQPCController.template index 3fd132d..590d44c 100644 --- a/digitelQpcApp/Db/digitelQPCController.template +++ b/digitelQpcApp/Db/digitelQPCController.template @@ -1,6 +1,5 @@ # This database is for a single QPC Controller # -# SYSTEM - PV prefix or system name # QPC - QPC Controller PV part name @@ -42,7 +41,6 @@ record(mbbi,"$(QPC):PUNITS") field(SCAN, "Passive") field(PINI, "YES") field(INP,"@digitelQpc.proto getPressureUnit($(unit=01)) $(port)") -# field(INP, "$(SYSTEM)$(PMP):SETPUNITS.VAL CP NMS") field(ZRVL,"0") field(ONVL,"1") field(TWVL,"2") diff --git a/digitelQpcApp/Db/digitelQpcIonp.template b/digitelQpcApp/Db/digitelQpcIonp.template index b3ea547..cbbbfa2 100644 --- a/digitelQpcApp/Db/digitelQpcIonp.template +++ b/digitelQpcApp/Db/digitelQpcIonp.template @@ -46,14 +46,6 @@ # SPT - Set point number for this pump # SPLY - Which pump supply number -#record(stringin, "$(device):CONTROLLER") -#{ -# field(DESC, "QPC Controller") -# field(PINI, "YES") -# field(VAL, $(controller)) -#} - - ################################################################################ # Text string on front panel # @@ -492,7 +484,7 @@ record(ai, "$(device):RANGELOWER") # the controller will simply return an error. record(ai, "$(device):SETSPON") { - field(DESC, "Set on press for Spt$(SPT)") + field(DESC, "Set on press for Spt$(SPT=$(SPLY))") field(DTYP, "Soft Channel") field(HOPR,"1.0E-4") field(LOPR,"1.0e-11") @@ -503,7 +495,7 @@ record(ai, "$(device):SETSPON") record(ai, "$(device):SETSPOFF") { - field(DESC, "Set off press for Spt$(SPT)") + field(DESC, "Set off press for Spt$(SPT=$(SPLY))") field(DTYP, "Soft Channel") field(HOPR,"1.0E-4") field(LOPR,"1.0e-11") @@ -550,7 +542,7 @@ record(calcout,"$(device):WRITESP") field(DTYP, "stream") field(CALC,"0") field(PINI, "YES") - field(INPA,"$(SPT)") + field(INPA,"$(SPT=$(SPLY))") field(INPB,"$(SPLY)") field(INPC,"$(device):SETSPON.VAL NPP NMS") field(INPD,"$(device):SETSPOFF.VAL NPP NMS") @@ -653,4 +645,4 @@ record(mbbi, "$(device):ERR") field(TTSV, "MINOR") field(FTSV, "MINOR") field(FFSV, "MINOR") -} \ No newline at end of file +} diff --git a/example/SR00C-VA-IOC-01App/Db/SR00C-VA-IOC-01.substitutions b/example/SR00C-VA-IOC-01App/Db/SR00C-VA-IOC-01.substitutions index f4fb29c..80a79e8 100644 --- a/example/SR00C-VA-IOC-01App/Db/SR00C-VA-IOC-01.substitutions +++ b/example/SR00C-VA-IOC-01App/Db/SR00C-VA-IOC-01.substitutions @@ -38,15 +38,15 @@ file digitelQPCController.template { - pattern { QPC , unit, port , punits } - { "SR00S-VA-QPC-01", "01", "ser0", "MBAR" } + pattern { QPC , unit, port } + { "SR00S-VA-QPC-01", "01", "ser0" } } file digitelQpcIonp.template { - pattern { device ,controller , SPLY , SPT , SIZE , HV , port , unit, spon , spoff } - { "SR00S-VA-IONP-01" ,"SR00S-VA-QPC-01", "1" , "1" , "300" , 3000 ,"ser0", "01", 1.0E-8 , 2.0E-8 } - { "SR00S-VA-IONP-02" ,"SR00S-VA-QPC-01", "2" , "2" , "300" , 3100 ,"ser0", "01", 1.0E-8 , 2.0E-8 } - { "SR00S-VA-IONP-03" ,"SR00S-VA-QPC-01", "3" , "3" , "300" , 3200 ,"ser0", "01", 1.0E-8 , 2.0E-8 } - { "SR00S-VA-IONP-04" ,"SR00S-VA-QPC-01", "4" , "4" , "300" , 3300 ,"ser0", "01", 1.0E-8 , 2.0E-8 } + pattern { device , SPLY , SIZE , HV , port , unit, spon , spoff } + { "SR00S-VA-IONP-01" , "1" , "300" , 3000 ,"ser0", "01", 1.0E-8 , 2.0E-8 } + { "SR00S-VA-IONP-02" , "2" , "300" , 3100 ,"ser0", "01", 1.0E-8 , 2.0E-8 } + { "SR00S-VA-IONP-03" , "3" , "300" , 3200 ,"ser0", "01", 1.0E-8 , 2.0E-8 } + { "SR00S-VA-IONP-04" , "4" , "300" , 3300 ,"ser0", "01", 1.0E-8 , 2.0E-8 } } From 82bd45ca780def04dac2d312ac6143dbf9221371 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 4 Apr 2019 15:08:56 -0700 Subject: [PATCH 2/3] Selectable .proto file --- .../Db/digitelQPCController.template | 8 ++-- digitelQpcApp/Db/digitelQpcIonp.template | 38 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/digitelQpcApp/Db/digitelQPCController.template b/digitelQpcApp/Db/digitelQPCController.template index 590d44c..60d21c0 100644 --- a/digitelQpcApp/Db/digitelQPCController.template +++ b/digitelQpcApp/Db/digitelQPCController.template @@ -8,7 +8,7 @@ record(stringin, "$(QPC):MODEL") field(DESC, "Reads Device Model") field(PINI, "YES") field(DTYP, "stream") - field(INP, "@digitelQpc.proto getModel($(unit=01)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getModel($(unit=01)) $(port)") } record(stringin, "$(QPC):FIRMWARE") @@ -16,7 +16,7 @@ record(stringin, "$(QPC):FIRMWARE") field(DESC, "Reads Device Firmware") field(PINI, "YES") field(DTYP, "stream") - field(INP, "@digitelQpc.proto getFirmware($(unit=01)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getFirmware($(unit=01)) $(port)") } record(mbbo,"$(QPC):SETPUNITS") @@ -24,7 +24,7 @@ record(mbbo,"$(QPC):SETPUNITS") field(DESC,"Set Pressure Units controller") field(NOBT,"2") field(DTYP, "stream") - field(OUT,"@digitelQpc.proto setPressUnit($(unit=01)) $(port)") + field(OUT,"@digitelQpc$(QPCBUS=).proto setPressUnit($(unit=01)) $(port)") field(ZRVL,"0") field(ONVL,"1") field(TWVL,"2") @@ -40,7 +40,7 @@ record(mbbi,"$(QPC):PUNITS") field(DTYP, "stream") field(SCAN, "Passive") field(PINI, "YES") - field(INP,"@digitelQpc.proto getPressureUnit($(unit=01)) $(port)") + field(INP,"@digitelQpc$(QPCBUS=).proto getPressureUnit($(unit=01)) $(port)") field(ZRVL,"0") field(ONVL,"1") field(TWVL,"2") diff --git a/digitelQpcApp/Db/digitelQpcIonp.template b/digitelQpcApp/Db/digitelQpcIonp.template index cbbbfa2..0059edd 100644 --- a/digitelQpcApp/Db/digitelQpcIonp.template +++ b/digitelQpcApp/Db/digitelQpcIonp.template @@ -54,7 +54,7 @@ record(stringout, "$(device):SETTEXT") field(DESC, "Text String") field(VAL , "$(text=$(device))") field(DTYP, "stream") - field(OUT, "@digitelQpc.proto settext($(unit),$(SPLY),$(device)) $(port)") + field(OUT, "@digitelQpc$(QPCBUS=).proto settext($(unit),$(SPLY),$(device)) $(port)") field(PINI, "YES") } @@ -65,7 +65,7 @@ record(bo, "$(device):SETAUTOST") { field(DESC, "Auto Restart") field(DTYP, "stream") - field(OUT, "@digitelQpc.proto setautost($(unit=01),$(SPLY),$(device)) $(port)") + field(OUT, "@digitelQpc$(QPCBUS=).proto setautost($(unit=01),$(SPLY),$(device)) $(port)") field(ZNAM, "No") field(ONAM, "Yes") field(DOL, "0") @@ -79,7 +79,7 @@ record(bi, "$(device):AUTOST") { field(DESC, "Auto Restart") field(DTYP, "stream") - field(INP, "@digitelQpc.proto autost($(unit=01),$(SPLY)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto autost($(unit=01),$(SPLY)) $(port)") field(SCAN, "10 second") field(PINI, "YES") field(ZNAM, "No") @@ -96,7 +96,7 @@ record(ai, "$(device):CAL") { field(DESC, "Calibration Factor") field(DTYP, "stream") field(PINI, "YES") - field(INP, "@digitelQpc.proto getcal($(unit=01),$(SPLY)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getcal($(unit=01),$(SPLY)) $(port)") field(SCAN, "10 second") field(LOPR, "0.0") field(HOPR, "9.99") @@ -109,7 +109,7 @@ record(ai, "$(device):CAL") { record(ao, "$(device):SETCAL") { field(DESC, "Calibration Factor") field(DTYP, "stream") - field(OUT, "@digitelQpc.proto setcal($(unit=01),$(SPLY)) $(port)") + field(OUT, "@digitelQpc$(QPCBUS=).proto setcal($(unit=01),$(SPLY)) $(port)") field(DRVL, "0.0") field(DRVH, "9.99") field(LOPR, "0.0") @@ -123,7 +123,7 @@ record(ai, "$(device):GETV") { field(DESC, "Get Target Voltage") field(DTYP, "stream") field(PINI, "YES") - field(INP, "@digitelQpc.proto getVoltageSetpoint($(unit=01),$(SPLY)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getVoltageSetpoint($(unit=01),$(SPLY)) $(port)") field(SCAN, "1 second") field(LOPR, "3000") field(HOPR, "7000") @@ -156,7 +156,7 @@ record(calcout, "$(device):ISON") record(ao, "$(device):SETV") { field(DESC, "Set target voltage") field(DTYP, "stream") - field(OUT, "@digitelQpc.proto setVoltage($(unit=01),$(SPLY)) $(port)") + field(OUT, "@digitelQpc$(QPCBUS=).proto setVoltage($(unit=01),$(SPLY)) $(port)") field(PINI, "YES") field(DOL, "$(HV=3000)") field(DRVL, "3000") @@ -174,7 +174,7 @@ record(bo, "$(device):SETHV") { field(DESC, "HV On / Off") field(DTYP, "stream") - field(OUT, "@digitelQpc.proto sethv($(unit=01),$(SPLY),$(device)) $(port)") + field(OUT, "@digitelQpc$(QPCBUS=).proto sethv($(unit=01),$(SPLY),$(device)) $(port)") field(ZNAM, "Stop") field(ONAM, "Start") field(DOL, "$(device):ISON PP") @@ -201,7 +201,7 @@ record(ai, "$(device):I") field(SCAN, "5 second") # field(PINI, "YES") field(DTYP, "stream") - field(INP, "@digitelQpc.proto getCurrent($(unit=01),$(SPLY)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getCurrent($(unit=01),$(SPLY)) $(port)") } record(ai, "$(device):P") @@ -210,7 +210,7 @@ record(ai, "$(device):P") field(SCAN, "5 second") # field(PINI, "YES") field(DTYP, "stream") - field(INP, "@digitelQpc.proto getPressure($(unit=01),$(SPLY)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getPressure($(unit=01),$(SPLY)) $(port)") } record(ai, "$(device):V") @@ -220,7 +220,7 @@ record(ai, "$(device):V") # field(PINI, "YES") field(PREC, "0") field(DTYP, "stream") - field(INP, "@digitelQpc.proto getVoltage($(unit=01),$(SPLY)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getVoltage($(unit=01),$(SPLY)) $(port)") } record(stringin, "$(device):SCAN") @@ -252,7 +252,7 @@ record(mbbi, "$(device):QPCSTA") { field(DESC, "Supply Status") field(DTYP, "stream") - field(INP, "@digitelQpc.proto getStatus($(unit=01),$(SPLY),$(device):STATUSERRMSG) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getStatus($(unit=01),$(SPLY),$(device):STATUSERRMSG) $(port)") field(SCAN, "5 second") field(ZRST, "Standby") field(ONST, "Starting") @@ -372,7 +372,7 @@ record(bo, "$(device):ENABLE") field(PINI, "NO") field(VAL, "1") field(DTYP, "stream") - field(OUT, "@digitelQpc.proto sethv($(unit=01),$(SPLY),$(device)) $(port)") + field(OUT, "@digitelQpc$(QPCBUS=).proto sethv($(unit=01),$(SPLY),$(device)) $(port)") } record(bo, "$(device):DISABLE") @@ -381,7 +381,7 @@ record(bo, "$(device):DISABLE") field(PINI, "NO") field(VAL, "0") field(DTYP, "stream") - field(OUT, "@digitelQpc.proto sethv($(unit=01),$(SPLY),$(device)) $(port)") + field(OUT, "@digitelQpc$(QPCBUS=).proto sethv($(unit=01),$(SPLY),$(device)) $(port)") } ################################################################### @@ -392,7 +392,7 @@ record(ai, "$(device):PUMPSIZE") field(PINI, "YES") field(SCAN, "10 second") field(DTYP, "stream") - field(INP, "@digitelQpc.proto getPumpSize($(unit=01),$(SPLY)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getPumpSize($(unit=01),$(SPLY)) $(port)") field(EGU,"L/S") } record(ao, "$(device):SETPUMPSIZE") { @@ -400,7 +400,7 @@ record(ao, "$(device):SETPUMPSIZE") { field(DTYP, "stream") field(PINI, "YES") field(DOL, "$(SIZE=500)") - field(OUT, "@digitelQpc.proto setPumpSize($(unit=01),$(SPLY)) $(port)") + field(OUT, "@digitelQpc$(QPCBUS=).proto setPumpSize($(unit=01),$(SPLY)) $(port)") field(OMSL, "supervisory") field(EGU,"L/S") field(DRVH,"1200") @@ -422,7 +422,7 @@ record(ai, "$(device):GETSP") field(PINI, "YES") field(SCAN, "5 second") field(DTYP, "stream") - field(INP, "@digitelQpc.proto getSetpoints($(unit=01),$(SPLY),$(device)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto getSetpoints($(unit=01),$(SPLY),$(device)) $(port)") field(PREC,"1") } @@ -546,7 +546,7 @@ record(calcout,"$(device):WRITESP") field(INPB,"$(SPLY)") field(INPC,"$(device):SETSPON.VAL NPP NMS") field(INPD,"$(device):SETSPOFF.VAL NPP NMS") - field(OUT,"@digitelQpc.proto setSetpoints($(unit=01),$(device)) $(port)") + field(OUT,"@digitelQpc$(QPCBUS=).proto setSetpoints($(unit=01),$(device)) $(port)") } record(stringin, "$(device):SPOFFMESSAGE") @@ -591,7 +591,7 @@ record(longin, "$(device):ERRGET") { field(DESC, "Get Error Code") field(DTYP, "stream") - field(INP, "@digitelQpc.proto err($(unit),$(SPLY)) $(port)") + field(INP, "@digitelQpc$(QPCBUS=).proto err($(unit),$(SPLY)) $(port)") field(SCAN, "Passive") } From 7082cb9b548a824fcbfa4886d57d3811c7dd67be Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 4 Apr 2019 16:26:22 -0700 Subject: [PATCH 3/3] redo ethernet proto Start from digitelQpc.proto and do a direct replacement removing the prefix and suffix which the ethernet protocol doesn't include. Include '>' prompt in InTerminator, which works except for the very first reply, which includes the initial '>'. --- .../protocol/digitelQpcEthernet.proto | 237 +++++++++++------- 1 file changed, 150 insertions(+), 87 deletions(-) diff --git a/digitelQpcApp/protocol/digitelQpcEthernet.proto b/digitelQpcApp/protocol/digitelQpcEthernet.proto index 8c22b38..237f817 100644 --- a/digitelQpcApp/protocol/digitelQpcEthernet.proto +++ b/digitelQpcApp/protocol/digitelQpcEthernet.proto @@ -1,32 +1,93 @@ - OutTerminator = CR; -#InTerminator = ">"; +# Mechanical replacement from digitelQpc.proto +# +# out "~ \$1 3B ... 00"; +# becomes +# out "cmd 3B ..."; +# +# in "OK ... %*2c"; +# in "OK ... %*2X"; +# becomes +# in "OK ..."; +# +# Must account for the trailing space in replies "OK 00 " +# +# Also remove unnecessary ExtraInput = Ignore +# +# Omit isEnabled. "cmd 61" not valid + +OutTerminator = CR; +InTerminator = "\r\r\n>"; + ReadTimeout = 2000; ReplyTimeout = 2000; +# What to do about initial unsolicited ">"? + +autost { + out "cmd 34 \$2"; + in "OK %*2X %{NO|YES}"; + } + +setautost { + out "cmd 33 \$2,%{N|Y}"; + in "OK %*2X "; + @mismatch { in "ER %*2X *ERROR: %(\$3:STATUSERRMSG.VAL)s";} + + } + +sethv { + out "cmd %{38|37} \$2"; + in "OK %*2X "; + @mismatch { in "ER %*2X *ERROR: %(\$3:HVERRMSG.VAL)36c";} + } + +getcal { + out "cmd 1D \$2"; + in "OK %*2c %f"; + } + +setcal { + out "cmd 1E \$2,%4.2f"; + in "OK %*2X "; + @init { getcal; } + } + +settext { + out "cmd ED \$2,\"%s\""; + in "OK %*2X "; + } + # Command 0A Read Current getCurrent { - out "cmd 0A \$1"; - # out "~ 00 0A \$1 00"; - in "%*6c%E"; - ExtraInput = Ignore; + out "cmd 0A \$2"; + in "OK %*2X %g %*{AMPS|Amps}"; } # Command 0B Read Pressure getPressure { - out "cmd 0B \$1"; - # out "~ 00 0B \$1 00"; - in "%*6c%E"; - ExtraInput = Ignore; + out "cmd 0B \$2"; + in "OK %*2c %g %*s"; } # Command 0C Read Voltage getVoltage { - out "cmd 0C \$1"; - # out "~ 00 0C \$1 00"; - in "%*6c%f"; - ExtraInput = Ignore; + out "cmd 0C \$2"; + in "OK %2X %d"; } +getVoltageSetpoint { + out "cmd 53 \$2"; + in "OK %2X %d"; + } + +setVoltage { + out "cmd 53 \$2,%d"; + in "OK %2X "; + # Initial voltage setpoint now via template macro + # @init { getVoltage; } + } + + # Command 0D Get Supply Status # New command has the format cmd 0D supply,option # If you send cmd 0D \$1,00 (Currently 00 is the only option) @@ -38,84 +99,71 @@ getVoltage { # 04 - pump error # Otherwise this protocol sends back a string as is done here getStatus { - out "cmd 0D \$1"; - # out "~ 00 0D \$1 00"; - in "%*6c%s"; - ExtraInput = Ignore; + out "cmd 0D \$2,00"; + in "OK %*2X %d"; } -# Command 61 Is High Voltage On - Indicates if the high voltage is on for -# the specified pump -# This is likely a legacy command as it does not exist in the revision G -# manual. I think that it is replaced by the 0D command above. -isEnabled { - out "cmd 61 \$1"; - in "%*6c%s"; - ExtraInput = Ignore; -} +err { + out "cmd 0D \$2,00"; + in "OK %*2X %*[^0-9]%d"; + } + # Command 37 Start Pump - Enables high voltage of specified supply enable { - out "cmd 37 \$1"; - ExtraInput = Ignore; + out "cmd 37 \$2"; + in "OK %*2X "; } # Command 38 Stop Pump - Disables high voltage of specified supply disable { - out "cmd 38 \$1"; - ExtraInput = Ignore; + out "cmd 38 \$2"; + in "OK %*2X "; } # Command 01 Get Model - Returns the pump controller model (QPC,MPC,etc) getModel { out "cmd 01"; - # out "~ 05 01 26"; - in "%*14c%s"; - ExtraInput = Ignore; + in "OK %*2c DIGITEL %s"; } # Command 02 Version - Returns the firmware version of the pump controller getFirmware { out "cmd 02"; - # out "~ 05 02 27"; - in "%*25c%s"; - ExtraInput = Ignore; + in "OK %*2c FIRMWARE VERSION: %s"; } +### # Uses the command 0B above but returns only the pressure units selected -# This function is used to initialize setPressUnit function below +# This function is used to initialize setPressUnit function below. +# Note that the supply channel is arbitrarily set to 1, but any valid supply channel could be chosen +# as the units are common to all supply channels. +# getPressureUnit { - out "cmd 0B \$1"; - # out "~ 00 0B 01 00"; - in "%*6c%*f%*1c%s"; - ExtraInput = Ignore; + out "cmd 0B 1"; + in "OK %*2X %*G %{TORR|MBAR|PASCAL}"; } # Command 0E Set Pressure Units - Allows remote control over pressure units setPressUnit { - out "cmd 0E %s"; - # out "~ 05 0E 58"; + out "cmd 0E %{T|M|P}"; + in "OK %*2X "; @init { getPressureUnit; } - ExtraInput = Ignore; } # Command 11 Get pump Size - Reads pump size in liters/second getPumpSize { - out "cmd 11 \$1"; - # out "~ 05 11 1 78"; # Checksum for pump 1 - in "%*6c%d L/S"; - ExtraInput = Ignore; + out "cmd 11 \$2"; + in "OK %*2c %d L/S"; } # Command 12 Set pump Size - Sets pump size in liters/second setPumpSize { - out "cmd 12 \$1,%s"; - # out "~ 05 12 40"; - in "%*6c"; + out "cmd 12 \$2,%d"; + in "OK %*2x "; @init { getPumpSize; } - ExtraInput = Ignore; } # For the set points here we just get the set point on/off pressure and output @@ -123,37 +171,52 @@ setPumpSize { # NOTE: # We will use the new 3B command which has replaced the 3C and 3D commands # get the on pressure set point -getOnPressSpt { - out "cmd 3B \$1"; - in "%*13c%E"; - ExtraInput = Ignore; -} - -# get off pressure set point -getOffPressSpt { - out "cmd 3B \$1"; - in "%*21c%E"; - ExtraInput = Ignore; -} - -getSptStatus { - out "cmd 3B \$1"; - in "%*29c%d"; - ExtraInput = Ignore; -} - -# The mismatch is because I got lazy with the database and did not filter -# bad on pressures being sent to the device mostly because the device -# firmware will automatically set the off pressure 20% > than the on pressure. -setOnPress { - out "cmd 3B \$2,1,\$1,%E,%(\$3\$4:Spt\$2OffPress.VAL)E"; - in "%(\$3\$4:SptMessage.VAL)2c"; - in "00*[^>]"; - - @mismatch { in "ER 08 *ERROR: %(\$3\$4:SptMessage.VAL)36c";} -} -setOffPress { - out "cmd 3B \$2,1,\$1,%(\$3\$4:Spt\$2OnPress.VAL)E,%E"; - ExtraInput = Ignore; -} - +# +# Arguments +# 1 => Unit, 2 => Setpoint Number, 3 => device PV base name +# +getSetpoints { + out "cmd 3B \$2"; + in "OK %2X %*i,%(\$3:SPFUNCTION.VAL)i,%*i,%(\$3:SPON.VAL)G,%(\$3:SPOFF.VAL)G,%(\$3:SPSTA.VAL)i"; +} + + +## +# Args: 1 => Unit, 2 => Supply , 3 => Setpoint number, 4 => Pump name +# +# +setSetpoints + { + out "cmd 3B %(A)1d,1,%(B)1d,%(C)G,%(D)G"; + in "OK %*2X %*i,%*i,%*i,%(\$2:SPON)G,%(\$2:SPOFF)G,%(\$2:SPSTA)i"; + @mismatch { in "ER 08 *ERROR: %(\$2:SPMESSAGE.VAL)36c";} +## +# This will initialise the setpoint to the values presently in controller. +# On IOC reboot, we should set the setpoints to the default startup values given by EPICS. +# @init { out "cmd 3B %(A)1d"; +# in "OK %2X %*i,%*i,%*i,%(\$2:SETSPON.VAL)G,%(\$2:SETSPOFF.VAL)G,%*i"; +# } + } + +## +# Digital Input assignment +# +# CMD 58 N,S,F - N = digital input channel, S = pump (1-4), F = Function (00 => Off, 01 => HV Interlock, 02 => TSP1 Ilk, 03 => TSP2 ilk) +# $1 => Unit, $2 => Pump, $3 => Digital inp chan, $4 => Function, $5 => PV base name for pump +# +getDigitalInput + { + out "cmd 58 \$2"; + in "OK %(\$5:FUNCTION)d,%(\$5:DIGIN)d"; + } + +## +# Digital Input assignment +# +# CMD 58 N,S,F - N = digital input channel, S = pump (1-4), F = Function (00 => Off, 01 => HV Interlock, 02 => TSP1 Ilk, 03 => TSP2 ilk) +# +setDigitalInput + { + out "cmd 58 \$3,\$2,\$4"; + in "OK %*d,%(\$5:DIGIN)d"; + }