Here is an example for executing an asynchronous move by a Macro class.
#!/usr/bin/env python
#
# file name: /home/pXXuser/sardanaMacros/MoveMotorSync_class.py
#
"""this module contains some demo code"""
__all__ = ["MoveMotorAsync_class"]
from sardana.macroserver.macro import Macro, Type
import time
import PyTango
class MoveMotorAsync_class(Macro):
"""moves a motor to a target position, asynchronously"""
param_def = [
[ "mot1", Type.Moveable, None, "the motor to be moved" ],
[ "target", Type.Float, None, "the target position" ],
]
def run(self, mot1, target):
self.output( dir(mot1))
self.output( "MoveMotorAsync: %s is at %g %s " %
(mot1.name, mot1.position, mot1.state))
mot1.write_attribute( "position", target)
while mot1.state == PyTango.DevState.MOVING:
time.sleep(0.1)
self.output( "MoveMotorAsync: %s now at %g %s " %
(mot1.name,
mot1.position,
mot1.state))
self.output( "MoveMotorAsync: %s finally at %g %s " %
(mot1.name,
mot1.position,
mot1.state))
Notice that mot1.write_attribute( "position", target) has been used to move the motor. We use this syntax and not mot1.position = target because the latter form was partially not supported.