Support for ZMQ

This commit is contained in:
2024-06-27 09:26:14 +02:00
parent 36eacba046
commit ba405e6967
4 changed files with 28 additions and 4 deletions

View File

@ -1,6 +1,11 @@
from .snap import getSnap from .snap import getSnap
from .snap import saveSnap from .snap import saveSnap
from .snap import loadSnap
from .snap import parseSnapShotReqYAML
from .save import saveDataset from .save import saveDataset
from .save import getDatasetFileName
from .load import loadDataset from .load import loadDataset
from .elog import writeElog from .elog import writeElog
from .slic import SlicScan from .slic import SlicScan
from .doocs import doocsread
from .doocs import doocswrite

View File

@ -57,15 +57,14 @@ def getSnap(pvs=None):
ret={} ret={}
val = epics.caget_many(pvs) val = epics.caget_many(pvs)
for i,pv in enumerate(pvs): for i,pv in enumerate(pvs):
if val[i]: # filter out None values if not val[i] is None: # filter out None values
ret[pv]=float(val[i]) ret[pv]=float(val[i])
# epics.ca.clear_cache()
return ret return ret
def saveSnap(pvs={},label="", comment = "generated by application"): def saveSnap(pvs={},label="", comment = "generated by application",reqfile = "SF_settings.yaml"):
filename = datetime.datetime.now().strftime('/sf/data/applications/snapshot/SF_settings_%Y%m%d_%H%M%S.snap') filename = datetime.datetime.now().strftime('/sf/data/applications/snapshot/SF_settings_%Y%m%d_%H%M%S.snap')
with open(filename,'w') as fid: with open(filename,'w') as fid:
fid.write('#{"labels":["%s"],"comment":"%s", "machine_parms":{}, "save_time": 0.0, "req_file_name": "SF_settings.yaml"}\n' % (label,comment)) fid.write('#{"labels":["%s"],"comment":"%s", "machine_parms":{}, "save_time": 0.0, "req_file_name": "%s"}\n' % (label,comment,reqfile))
for key in pvs.keys(): for key in pvs.keys():
if isinstance(pvs[key],int): if isinstance(pvs[key],int):
fid.write('%s,{"val": %d}\n' % (key,pvs[key])) fid.write('%s,{"val": %d}\n' % (key,pvs[key]))
@ -73,6 +72,21 @@ def saveSnap(pvs={},label="", comment = "generated by application"):
fid.write('%s,{"val": %f}\n' % (key,pvs[key])) fid.write('%s,{"val": %f}\n' % (key,pvs[key]))
elif isinstance(pvs[key],str): elif isinstance(pvs[key],str):
fid.write('%s,{"val": %s}\n' % (key,pvs[key])) fid.write('%s,{"val": %s}\n' % (key,pvs[key]))
return filename
def loadSnap(filename):
res={}
with open(filename,'r') as fid:
lines=fid.readlines()
for line in lines[1:]:
split = line.split(',')
pv = split[0].strip()
val = split[1].split('"val":')[1].split('}')[0]
if '.' in val:
res[pv]=float(val)
else:
res[pv]= val
return res

View File

@ -1,4 +1,5 @@
from .zmqbase import ZMQBase from .zmqbase import ZMQBase
from .serverbase import ServerBase from .serverbase import ServerBase
from .simplecapture import SimpleCapture

View File

@ -36,6 +36,9 @@ class ZMQBase:
self.logger.info("Watchdog server came online") self.logger.info("Watchdog server came online")
self.serverIsOffline=False self.serverIsOffline=False
if check: if check:
if reply['action'] == 'quit':
client.close()
context.term()
return (reply['action'] == 'quit') return (reply['action'] == 'quit')
else: else:
self.logger.warning("Malformed reply from server") self.logger.warning("Malformed reply from server")
@ -49,6 +52,7 @@ class ZMQBase:
if not self.serverIsOffline: if not self.serverIsOffline:
self.logger.info("Watchdog server seems to be offline") self.logger.info("Watchdog server seems to be offline")
self.serverIsOffline=True self.serverIsOffline=True
context.term()
return False return False
# Create new connection # Create new connection