|
Hi Mark
See attached. It is what we use at SNS for Gamma ION QPC Digitel:
-Brad
On Fri, 2026-01-23 at 22:21 +0000, Mark Rivers via Tech-talk wrote:
Folks, I have been using this old C device support to talk to Gamma Vacuum MPC ion pump controllers. https: //github. com/epics-modules/ip/blob/master/ipApp/src/devMPC. c https: //github. com/epics-modules/ip/blob/master/ipApp/Db/MPC. db This only
Folks,
I have been using this old C device support to talk to Gamma Vacuum MPC ion pump controllers.
This only talks via RS-232, but many of their newer modules support Ethernet. The Ethernet message format is somewhat different. Has anyone written StreamDevice support for the Ethernet protocol?
Thanks
Mark
|
Terminator = CR;
#InTerminator = LF;
ReplyTimeout = 10000;
ReadTimeout = 10000;
#in "^[0-9]{2} OK 00 ([0-9]+.[a-zA-Z0-9-]+) (TORR|MBAR|PASCAL) [a-zA-Z0-9]{2}"
#in "%*s%*s%*s%s%*s%*s";
#in "\$1 OK 00 %s QPC %0<sum8>";
getModel
{
out "~ \$1 01 %01.0<sum8>";
in "\$1 OK 00 %/DIGITEL QPC/ %0<sum8>";
}
getFWV
{
out "~ \$1 02 %01.0<sum8>";
in "\$1 OK 00 FIRMWARE VERSION: %s %0<sum8>";
}
getCurrent
{
out "~ \$1 0A \$2 %01.0<sum8>";
in "\$1 OK 00 %e %*s %0<sum8>";
}
getPressure
{
out "~ \$1 0B \$2 %01.0<sum8>";
in "\$1 OK 00 %e %*s %0<sum8>";
}
getVoltage
{
out "~ \$1 0C \$2 %01.0<sum8>";
in "\$1 OK 00 %d %0<sum8>";
}
getPumpStatus
{
out "~ \$1 0D \$2,00 %01.0<sum8>";
in "\$1 OK 00 %d %0<sum8>";
}
# ~ 08 11 1 00
# 08 OK 00 300 L/S 63
getPumpSize
{
out "~ \$1 11 \$2 %01.0<sum8>";
in "\$1 OK 00 %d %*s %0<sum8>";
}
getPumpPressureFactor
{
out "~ \$1 1D \$2 %01.0<sum8>";
in "\$1 OK 00 %f %0<sum8>";
}
getAutoRestartStr
{
out "~ \$1 34 \$2 %01.0<sum8>";
in "\$1 OK 00 %s %0<sum8>";
}
getPumpCurrentLimit
{
out "~ \$1 43 \$2 %01.0<sum8>";
in "\$1 OK 00 %d %0<sum8>";
}
getSetpoint
{
out "~ \$1 3b \$2 %01.0<sum8>";
in "\$1 OK 00 \$3,1,\$3,%(\$4:IP\$5:Relay\$2OnPressure)e,%(\$4:IP\$5:Relay\$2OffPressure)e,%(\$4:IP\$5:Relay\$2State)d %0<sum8>";
}
SetSetpoint
{
out "~ \$1 3b \$3,1,\$3,%(A)e,%(B)e %01.0<sum8>";
in "\$1 OK 00 %0<sum8>";
}
HvTurnOn
{
out "~ \$1 37 \$2 %01.0<sum8>";
in "\$1 OK 00 %0<sum8>";
}
HvTurnOff
{
out "~ \$1 38 \$2 %01.0<sum8>";
in "\$1 OK 00 %0<sum8>";
}
file gammaSerial.template
{
pattern
{P, N, S1, S2, ADDR, PORT}
{LDmp_Vac, 01, 01, 1, 06, PORT06}
{LDmp_Vac, 04, 02, 2, 06, PORT06}
{MDmp_Vac, 01, 01, 1, 07, PORT07}
{HEBT_Vac, 04, 02, 2, 07, PORT07}
{HEBT_Vac, 06, 01, 1, 08, PORT08}
{HEBT_Vac, 08, 02, 2, 08, PORT08}
{HEBT_Vac, 10, 01, 1, 09, PORT09}
{HEBT_Vac, 12, 02, 2, 09, PORT09}
{HEBT_Vac, 14, 01, 1, 0A, PORT10}
{HEBT_Vac, 16, 02, 2, 0A, PORT10}
{HEBT_Vac, 17, 01, 1, 0B, PORT11}
{HEBT_Vac, 18, 02, 2, 0B, PORT11}
{HEBT_Vac, 20, 01, 1, 0C, PORT12}
{HEBT_Vac, 22, 02, 2, 0C, PORT12}
{HEBT_Vac, 2B, 01, 1, 0D, PORT13}
{HEBT_Vac, 4B, 02, 2, 0D, PORT13}
{HEBT_Vac, 8B, 01, 1, 0E, PORT14}
{HEBT_Vac, 14B, 02, 2, 0E, PORT14}
{HEBT_Vac, 16B, 01, 1, 0F, PORT15}
{HEBT_Vac, 17B, 02, 2, 0F, PORT15}
{HEBT_Vac, 20B, 01, 1, 10, PORT16}
{HEBT_Vac, 09, 02, 2, 10, PORT16}
}
record(stringin, "${P}:IP${N}:Model")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getModel(${ADDR}) ${PORT}")
field(SCAN, "1 second")
}
record(stringin, "${P}:IP${N}:FirmwareVersion")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getFWV(${ADDR}) ${PORT}")
field(SCAN, "1 second")
}
record(ai, "${P}:IP${N}:Current")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getCurrent(${ADDR},${S1}) ${PORT}")
field(SCAN, "1 second")
field(PREC, "0")
field(EGU, "AMPS")
}
record(ai, "${P}:IP${N}:Pressure")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getPressure(${ADDR},${S1}) ${PORT}")
field(SCAN, "1 second")
field(PREC, "0")
field(EGU, "Torr")
}
record(ai, "${P}:IP${N}:Voltage")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getVoltage(${ADDR},${S1}) ${PORT}")
field(SCAN, "1 second")
field(PREC, "0")
field(EGU, "VOLTS")
}
record(mbbi, "${P}:IP${N}:Status")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getPumpStatus(${ADDR},${S1}) ${PORT}")
field(SCAN, "1 second")
field(ZRVL, "0")
field(ONVL, "1")
field(TWVL, "2")
field(THVL, "3")
field(FRVL, "4")
#String Vals
field(ZRST, "STANDBY")
field(ONST, "STARTING")
field(TWST, "RUNNING")
field(THST, "COOLDOWN")
field(FRST, "ERROR")
#String Severities
field(ZRSV, "NO_ALARM")
field(ONSV, "MINOR")
field(TWSV, "NO_ALARM")
field(THSV, "MINOR")
field(FRSV, "MAJOR")
}
record(ai, "${P}:IP${N}:PumpSize")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getPumpSize(${ADDR},${S1}) ${PORT}")
field(SCAN, "1 second")
field(PREC, "0")
field(EGU, "L/S")
}
record(ai, "${P}:IP${N}:PressureFactor")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getPumpPressureFactor(${ADDR},${S1}) ${PORT}")
field(SCAN, "1 second")
field(PREC, "2")
}
record(stringin, "${P}:IP${N}:AutoRestart")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getAutoRestartStr(${ADDR},${S1}) ${PORT}")
field(SCAN, "1 second")
}
record(ai, "${P}:IP${N}:CurrentLimit")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getPumpCurrentLimit(${ADDR},${S1}) ${PORT}")
field(SCAN, "1 second")
field(PREC, "0")
field(EGU, "mA")
}
record(ai, "${P}:IP${N}:GetSetpoint")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getSetpoint(${ADDR},${S1},${S2},${P},${N}) ${PORT}")
field(SCAN, "1 second")
field(PREC, "0")
}
record(ai, "${P}:IP${N}:Relay${S1}OnPressure")
{
field(EGU, "Torr")
}
record(ai, "${P}:IP${N}:Relay${S1}OffPressure")
{
field(EGU, "Torr")
}
record(ai, "${P}:IP${N}:Relay${S1}State")
{
}
record(calcout, "${P}:IP${N}:Relay${S1}OnCalc")
{
field(DTYP, "stream")
field(SCAN, "Passive")
field(INPA, "${P}:IP${N}:Relay${S1}OnPressureSetpoint")
field(INPB, "${P}:IP${N}:Relay${S1}OffPressure")
field(CALC, "0")
field(OUT, "@gamm1.proto SetSetpoint(${ADDR},${S1},${S2}) ${PORT}")
}
record(ao, "${P}:IP${N}:Relay${S1}OnPressureSetpoint")
{
field(FLNK, "${P}:IP${N}:Relay${S1}OnCalc")
field(PREC, "2")
}
record(calcout, "${P}:IP${N}:Relay${S1}OffCalc")
{
field(DTYP, "stream")
field(SCAN, "Passive")
field(INPA, "${P}:IP${N}:Relay${S1}OnPressure")
field(INPB, "${P}:IP${N}:Relay${S1}OffPressureSetpoint")
field(CALC, "0")
field(OUT, "@gamm1.proto SetSetpoint(${ADDR},${S1},${S2}) ${PORT}")
}
record(ao, "${P}:IP${N}:Relay${S1}OffPressureSetpoint")
{
field(FLNK, "${P}:IP${N}:Relay${S1}OffCalc")
field(PREC, "2")
}
record(bo, "${P}:IP${N}:HighVoltageOn")
{
field(DTYP, "stream")
field(OUT, "@gamm1.proto HvTurnOn(${ADDR},${S1}) ${PORT}")
field(SCAN, "Passive")
field(HIGH, "1")
}
record(bo, "${P}:IP${N}:HighVoltageOff")
{
field(DTYP, "stream")
field(OUT, "@gamm1.proto HvTurnOff(${ADDR},${S1}) ${PORT}")
field(SCAN, "Passive")
field(HIGH, "1")
}
- References:
- Support for Gamma Vacuum MPCq ion pump controller over Ethernet Mark Rivers via Tech-talk
- Navigate by Date:
- Prev:
RE: Investigating Archiver Appliance lost events Abdalla Ahmad via Tech-talk
- Next:
Re: Issues with PVXS Mark Rivers via Tech-talk
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
<2026>
- Navigate by Thread:
- Prev:
Re: Support for Gamma Vacuum MPCq ion pump controller over Ethernet LiangChih Chiang via Tech-talk
- Next:
Deployment of the Archiver Appliance LONG FENG via Tech-talk
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
<2026>
|