Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions ipApp/Db/XGS600-gauge.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#
# Database to read gauge pressure from Agilent XGS600 controllers.
#
# Parameters:
# $(SYSTEM): PV prefix
# $(CONTROLLER): Controller name from st.cmd
# $(CHANNEL): Channel number
#

record(ai, "$(SYSTEM):getPressure")
{
field(DESC, "Reads Cell $(CONTROLLER) Pressure")
field(SCAN, "1 second")
field(DTYP, "stream")
field(INP, "@XGS600.proto getPressure($(CHANNEL)) $(CONTROLLER)")
field(PINI, "YES")
field(EGU, "mbar")
field(VAL, "0")
field(PREC, "3")
field(LOLO, "1.333E-12") field(LLSV, "MAJOR")
field(HIGH, "1E-7") field(HSV, "MINOR")
field(HIHI, "1E-6") field(HHSV, "MAJOR")
}
96 changes: 96 additions & 0 deletions ipApp/Db/XGS600-setpoints.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#
# Agilent XGS600 controllers setpoints control system.
#
# Description
# - Database designed to assign two relays setpoints to a single gauge.
# - Set both relays numbers to same value in case of single relay setup.
# - Off setpoint: pressure in which the gauge generates interlock signal.
# - On setpoint: pressure in which the gauge clears the interlock
# - When pressure reaches OFF level, it must reach ON level so the interlock
# is cleared
# - OFF > ON
#
# Parameters:
# - $(SYSTEM): PV prefix.
# - $(CHANNEL): Channel number with regard to the IOC
# - $(CONTROLLER): Controller name from st.cmd
# - $(PORT): Channel number with regard to the controller
# - $(SP1): 1st setpoint relay
# - $(SP2): 2nd setpoint relay
#

record(ao, "$(SYSTEM):setOffSetpoint$(CHANNEL)")
{
field(DESC, "Sets Cell $(CONTROLLER) Off pressure setpoint")
field(DTYP, "stream")
field(OUT, "@XGS600.proto setRedundantOffSp($(PORT),$(SP1),$(SP2),$(SYSTEM):setOnSetpoint$(CHANNEL)) $(CONTROLLER)")
field(PINI, "NO")
field(PREC, "3")
field(EGU, "mbar")
field(LOLO, "") field(LLSV, "NO_ALARM")
field(HIHI, "") field(HHSV, "NO_ALARM")
}

record(ao, "$(SYSTEM):setOnSetpoint$(CHANNEL)")
{
field(DESC, "Sets Cell $(CONTROLLER) Off pressure setpoint")
field(DTYP, "stream")
field(OUT, "@XGS600.proto setRedundantOnSp($(PORT),$(SP1),$(SP2)) $(CONTROLLER)")
field(PINI, "NO")
field(PREC, "3")
field(EGU, "mbar")
field(LOLO, "") field(LLSV, "NO_ALARM")
field(HIHI, "") field(HHSV, "NO_ALARM")
}

record(ai, "$(SYSTEM):getOffSetpoint$(CHANNEL)")
{
field(DESC, "Reads Cell $(CONTROLLER) Off pressure setpoint")
field(SCAN, "1 second")
field(DTYP, "stream")
field(INP, "@XGS600.proto getOffSetpoint($(SP1)) $(CONTROLLER)")
field(PINI, "YES")
field(PREC, "3")
field(EGU, "mbar")
field(LOLO, "") field(LLSV, "NO_ALARM")
field(HIGH, "") field(HSV, "NO_ALARM")
field(HIHI, "") field(HHSV, "NO_ALARM")
}

record(ai, "$(SYSTEM):getOnSetpoint$(CHANNEL)")
{
field(DESC, "Reads Cell $(CONTROLLER) Off pressure setpoint")
field(SCAN, "1 second")
field(DTYP, "stream")
field(INP, "@XGS600.proto getOnSetpoint($(SP1)) $(CONTROLLER)")
field(PINI, "YES")
field(PREC, "3")
field(EGU, "mbar")
field(LOLO, "") field(LLSV, "NO_ALARM")
field(HIGH, "") field(HSV, "NO_ALARM")
field(HIHI, "") field(HHSV, "NO_ALARM")
}

record(mbbi, "$(SYSTEM):getChannel$(CHANNEL)Relay1State")
{
field(DESC, "Read channel $(CHANNEL) relay 1 state")
field(DTYP, "stream")
field(INP, "@XGS600.proto getSetpointState($(SP1)) $(CONTROLLER)")
field(SCAN, "1 second")
field(PINI, "YES")
field(ZRVL, "0") field(ZRST, "OFF") field(ZRSV, "MAJOR")
field(ONVL, "1") field(ONST, "ON") field(ONSV, "MAJOR")
field(TWVL, "3") field(TWST, "Auto") field(TWSV, "NO_ALARM")
}

record(mbbi, "$(SYSTEM):getChannel$(CHANNEL)Relay2State")
{
field(DESC, "Read channel $(CHANNEL) relay 2 state")
field(DTYP, "stream")
field(INP, "@XGS600.proto getSetpointState($(SP2)) $(CONTROLLER)")
field(SCAN, "1 second")
field(PINI, "YES")
field(ZRVL, "0") field(ZRST, "OFF") field(ZRSV, "MAJOR")
field(ONVL, "1") field(ONST, "ON") field(ONSV, "MAJOR")
field(TWVL, "3") field(TWST, "Auto") field(TWSV, "NO_ALARM")
}
75 changes: 75 additions & 0 deletions ipApp/Db/XGS600.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#
# XGS600.proto
#
# Stream device protocol file for Agilent XGS600 vacuum gauge controllers
#
# Abdalla Al-Dalleh
# August 13, 2026
#

Terminator = CR;

# $1: Channel Number [1-5]
getPressure
{
out "#0002I\$1";
in "%*1c%E";

@mismatch {
in "%*1c%E";
}
}

# $1: Relay Number [1-8]
getOffSetpoint
{
out "#009\$1";
in "%*1c%E";
}

getOnSetpoint
{
out "#008\$1";
in "%*1c%E";
}

# $1: Channel Number [1-5]
# $2 $3: Relay Number [1-8]
setRedundantOffSp
{
out "#006\$2I\$1%(\$4.VAL)1.3E";
in ">";
out "#007\$2I\$1%1.3E";
in ">";

out "#006\$3I\$1%(\$4.VAL)1.3E";
in ">";
out "#007\$3I\$1%1.3E";
in ">";
}

setRedundantOnSp
{
out "#006\$2I\$1%1.3E";
in ">";
out "#006\$3I\$1%1.3E";
in ">";
}

setSetpointState
{
out "#005E%(\$1)u%d";
}

getSetpointState
{
out "#005F\$1";
in "%*1c%u";
}

debug
{
ExtraInput = Ignore;
out "%s";
in "%50c";
}