This commit is contained in:
50
script/StateCAS.py
Normal file
50
script/StateCAS.py
Normal file
@@ -0,0 +1,50 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user