add sim-server again based on socketserver
- fix ls370test config file + fix issues with frappy_psi.ls370res + add frappy_psi.ls370sim Change-Id: Ie61e3ea01c4b9c7c1286426504e50acf9413a8ba Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/34957 Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch> Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
This commit is contained in:
@ -16,84 +16,38 @@
|
||||
# Module authors:
|
||||
# Markus Zolliker <markus.zolliker@psi.ch>
|
||||
# *****************************************************************************
|
||||
"""a very simple simulator for a LakeShore Model 370"""
|
||||
"""a very simple simulator for LakeShore Models 370 and 372
|
||||
|
||||
reduced to the functionality actually used in e.g. frappy_psi.ls370res
|
||||
"""
|
||||
|
||||
import time
|
||||
from frappy.modules import Communicator
|
||||
|
||||
|
||||
class Ls370Sim(Communicator):
|
||||
CHANNEL_COMMANDS = [
|
||||
('RDGR?%d', '1.0'),
|
||||
('RDGST?%d', '0'),
|
||||
('RDGRNG?%d', '0,5,5,0,0'),
|
||||
('INSET?%d', '1,5,5,0,0'),
|
||||
('FILTER?%d', '1,5,80'),
|
||||
]
|
||||
OTHER_COMMANDS = [
|
||||
('*IDN?', 'LSCI,MODEL370,370184,05302003'),
|
||||
('SCAN?', '3,1'),
|
||||
('*OPC?', '1'),
|
||||
]
|
||||
|
||||
def earlyInit(self):
|
||||
super().earlyInit()
|
||||
self._data = dict(self.OTHER_COMMANDS)
|
||||
for fmt, v in self.CHANNEL_COMMANDS:
|
||||
for chan in range(1,17):
|
||||
self._data[fmt % chan] = v
|
||||
|
||||
def communicate(self, command):
|
||||
self.comLog('> %s' % command)
|
||||
# simulation part, time independent
|
||||
for channel in range(1,17):
|
||||
_, _, _, _, excoff = self._data['RDGRNG?%d' % channel].split(',')
|
||||
if excoff == '1':
|
||||
self._data['RDGST?%d' % channel] = '6'
|
||||
else:
|
||||
self._data['RDGST?%d' % channel] = '0'
|
||||
|
||||
chunks = command.split(';')
|
||||
reply = []
|
||||
for chunk in chunks:
|
||||
if '?' in chunk:
|
||||
reply.append(self._data[chunk])
|
||||
else:
|
||||
for nqarg in (1,0):
|
||||
if nqarg == 0:
|
||||
qcmd, arg = chunk.split(' ', 1)
|
||||
qcmd += '?'
|
||||
else:
|
||||
qcmd, arg = chunk.split(',', nqarg)
|
||||
qcmd = qcmd.replace(' ', '?', 1)
|
||||
if qcmd in self._data:
|
||||
self._data[qcmd] = arg
|
||||
break
|
||||
reply = ';'.join(reply)
|
||||
self.comLog('< %s' % reply)
|
||||
return reply
|
||||
|
||||
|
||||
class Ls372Sim(Communicator):
|
||||
class _Ls37xSim(Communicator):
|
||||
# commands containing %d for the channel number
|
||||
CHANNEL_COMMANDS = [
|
||||
('RDGR?%d', '1.0'),
|
||||
('RDGK?%d', '1.5'),
|
||||
('RDGST?%d', '0'),
|
||||
('RDGRNG?%d', '0,5,5,0,0'),
|
||||
('INSET?%d', '1,5,5,0,0'),
|
||||
('INSET?%d', '1,3,3,0,0'),
|
||||
('FILTER?%d', '1,5,80'),
|
||||
]
|
||||
# commands not related to a channel
|
||||
OTHER_COMMANDS = [
|
||||
('*IDN?', 'LSCI,MODEL372,372184,05302003'),
|
||||
('SCAN?', '3,1'),
|
||||
('PID?1', '10,10,0'),
|
||||
('*OPC?', '1'),
|
||||
]
|
||||
|
||||
def earlyInit(self):
|
||||
super().earlyInit()
|
||||
self._res = {}
|
||||
self._start = time.time()
|
||||
self._data = dict(self.OTHER_COMMANDS)
|
||||
for fmt, v in self.CHANNEL_COMMANDS:
|
||||
for chan in range(1,17):
|
||||
for chan in range(1, 17):
|
||||
self._data[fmt % chan] = v
|
||||
|
||||
def communicate(self, command):
|
||||
@ -105,6 +59,10 @@ class Ls372Sim(Communicator):
|
||||
self._data['RDGST?%d' % channel] = '6'
|
||||
else:
|
||||
self._data['RDGST?%d' % channel] = '0'
|
||||
channel = int(self._data['SCAN?'].split(',', 1)[0])
|
||||
self._res[channel] = channel + (time.time() - self._start) / 3600
|
||||
strvalue = f'{self._res[channel]:g}'
|
||||
self._data['RDGR?%d' % channel] = self._data['RDGK?%d' % channel] = strvalue
|
||||
|
||||
chunks = command.split(';')
|
||||
reply = []
|
||||
@ -112,7 +70,7 @@ class Ls372Sim(Communicator):
|
||||
if '?' in chunk:
|
||||
reply.append(self._data[chunk])
|
||||
else:
|
||||
for nqarg in (1,0):
|
||||
for nqarg in (1, 0):
|
||||
if nqarg == 0:
|
||||
qcmd, arg = chunk.split(' ', 1)
|
||||
qcmd += '?'
|
||||
@ -125,3 +83,16 @@ class Ls372Sim(Communicator):
|
||||
reply = ';'.join(reply)
|
||||
self.comLog('< %s' % reply)
|
||||
return reply
|
||||
|
||||
|
||||
class Ls370Sim(_Ls37xSim):
|
||||
OTHER_COMMANDS = _Ls37xSim.OTHER_COMMANDS + [
|
||||
('*IDN?', 'LSCI,MODEL370,370184,05302003'),
|
||||
]
|
||||
|
||||
|
||||
class Ls372Sim(_Ls37xSim):
|
||||
OTHER_COMMANDS = _Ls37xSim.OTHER_COMMANDS + [
|
||||
('*IDN?', 'LSCI,MODEL372,372184,05302003'),
|
||||
('PID?1', '10,10,0'),
|
||||
]
|
||||
|
Reference in New Issue
Block a user