Experimental Physics and Industrial Control System
Hi At SNS we use the DIGITEL QPC Controller from Gamma vacuum. We use the serial interface via a digi/moxa. Attached is our streamdevice interface (i. e. , xxx. proto and xxx. template) -Brad On Thu, 2024-02-22 at 00: 50 +0000, Mrinal Bera via Tech-talk
ZjQcmQRYFpfptBannerStart
This Message Is From an External Sender
This message came from outside your organization.
ZjQcmQRYFpfptBannerEnd
Hi
At SNS we use the DIGITEL QPC Controller from Gamma vacuum.
We use the serial interface via a digi/moxa.
Attached is our streamdevice interface (i.e., xxx.proto and
xxx.template)
-Brad
On Thu, 2024-02-22 at 00:50 +0000, Mrinal Bera via Tech-talk wrote:
> Did anybody write EPICS support for the following devices? 1) Gamma
> DIGITEL MPCQ Ion Pump
> Controller(https: //www. gammavacuum. com/products/digitel-
> controllers/3335/digitel-mpcq?number=MPCQ1PS1U1SSNI&c=17669) 2)
> Televac MX200 Vacuum Controller
> ZjQcmQRYFpfptBannerStart
>
>
>
>
>
> This Message Is From an External Sender
>
>
>
> This message came from outside your organization.
>
>
>
>
>
>
>
> ZjQcmQRYFpfptBannerEnd
>
> Did anybody write EPICS support for the following devices?
> 1) Gamma DIGITEL MPCQ Ion Pump
> Controller(https://urldefense.us/v3/__https://www.gammavacuum.com/products/digitel-controllers/3335/digitel-mpcq?number=MPCQ1PS1U1SSNI&c=17669__;!!G_uCfscf7eWS!f8Q0x8Sls4WxlAYUtpjvd_eo8qBt8H5h0wQ9juV7-pF2qIeBYoV1fN16PfTDPlKmDrKG3zD1vUBImH6XruCN$
> )
> 2) Televac MX200 Vacuum Controller
> (https://urldefense.us/v3/__https://www.frederickscompany.com/products/mx200/__;!!G_uCfscf7eWS!f8Q0x8Sls4WxlAYUtpjvd_eo8qBt8H5h0wQ9juV7-pF2qIeBYoV1fN16PfTDPlKmDrKG3zD1vUBImIAkN4EW$)
>
> Thanks,
> Mrinal
>
> Mrinal Kanti Bera, PHD
> Beamline Scientist and Research Associate Professor
> NSF’s ChemMatCARS, Pritzker School of Molecular Engineering,
> The University of Chicago
> 9700 S. Cass Ave Bldg 434D
> Argonne, IL-60439
> United States
> Phone: +1-630-252-0472
>
>
>
record(stringin, "${P}:IP${N}:Model")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getModel(${ADDR}) GAMC")
field(SCAN, "1 second")
}
record(stringin, "${P}:IP${N}:FirmwareVersion")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getFWV(${ADDR}) GAMC")
field(SCAN, "1 second")
}
record(ai, "${P}:IP${N}:Current")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getCurrent(${ADDR},${S1}) GAMC")
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}) GAMC")
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}) GAMC")
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}) GAMC")
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}) GAMC")
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}) GAMC")
field(SCAN, "1 second")
field(PREC, "2")
}
record(stringin, "${P}:IP${N}:AutoRestart")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getAutoRestartStr(${ADDR},${S1}) GAMC")
field(SCAN, "1 second")
}
record(ai, "${P}:IP${N}:CurrentLimit")
{
field(DTYP, "stream")
field(INP, "@gamm1.proto getPumpCurrentLimit(${ADDR},${S1}) GAMC")
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}) GAMC")
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}) GAMC")
}
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}) GAMC")
}
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}) GAMC")
field(SCAN, "Passive")
field(HIGH, "1")
}
record(bo, "${P}:IP${N}:HighVoltageOff")
{
field(DTYP, "stream")
field(OUT, "@gamm1.proto HvTurnOff(${ADDR},${S1}) GAMC")
field(SCAN, "Passive")
field(HIGH, "1")
}
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>";
}
- Replies:
- Re: [EXTERNAL] Epics support for DIGITEL MPCQ Ion Pump Controller and Televac MX 200 Vacuum Controller Mrinal Bera via Tech-talk
- References:
- Epics support for DIGITEL MPCQ Ion Pump Controller and Televac MX 200 Vacuum Controller Mrinal Bera via Tech-talk
- Navigate by Date:
- Prev:
How to read array value with Channel Access compound data types Wang, Lin via Tech-talk
- Next:
Any chance people can get rid of this extra "feature" Maren Purves 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
- Navigate by Thread:
- Prev:
RE: Epics support for DIGITEL MPCQ Ion Pump Controller and Televac MX 200 Vacuum Controller Abdalla Ahmad via Tech-talk
- Next:
Re: [EXTERNAL] Epics support for DIGITEL MPCQ Ion Pump Controller and Televac MX 200 Vacuum Controller Mrinal Bera 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