We assume that a VcExecutor needs a variable that is incremented for every scan point, sindex. The pre-scan and the pre-move hooks maintain the Macroserver environment variable sindex. Here is an example code:
class gh_pre_scan(Macro): ”' ... ”' def run( self): self.output( "general_features.pre_scan hook") # # initialize sindex # self.setEnv( "sindex", 0) # ... class gh_pre_move(Macro): def run( self): self.setEnv( "sindex", self.getEnv( "sindex") + 1) self.output( "general_features.pre_move hook, sindex %d" % self.getEnv( "sindex")) return True
The hooks have to be enabled by:
spock> gh_enable gh_pre_scan pre-scan spock> gh_enable gh_pre_move pre-move
Here is an example of a VcExecutor using sindex:
#!/bin/env python # # this Vc counter returns the value of sindex # import HasyUtils import PyTango class VC: def __init__(self, devicename = None): print( " VC.init, sindex.py") pass # # dev_state # def dev_state( self): return PyTango.DevState.ON # # Counts # def read_Counts( self): argout = HasyUtils.getEnv( "sindex") if argout is None: argout = -1. return float( argout) def write_Counts( self, argin): return 1 # # Offset # def read_Offset( self): return 0 def write_Offset( self, argin): return 1 # # reset # def Reset(self): return True