SFELPHOTON-1128: debug stup-and-go motion(2)
This commit is contained in:
@@ -45,7 +45,7 @@ class MotionBase:
|
|||||||
else:
|
else:
|
||||||
ServoPeriod=comm.gpascii.servo_period*1000
|
ServoPeriod=comm.gpascii.servo_period*1000
|
||||||
|
|
||||||
self.meta={'srv_per':ServoPeriod,'pt2pt_time':40,'sync_flag':0,'sync_mode':2}
|
self.meta={'srv_per':ServoPeriod,'fel_per':10,'sync_flag':0,'sync_mode':2}
|
||||||
self.meta.update(kwargs)
|
self.meta.update(kwargs)
|
||||||
|
|
||||||
def setup_sync(self, crdId=1, prgId=2,verbose=False, timeOfs=0.,timeCor=0.):
|
def setup_sync(self, crdId=1, prgId=2,verbose=False, timeOfs=0.,timeCor=0.):
|
||||||
@@ -67,11 +67,11 @@ class MotionBase:
|
|||||||
1 : simulated start and real frame trigger
|
1 : simulated start and real frame trigger
|
||||||
2 : real start and simulated frame trigger
|
2 : real start and simulated frame trigger
|
||||||
3 : simulated start and frame trigger
|
3 : simulated start and frame trigger
|
||||||
pt2pt_time : time point to point (needed sor sync code)
|
fel_per : FEL-period: time FEL-pulse to FEL-pulse in ms (needed for sync code)
|
||||||
'''
|
'''
|
||||||
sync_mode=self.meta['sync_mode']
|
sync_mode=self.meta['sync_mode']
|
||||||
sync_flag=self.meta['sync_flag']
|
sync_flag=self.meta['sync_flag']
|
||||||
pt2pt_time=self.meta['pt2pt_time']
|
fel_per=self.meta['fel_per']
|
||||||
|
|
||||||
_log.info({0:'no sync at all',1:'sync at start only',2:'sync on each shot'}[sync_mode])
|
_log.info({0:'no sync at all',1:'sync at start only',2:'sync on each shot'}[sync_mode])
|
||||||
if sync_mode!=0:
|
if sync_mode!=0:
|
||||||
@@ -129,7 +129,7 @@ Coord[1].Q[0]=-3 //motion program started and waits. Arm(-2) is done in triggerS
|
|||||||
sftp.chmod(dst, 0o755)
|
sftp.chmod(dst, 0o755)
|
||||||
cmd = 'LD_LIBRARY_PATH=/opt/ppmac/libppmac/ ' + dst
|
cmd = 'LD_LIBRARY_PATH=/opt/ppmac/libppmac/ ' + dst
|
||||||
#cmd+=' %d %g %g %g'%(mode,pt2pt_time,timeOfs,timeCor)
|
#cmd+=' %d %g %g %g'%(mode,pt2pt_time,timeOfs,timeCor)
|
||||||
cmd+=' %d %g %g'%(mode,pt2pt_time+timeCor,timeOfs)
|
cmd+=' %d %g %g'%(mode,fel_per+timeCor,timeOfs)
|
||||||
self.cmdSync = cmd
|
self.cmdSync = cmd
|
||||||
print ('starting '+cmd)
|
print ('starting '+cmd)
|
||||||
self.syncShell=comm.shell_channel(cmd)
|
self.syncShell=comm.shell_channel(cmd)
|
||||||
|
|||||||
@@ -727,7 +727,7 @@ class ShapePath(MotionBase):
|
|||||||
_log.warning('missing motion sync code!')
|
_log.warning('missing motion sync code!')
|
||||||
# this uses Coord[1].Tm and limits with MaxSpeed
|
# this uses Coord[1].Tm and limits with MaxSpeed
|
||||||
if mode in (1,3,4,5): #### pvt motion
|
if mode in (1,3,4,5): #### pvt motion
|
||||||
pt2pt_time=self.meta['pt2pt_time']
|
pt2pt_time=self.meta['fel_per']
|
||||||
ts=self.meta['srv_per']
|
ts=self.meta['srv_per']
|
||||||
scale=kwargs.get('scale', 1.)
|
scale=kwargs.get('scale', 1.)
|
||||||
cnt=kwargs.get('cnt', 1) # move path multiple times
|
cnt=kwargs.get('cnt', 1) # move path multiple times
|
||||||
@@ -1024,27 +1024,27 @@ if __name__=='__main__':
|
|||||||
#sp = ShapePath(comm, gather, args.verbose)
|
#sp = ShapePath(comm, gather, args.verbose)
|
||||||
|
|
||||||
# direct start
|
# direct start
|
||||||
sp = ShapePath(comm, gather, args.verbose,sync_mode=0,pt2pt_time=10)
|
sp = ShapePath(comm, gather, args.verbose,fel_per=10,sync_mode=0)
|
||||||
|
|
||||||
#simulated start and frame trigger no sync
|
#simulated start and frame trigger no sync
|
||||||
#sp = ShapePath(comm, gather, args.verbose,sync_mode=1,sync_flag=3)
|
#sp = ShapePath(comm, gather, args.verbose,fel_per=10,sync_mode=1,sync_flag=3)
|
||||||
|
|
||||||
#simulated start and frame trigger with sync
|
#simulated start and frame trigger with sync
|
||||||
#sp = ShapePath(comm, gather, args.verbose,sync_mode=2,sync_flag=3)
|
#sp = ShapePath(comm, gather, args.verbose,fel_per=10,sync_mode=2,sync_flag=3)
|
||||||
|
|
||||||
#simulated start real frame trigger no sync
|
#simulated start real frame trigger no sync
|
||||||
#sp = ShapePath(comm, gather, args.verbose,sync_mode=1,sync_flag=1)
|
#sp = ShapePath(comm, gather, args.verbose,fel_per=10,sync_mode=1,sync_flag=1)
|
||||||
|
|
||||||
#simulated start real frame trigger with sync
|
#simulated start real frame trigger with sync
|
||||||
#sp = ShapePath(comm, gather, args.verbose,sync_mode=2,sync_flag=1)
|
#sp = ShapePath(comm, gather, args.verbose,fel_per=10,sync_mode=2,sync_flag=1)
|
||||||
|
|
||||||
fn='/tmp/shapepath'
|
fn='/tmp/shapepath'
|
||||||
#fn =unique_filename('ShapePathAnalyser/records/19_01_24/spiral')
|
#fn =unique_filename('ShapePathAnalyser/records/19_01_24/spiral')
|
||||||
|
|
||||||
# Gather.MaxLines=116508
|
# Gather.MaxLines=116508
|
||||||
# ts=0.2ms
|
# ts=0.2ms
|
||||||
# max_num_points=(MaxLines*ts-1000ms)/(+acq_per*pt2pt_time*ts)
|
# max_num_points=(MaxLines*ts-1000ms)/(+acq_per*fel_per*ts)
|
||||||
# pt2pt_time acq_per maxpts
|
# fel_per acq_per maxpts
|
||||||
# 40ms 1 555
|
# 40ms 1 555
|
||||||
# 40ms 2 1135
|
# 40ms 2 1135
|
||||||
# 40ms 3 1715
|
# 40ms 3 1715
|
||||||
@@ -1081,12 +1081,24 @@ if __name__=='__main__':
|
|||||||
#gp.spiral(rStart=100,rInc=10,numSeg=4,numCir=32, ofs=(0, 0))
|
#gp.spiral(rStart=100,rInc=10,numSeg=4,numCir=32, ofs=(0, 0))
|
||||||
#gp.closed_shifted()
|
#gp.closed_shifted()
|
||||||
#gp.grid(w=10,h=15,pitch=120,rnd=0,ofs=(-1000,-1200));gp.sort(mode=0,grp_sz=10)
|
#gp.grid(w=10,h=15,pitch=120,rnd=0,ofs=(-1000,-1200));gp.sort(mode=0,grp_sz=10)
|
||||||
#gp.grid(w=10,h=15,pitch=120,rnd=0,ofs=(-1000,-1200));gp.sort(grp_sz=15)
|
gp.grid(w=10,h=15,pitch=120,rnd=0,ofs=(-1000,-1200));gp.sort(grp_sz=15)
|
||||||
|
|
||||||
# for motion mode 4,5
|
# for motion mode 4,5
|
||||||
grid={'pos':(-1000, -1200), 'pitch':(120, 120), 'count':(10, 11)}
|
grid={'pos':(-1000, -1200), 'pitch':(120, 120), 'count':(10, 15)}
|
||||||
|
|
||||||
sp.meta['pt2pt_time']=10
|
# mode:0 unused
|
||||||
|
# mode:1 pvt motion
|
||||||
|
# mode:2 unused
|
||||||
|
# mode:3 pvt motion using inverse fft velocity
|
||||||
|
# mode:4 pvt motion short code using grid parameters
|
||||||
|
# mode:5 pvt motion short code using grid parameters. Instead of continous motion it moves and waits as give in the parameter time
|
||||||
|
mode=3
|
||||||
|
if mode==5:
|
||||||
|
tmove=20; twait=100
|
||||||
|
pt2pt_time=tmove+twait
|
||||||
|
else:
|
||||||
|
pt2pt_time=sp.meta['fel_per']
|
||||||
|
sp.meta['pt2pt_time']=pt2pt_time
|
||||||
try:
|
try:
|
||||||
num_pts=gp.points.shape[0]
|
num_pts=gp.points.shape[0]
|
||||||
except AttributeError as e:
|
except AttributeError as e:
|
||||||
@@ -1099,7 +1111,7 @@ if __name__=='__main__':
|
|||||||
gtMaxLn=int(sp.comm.gpascii.get_variable('Gather.MaxLines')) # 116508
|
gtMaxLn=int(sp.comm.gpascii.get_variable('Gather.MaxLines')) # 116508
|
||||||
|
|
||||||
ovhdTime=100
|
ovhdTime=100
|
||||||
acq_per=int(np.ceil((sp.meta['pt2pt_time']*num_pts+ovhdTime)/(gtMaxLn*sp.meta['srv_per'])))
|
acq_per=int(np.ceil((pt2pt_time*num_pts+ovhdTime)/(gtMaxLn*sp.meta['srv_per'])))
|
||||||
if args.verbose&0x01:
|
if args.verbose&0x01:
|
||||||
_log.info(f'''\
|
_log.info(f'''\
|
||||||
Gather.MaxLines:{gtMaxLn}
|
Gather.MaxLines:{gtMaxLn}
|
||||||
@@ -1111,21 +1123,14 @@ if __name__=='__main__':
|
|||||||
sp.setup_sync(verbose=args.verbose&0x40,timeOfs=0.03,timeCor=0.0005)
|
sp.setup_sync(verbose=args.verbose&0x40,timeOfs=0.03,timeCor=0.0005)
|
||||||
sp.setup_coord_trf() # reset to shape path system
|
sp.setup_coord_trf() # reset to shape path system
|
||||||
|
|
||||||
# mode:0 unused
|
|
||||||
# mode:1 pvt motion
|
|
||||||
# mode:2 unused
|
|
||||||
# mode:3 pvt motion using inverse fft velocity
|
|
||||||
# mode:4 pvt motion short code using grid parameters
|
|
||||||
# mode:5 pvt motion short code using grid parameters. Instead of continous motion it moves and waits as give in the parameter time
|
|
||||||
mode=4
|
|
||||||
if mode==1:
|
if mode==1:
|
||||||
sp.setup_motion(fnPrg=fn+'.prg',scale=1.,cnt=1,dwell=100,mode=mode,points=sp.mot_pts)
|
sp.setup_motion(fnPrg=fn+'.prg',scale=1.,cnt=1,dwell=100,mode=mode,points=gp.points)
|
||||||
elif mode==3:
|
elif mode==3:
|
||||||
sp.setup_motion(fnPrg=fn+'.prg',scale=1.,cnt=1,dwell=100,mode=mode,points=sp.mot_pts)
|
sp.setup_motion(fnPrg=fn+'.prg',scale=1.,cnt=1,dwell=100,mode=mode,points=gp.points)
|
||||||
elif mode==4:
|
elif mode==4:
|
||||||
sp.setup_motion(fnPrg=fn+'.prg',scale=1.,cnt=1,dwell=100,mode=4,grid=grid)
|
sp.setup_motion(fnPrg=fn+'.prg',scale=1.,cnt=1,dwell=100,mode=4,grid=grid)
|
||||||
elif mode==5:
|
elif mode==5:
|
||||||
sp.setup_motion(fnPrg=fn+'.prg',scale=1.,cnt=1,dwell=100,mode=5,tmove=20 ,twait=30, grid=grid)
|
sp.setup_motion(fnPrg=fn+'.prg',scale=1.,cnt=1,dwell=100,mode=5,tmove=tmove ,twait=twait, grid=grid)
|
||||||
|
|
||||||
sp.homing() #homing if needed
|
sp.homing() #homing if needed
|
||||||
sp.run() #start motion program
|
sp.run() #start motion program
|
||||||
|
|||||||
Reference in New Issue
Block a user