|
|
Experimental Physics and
| ||||||||||||||||
|
|
This Message Is From an External Sender
This message came from outside your organization.
Hi Brad and Abdalla,
Thank you for your template and protocol files. I had to modify the files a little bit to make it work for MPCQ Pump. Best regards, Mrinal > On Feb 22, 2024, at 6:00 AM, Webb, Brad <[email protected]> wrote: > > 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://www.gammavacuum.com/products/digitel-controllers/3335/digitel-mpcq?number=MPCQ1PS1U1SSNI&c=17669 >> ) >> 2) Televac MX200 Vacuum Controller >> (https://www.frederickscompany.com/products/mx200/) >> >> 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>";
}
| ||||||||||||||||
| ANJ, 19 Mar 2026 |
·
Home
·
News
·
About
·
Talk
·
Base
·
Modules
·
Extensions
·
· Distributions · Download · Documents · Links · Licensing · |