cleanup helicalscan
This commit is contained in:
@@ -661,7 +661,7 @@ class HelicalScan:
|
|||||||
ax.set_zlim(v[1]-l2, v[1]+l2)
|
ax.set_zlim(v[1]-l2, v[1]+l2)
|
||||||
|
|
||||||
|
|
||||||
def gen_coord_trf_code(self,file=None,host=None):
|
def gen_coord_trf_code(self):
|
||||||
param=self.param
|
param=self.param
|
||||||
prg = []
|
prg = []
|
||||||
prg.append('''
|
prg.append('''
|
||||||
@@ -771,122 +771,10 @@ open inverse
|
|||||||
close
|
close
|
||||||
''')
|
''')
|
||||||
|
|
||||||
# ****** TESTING CODE ******
|
self.download(prg,mode=0,file='/tmp/coordTrf.cfg')
|
||||||
#this is testcode to check linear coordinate transformation and
|
|
||||||
#simple (same as before) fwd and inv-kinematics
|
|
||||||
#When using pvt mode they do not behave the same:
|
|
||||||
#(Power PMAC Users Manual P648)
|
|
||||||
#Enabling Move Segmentation:
|
|
||||||
#If segmentation mode is disabled, a circle-mode move will execute as a linear-mode move
|
|
||||||
#directly from the start point to the end point. Segmentation mode must also be enabled to use the
|
|
||||||
#special lookahead buffer, tool-radius compensation, and kinematic-subroutine calculations.
|
|
||||||
|
|
||||||
#set ct to:
|
|
||||||
# 1 for simple linear transformation
|
|
||||||
# 2 simple linear fwd/inv kinematics
|
|
||||||
ct=0;
|
|
||||||
if ct==1:
|
|
||||||
#simple linear transformation
|
|
||||||
prg = []
|
|
||||||
prg.append('''
|
|
||||||
//motors CX CZ RY FY
|
|
||||||
// 4 5 3 1
|
|
||||||
&1
|
|
||||||
a
|
|
||||||
#4->0
|
|
||||||
#5->0
|
|
||||||
#3->0
|
|
||||||
#1->0
|
|
||||||
|
|
||||||
#4->X
|
def gen_prog(self,prgId=2,mode=0,**kwargs):
|
||||||
#5->Z
|
|
||||||
#3->B
|
|
||||||
#1->Y
|
|
||||||
''')
|
|
||||||
elif ct==2:
|
|
||||||
#simple linear fwd/inv kinematics
|
|
||||||
prg = []
|
|
||||||
prg.append('''
|
|
||||||
// Set the motors as inverse kinematic axes in CS 1
|
|
||||||
//motors CX CZ RY FY
|
|
||||||
// 4 5 3 1
|
|
||||||
&1
|
|
||||||
a
|
|
||||||
#4->0
|
|
||||||
#5->0
|
|
||||||
#3->0
|
|
||||||
#1->0
|
|
||||||
|
|
||||||
#4->I
|
|
||||||
#5->I
|
|
||||||
#3->I
|
|
||||||
#1->I
|
|
||||||
|
|
||||||
open forward
|
|
||||||
//define(KinVelEna='D0',KinAxisUsed='D0')
|
|
||||||
define(qCX='L4', qCZ='L5', qW='L3', qFY='L1')
|
|
||||||
define(DX='C6', DZ='C8', W='C1', Y='C7')
|
|
||||||
//coord X Z B Y
|
|
||||||
send 1"fwd_inp(%f) %f %f %f %f\\n",D0,qCX,qCZ,qW,qFY
|
|
||||||
if(D0>0) callsub 100
|
|
||||||
D0=$000001c2; //B=$2 X=$40 Y=$80 Z=$100 hex(2+int('40',16)+int('80',16)+int('100',16)) -> 0x1c2
|
|
||||||
N100:
|
|
||||||
DX=qCX
|
|
||||||
DZ=qCZ
|
|
||||||
W=qW
|
|
||||||
Y=qFY
|
|
||||||
send 1"fwd_res %f %f %f %f\\n",DX,DZ,W,Y
|
|
||||||
P1001+=1
|
|
||||||
close
|
|
||||||
|
|
||||||
open inverse
|
|
||||||
//coord X Z B Y
|
|
||||||
define( DX='C6' , DZ='C8' , W='C1', Y='C7')
|
|
||||||
define(vDX='C38', vDZ='C40', vW='C33', vY='C39')
|
|
||||||
|
|
||||||
//motor q4 q5 q3 q1
|
|
||||||
define( qCX='L4', qCZ='L5', qW='L3', qFY='L1')
|
|
||||||
define(vqCX='R4', vqCZ='R5', vqW='R3', vqFY='R1')
|
|
||||||
if(D0>0)
|
|
||||||
send 1"inv_inp(%f) %f:%f %f:%f %f:%f %f:%f\\n",D0,DX,vDX,DZ,vDZ,W,vW,Y,vY
|
|
||||||
else
|
|
||||||
send 1"inv_inp(%f) %f %f %f %f\\n",D0,DX,DZ,W,Y
|
|
||||||
|
|
||||||
qCX=DX
|
|
||||||
qCZ=DZ
|
|
||||||
qW=W
|
|
||||||
qFY=Y
|
|
||||||
if(D0>0)
|
|
||||||
{ // calculate velocities for PVT motion
|
|
||||||
vqCX=vDX
|
|
||||||
vqCZ=vDZ
|
|
||||||
vqW=vW
|
|
||||||
vqFY=vY
|
|
||||||
send 1"inv_res %f:%f %f:%f %f:%f %f:%f\\n",qCX,vqCX,qCZ,vqCZ,qW,vqW,qFY,vqFY
|
|
||||||
}
|
|
||||||
else
|
|
||||||
send 1"inv_res %f %f %f %f\\n",qCX,qCZ,qW,qFY
|
|
||||||
|
|
||||||
P1002+=1
|
|
||||||
close
|
|
||||||
''')
|
|
||||||
|
|
||||||
if self.args.verbose & 4:
|
|
||||||
for ln in prg:
|
|
||||||
print(ln)
|
|
||||||
if file is not None:
|
|
||||||
fh = open(file, 'w')
|
|
||||||
fh.write('\n'.join(prg))
|
|
||||||
fh.close()
|
|
||||||
if host is not None:
|
|
||||||
cmd = 'gpasciiCommander --host ' + host + ' ' + file
|
|
||||||
print(cmd)
|
|
||||||
p = sprc.Popen(cmd, shell=True) # , stdout=sprc.PIPE, stderr=sprc.STDOUT)
|
|
||||||
# res=p.stdout.readlines(); print res
|
|
||||||
retval = p.wait()
|
|
||||||
# gather -u /var/ftp/gather/out.txt
|
|
||||||
|
|
||||||
def gen_prog(self,prgId=2,fnPrg=None,host=None,mode=0,**kwargs):
|
|
||||||
'''
|
'''
|
||||||
kwargs:
|
kwargs:
|
||||||
acq_per : acquire period: acquire data all acq_per servo loops (default=1)
|
acq_per : acquire period: acquire data all acq_per servo loops (default=1)
|
||||||
@@ -1052,22 +940,35 @@ close
|
|||||||
prg.append(' P1000=1')
|
prg.append(' P1000=1')
|
||||||
prg.append('close')
|
prg.append('close')
|
||||||
prg.append('&1\nb%dr\n'%prgId)
|
prg.append('&1\nb%dr\n'%prgId)
|
||||||
if self.args.verbose & 4:
|
|
||||||
|
self.download(prg,mode=3,file='/tmp/prg.cfg')
|
||||||
|
|
||||||
|
|
||||||
|
def download(self,prg=None,mode=0,file='/tmp/helicalscan.cfg'):
|
||||||
|
'''
|
||||||
|
mode bits:
|
||||||
|
bit 0 (1): wait execution finished (P1000==1)
|
||||||
|
bit 1 (2): gather and save data
|
||||||
|
bit 2 (4): ...
|
||||||
|
'''
|
||||||
|
host=self.args.host
|
||||||
|
if prg is not None and self.args.verbose & 4:
|
||||||
for ln in prg:
|
for ln in prg:
|
||||||
print(ln)
|
print(ln)
|
||||||
|
|
||||||
if fnPrg is not None:
|
if file is not None and prg is not None:
|
||||||
fh=open(fnPrg,'w')
|
fh=open(file,'w')
|
||||||
fh.write('\n'.join(prg))
|
fh.write('\n'.join(prg))
|
||||||
fh.close()
|
fh.close()
|
||||||
if host is not None:
|
if host is not None:
|
||||||
# ***download and start the program***
|
# ***download and start the program***
|
||||||
cmd ='gpasciiCommander --host '+host+' '+ fnPrg
|
cmd ='gpasciiCommander --host '+host+' '+ file
|
||||||
print(cmd)
|
print(cmd)
|
||||||
p = sprc.Popen(cmd, shell=True)#, stdout=sprc.PIPE, stderr=sprc.STDOUT)
|
p = sprc.Popen(cmd, shell=True)#, stdout=sprc.PIPE, stderr=sprc.STDOUT)
|
||||||
#res=p.stdout.readlines(); print res
|
#res=p.stdout.readlines(); print res
|
||||||
retval = p.wait()
|
retval = p.wait()
|
||||||
|
|
||||||
|
if mode &1:
|
||||||
# ***wait program finished P1000=1***
|
# ***wait program finished P1000=1***
|
||||||
com=GpasciiCommunicator().connect(host,prompt='# ')
|
com=GpasciiCommunicator().connect(host,prompt='# ')
|
||||||
ack=GpasciiCommunicator.gpascii_ack
|
ack=GpasciiCommunicator.gpascii_ack
|
||||||
@@ -1084,6 +985,7 @@ close
|
|||||||
#print val
|
#print val
|
||||||
time.sleep(.2)
|
time.sleep(.2)
|
||||||
sys.stdout.write('.');sys.stdout.flush()
|
sys.stdout.write('.');sys.stdout.flush()
|
||||||
|
if mode &2:
|
||||||
fnRmt = '/var/ftp/gather/out.txt'
|
fnRmt = '/var/ftp/gather/out.txt'
|
||||||
fnLoc = '/tmp/gather.txt'
|
fnLoc = '/tmp/gather.txt'
|
||||||
print('\ngather data to %s...' % fnRmt)
|
print('\ngather data to %s...' % fnRmt)
|
||||||
@@ -1152,14 +1054,16 @@ Examples:'''+''.join(map(lambda s:cmd+s, exampleCmd))+'\n '
|
|||||||
|
|
||||||
parser.add_option('-v', '--verbose', type="int", dest='verbose', help='verbosity bits (see below)', default=0)
|
parser.add_option('-v', '--verbose', type="int", dest='verbose', help='verbosity bits (see below)', default=0)
|
||||||
parser.add_option('-n', '--dryrun', action='store_true', help='dryrun to stdout')
|
parser.add_option('-n', '--dryrun', action='store_true', help='dryrun to stdout')
|
||||||
parser.add_option('--xy', action='store_true', help='sort x,y instead y,x')
|
|
||||||
parser.add_option('--cfg', help='config file containing json configuration structure')
|
parser.add_option('--cfg', help='config file containing json configuration structure')
|
||||||
|
parser.add_option('--host', help='hostname')
|
||||||
|
|
||||||
(args, other)=parser.parse_args()
|
(args, other)=parser.parse_args()
|
||||||
args.other=other
|
args.other=other
|
||||||
|
|
||||||
hs=HelicalScan(args)
|
hs=HelicalScan(args)
|
||||||
hs.args.verbose = 255
|
hs.args.verbose = 255
|
||||||
|
hs.args.host='MOTTEST-CPPM-CRM0485'
|
||||||
|
#SAR-CPPM-EXPMX1 MOTTEST-CPPM-CRM0485
|
||||||
#hs.sequencer()
|
#hs.sequencer()
|
||||||
#hs.test_find_rot_ctr()
|
#hs.test_find_rot_ctr()
|
||||||
#hs.test_find_rot_ctr(n=5. ,per=1.,bias=2.31,ampl=4.12,phi=24.6)
|
#hs.test_find_rot_ctr(n=5. ,per=1.,bias=2.31,ampl=4.12,phi=24.6)
|
||||||
@@ -1169,20 +1073,19 @@ Examples:'''+''.join(map(lambda s:cmd+s, exampleCmd))+'\n '
|
|||||||
#hs.interactive_cx_cz_w_fy()
|
#hs.interactive_cx_cz_w_fy()
|
||||||
#hs.interactive_dx_dz_w_y()
|
#hs.interactive_dx_dz_w_y()
|
||||||
|
|
||||||
#SAR-CPPM-EXPMX1 MOTTEST-CPPM-CRM0485
|
hs.download(file='/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/cfg/sim_8_motors.cfg')
|
||||||
hs.gen_coord_trf_code('/tmp/helicalscan.cfg','MOTTEST-CPPM-CRM0485')
|
hs.gen_coord_trf_code()
|
||||||
#hs.gen_prog(file='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=-1)
|
#hs.gen_prog(mode=-1)
|
||||||
#hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=0,cntHor=1,cntVert=3,wRng=(120000,120000))
|
#hs.gen_prog(mode=0,cntHor=1,cntVert=3,wRng=(120000,120000))
|
||||||
#hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=0,cntHor=1)
|
#hs.gen_prog(mode=0,cntHor=1)
|
||||||
#hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=0)
|
#hs.gen_prog(mode=0)
|
||||||
#hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=0,cntHor=1,cntVert=5,wRng=(120000,120000))
|
#hs.gen_prog(mode=0,cntHor=1,cntVert=5,wRng=(120000,120000))
|
||||||
#hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100)
|
#hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100)
|
||||||
#hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100,smt=0)
|
#hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100,smt=0)
|
||||||
#hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(0,360000))
|
#hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(0,360000))
|
||||||
#hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,cntHor=1,cntVert=5,wRng=(0,360000),smt=0)
|
#hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(0,360000),smt=0)
|
||||||
#hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1)
|
#hs.gen_prog(mode=1)
|
||||||
hs.gen_prog(fnPrg='/tmp/prg.cfg',host='MOTTEST-CPPM-CRM0485',mode=1,
|
hs.gen_prog(mode=1,pt2pt_time=100,cnt=1,cntVert=35,cntHor=7,hRng=(-.3,.3),wRng=(0,360000*3),yRng=(6.2,2.3))
|
||||||
pt2pt_time=100,cnt=1,cntVert=35,cntHor=7,hRng=(-.3,.3),wRng=(0,360000*3),yRng=(6.2,2.3))
|
|
||||||
hs.load_rec()
|
hs.load_rec()
|
||||||
hs.show_pos();hs.show_vel()
|
hs.show_pos();hs.show_vel()
|
||||||
hs.interactive_anim()
|
hs.interactive_anim()
|
||||||
|
|||||||
Reference in New Issue
Block a user