Files
dev/script/StateCAS.py
2023-05-01 11:28:04 +02:00

50 lines
1.7 KiB
Python

class EpicsServerState(ReadonlyAsyncRegisterBase):
def __init__(self, name, channel, as_string=True):
RegisterBase.__init__(self, name)
self.channel=channel
self.as_string=as_string
self.val = "Unknown"
self.cas = None
self.state_change_listener=None
def doInitialize(self):
super(EpicsServerState, self).doInitialize()
if self.as_string:
self.cas = CAS(self.channel, self, 'string')
else:
self.cas = CAS(self.channel, self, 'byte')
if self.state_change_listener is None:
class StateChangeListener(ContextListener):
def onContextStateChanged(_self, state, former):
self.set(state)
self.state_change_listener = StateChangeListener()
get_context().addListener(self.state_change_listener)
def getSize(self):
if self.as_string:
return 1
else:
return 100
def doClose(self):
if self.state_change_listener:
get_context().removeListener(self.state_change_listener)
if self.cas:
self.cas.close()
self.cas = None
super(EpicsServerState, self).doClose()
def set(self, value):
if self.as_string:
self.onReadout(str(value))
else:
self.onReadout(string_to_list(str(value)))
if "server_state_channel" in globals():
server_state_channel.close()
server_state_channel = EpicsServerState("server_state_channel", "PSHELL_OP:STATE", False)
server_state_channel.initialize()