Files
x11ma/script/devices/LEEM2000.py
2020-12-01 10:10:53 +01:00

109 lines
3.7 KiB
Python

import ch.psi.pshell.serial.TcpDevice as TcpDevice
class LEEM2000(TcpDevice):
def __init__(self, name,host="pc14062.psi.ch", port=5566):
TcpDevice.__init__(self, name, host, port)
self.NUMBER_MNEMONICS = 100
self._mnemonics = None
self._names = None
self.high_voltage = Channel("X11MA-ES1-PEEM:UMON", alias = "PEEM high voltage", monitored=True)
def doInitialize(self):
super(LEEM2000, self).doInitialize()
def doUpdate(self):
try:
hv = self.get_high_voltage()
except:
hv = ""
try:
pl = self.get_preset_label()
except:
pl = "unknown" if microscope.client.isConnected() else "offline"
value = "%1.3f | %s" % (hv,pl) if hv!="" or pl!="" else None
self.setCache(value, None)
def send_receive(self, tx, timeout = 1000, retries = 1):
trailer = chr(0)
ret = self.sendReceive(tx+trailer, None,trailer, 0, 1000, 1)
return str(ret[0:-1]).strip()
def get_value(self, name, timeout = 1000, retries = 1):
cmd = "get " + name
ret = self.send_receive(cmd, timeout, retries)
try:
value = float(ret)
return value
except:
self.getLogger().info("Received invalid value for %s: %s" % (name, ret))
return None
def get_mnemonic(self, index, timeout = 1000, retries = 1):
cmd = "mne " + str(index)
return self.send_receive(cmd, timeout, retries)
def _get_mnemonics(self, timeout = 1000, retries = 1):
ret = []
for i in range(self.NUMBER_MNEMONICS):
mne = self.get_mnemonic(i, timeout, retries)
if mne not in [None, '', 'disabled', 'invalid']:
ret.append(mne)
return ret
def get_mnemonics(self, timeout = 1000, retries = 1):
if self._mnemonics is None:
try:
self._mnemonics = self._get_mnemonics(timeout = 1000, retries = 1)
except:
self.getLogger().warning("Error retrieving microscope mnemonics")
return []
return self._mnemonics
def get_mnemonic_values(self, timeout = 1000, retries = 1):
ret = {}
for mnemonic in self.get_mnemonics(timeout, retries):
ret[mnemonic] = self.get_value(mnemonic, timeout, retries)
return ret
def get_name(self, index, timeout = 1000, retries = 1):
cmd = "nam " + str(index)
return self.send_receive(cmd, timeout, retries)
def _get_names(self, timeout = 1000, retries = 1):
ret = []
for i in range(self.NUMBER_MNEMONICS):
mne = self.get_name(i, timeout, retries)
if mne not in [None, '', 'disabled', 'invalid']:
ret.append(mne)
return ret
def get_names(self, timeout = 1000, retries = 1):
if self._names is None:
try:
self._names = self._get_names(timeout = 1000, retries = 1)
except:
self.getLogger().warning("Error retrieving microscope mnemonics")
return []
return self._names
def get_values(self, timeout=1000, retries=1):
ret = {}
for name in self.get_names():
ret[name] = self.get_value(name, timeout, retries)
return ret
def get_preset_label(self, timeout=1000, retries=1):
cmd = "prl"
return self.send_receive(cmd, timeout, retries)
def get_high_voltage(self):
return self.high_voltage.get(False)
add_device (LEEM2000("microscope"), True)
microscope.setPolling(5000)