from ...core.devio import backend #@UnresolvedImport
_depends_local=["...core.devio.backend"]
[docs]class PfeifferError(RuntimeError):
"""
Pfiffer devices reading error.
"""
pass
[docs]class TPG261(backend.IBackendWrapper):
"""
TPG 261 series pressure gauge.
Args:
conn: serial connection parameters (usually port or a tuple containing port and baudrate)
"""
def __init__(self, conn):
conn=backend.SerialDeviceBackend.combine_conn(conn,("COM1",9600))
instr=backend.SerialDeviceBackend(conn,term_write="",term_read="\r\n")
backend.IBackendWrapper.__init__(self,instr)
self._add_status_node("pressure",self.get_pressure,ignore_error=(PfeifferError,))
self._add_status_node("channel_status",self.get_channel_status)
try:
self.query("BAU")
except self.instr.Error as e:
self.close()
raise self.instr.BackendOpenError(e)
[docs] def comm(self, msg):
"""Send a command to the device"""
self.instr.write(msg+"\r\n")
rsp=self.instr.readline()
if len(rsp)==1:
if rsp[:1]==b"\x15":
raise PfeifferError("device returned negative acknowledgement")
elif rsp[:1]==b"\x06":
return
raise PfeifferError("device returned unexpected acknowledgement: {}".format(rsp))
[docs] def query(self, msg):
"""Send a query to the device and return the reply"""
self.comm(msg)
self.instr.write(b"\05")
return self.instr.readline()
_pstats=["OK","underrange","overrange","sensor error","sensor off","no sensor","ID error"]
[docs] def get_channel_status(self, channel=1):
resp=self.query("PR{}".format(channel))
stat=resp.split(b",")[0].strip()
return self._pstats[int(stat)]
[docs] def get_pressure(self, channel=1):
"""Get pressure at a given channel"""
resp=self.query("PR{}".format(channel))
stat,press=[s.strip() for s in resp.split(b",")]
stat=int(stat)
if stat:
raise PfeifferError("pressure reading error: status {} ({})".format(stat,self._pstats[stat]))
return float(press)