cleanup
This commit is contained in:
@@ -694,21 +694,6 @@ class ShapePath(MotionBase):
|
|||||||
'''
|
'''
|
||||||
prg=['close all buffers','open prog %d'%(prgId)]
|
prg=['close all buffers','open prog %d'%(prgId)]
|
||||||
|
|
||||||
#Use EncTable 20 as Frame counter
|
|
||||||
#dont use Coord[1].DesTimeBase as the time base but use the virtual encoder:
|
|
||||||
# Coord[1].pDesTimeBase=Coord[1].DesTimeBase.a #(default)
|
|
||||||
prg.append('''\
|
|
||||||
EncTable[20].type = 1 //32 Bit uint
|
|
||||||
EncTable[20].pEnc = Sys.Udata[0].a
|
|
||||||
EncTable[20].index1 = 0
|
|
||||||
EncTable[20].index2 = 0
|
|
||||||
EncTable[20].index3 = 0
|
|
||||||
EncTable[20].index4 = 0
|
|
||||||
EncTable[20].index5 = 0
|
|
||||||
EncTable[20].index5 = 0
|
|
||||||
EncTable[20].ScaleFactor=1E-3
|
|
||||||
//Coord[1].pDesTimeBase=EncTable[20].DeltaPos.a
|
|
||||||
''')
|
|
||||||
verb=self.verbose
|
verb=self.verbose
|
||||||
comm=self.comm
|
comm=self.comm
|
||||||
if comm is not None:
|
if comm is not None:
|
||||||
@@ -914,9 +899,9 @@ if __name__=='__main__':
|
|||||||
#sp.gen_grid_points(w=50,h=50,pitch=120,rnd=0,ofs=(0,+2000));sp.sort_points(False,50); sp.meta['pt2pt_time']=10
|
#sp.gen_grid_points(w=50,h=50,pitch=120,rnd=0,ofs=(0,+2000));sp.sort_points(False,50); sp.meta['pt2pt_time']=10
|
||||||
#sp.gen_grid_points(w=16,h=16,pitch=120,rnd=0,ofs=(0,+2000));sp.sort_points(False,16); sp.meta['pt2pt_time']=10
|
#sp.gen_grid_points(w=16,h=16,pitch=120,rnd=0,ofs=(0,+2000));sp.sort_points(False,16); sp.meta['pt2pt_time']=10
|
||||||
#12.5x12.5
|
#12.5x12.5
|
||||||
sp.gen_grid_points(w=78,h=78,pitch=120,rnd=0,ofs=(-10000,-12000));sp.sort_points(False,78); sp.meta['pt2pt_time']=10
|
#sp.gen_grid_points(w=78,h=78,pitch=120,rnd=0,ofs=(-10000,-12000));sp.sort_points(False,78); sp.meta['pt2pt_time']=10
|
||||||
#23.0x23.0 -> only 3 data points from shot to shot: 6,9,12,14,17,20...
|
#23.0x23.0 -> only 3 data points from shot to shot: 6,9,12,14,17,20...
|
||||||
#sp.gen_grid_points(w=162,h=162,pitch=120,rnd=0,ofs=(-10000,-12000));sp.sort_points(False,162); sp.meta['pt2pt_time']=10
|
sp.gen_grid_points(w=162,h=162,pitch=120,rnd=0,ofs=(-10000,-12000));sp.sort_points(False,162); sp.meta['pt2pt_time']=10
|
||||||
|
|
||||||
#sp.gen_grid_points(w=1,h=10,pitch=100,rnd=0,ofs=(0,0))
|
#sp.gen_grid_points(w=1,h=10,pitch=100,rnd=0,ofs=(0,0))
|
||||||
#sp.gen_spiral_points(rStart=100,rInc=20,numSeg=8,numCir=32, ofs=(0, 0))
|
#sp.gen_spiral_points(rStart=100,rInc=20,numSeg=8,numCir=32, ofs=(0, 0))
|
||||||
|
|||||||
Binary file not shown.
@@ -41,15 +41,6 @@ static float timeCor=0.f; //time correction (frame to frame time adjustment)
|
|||||||
#define SIMFLAG0 (pshm->Coord[1].Q[10])
|
#define SIMFLAG0 (pshm->Coord[1].Q[10])
|
||||||
#define SIMFLAG1 (pshm->Coord[1].Q[11])
|
#define SIMFLAG1 (pshm->Coord[1].Q[11])
|
||||||
|
|
||||||
//EncTable[20].pEnc= Coord[1].Q[12].a does not work
|
|
||||||
//EncTable[20].pEnc= Sys.Udata[0].a works uint32
|
|
||||||
//EncTable[20].pEnc= Sys.Idata[0].a works int32
|
|
||||||
//EncTable[20].pEnc= Sys.Fdata[0].a works float32
|
|
||||||
//EncTable[20].pEnc= Sys.Ddata[0].a works float64
|
|
||||||
//#define ENCVAL (*((double *)pushm+0))
|
|
||||||
#define ENCVAL (*((unsigned int *)pushm+0))
|
|
||||||
|
|
||||||
|
|
||||||
//#define SIMFLAG0 (pshm->P[10])
|
//#define SIMFLAG0 (pshm->P[10])
|
||||||
//#define SIMFLAG1 (pshm->P[11])
|
//#define SIMFLAG1 (pshm->P[11])
|
||||||
//Power PMAC Software Reference Manual.pdf Gate3[i].Chan[j].Status -> page 919 UserFlag
|
//Power PMAC Software Reference Manual.pdf Gate3[i].Chan[j].Status -> page 919 UserFlag
|
||||||
@@ -76,8 +67,7 @@ void trigsync_func(void *arg)
|
|||||||
int i;
|
int i;
|
||||||
RTIME rtStart,rtLast,rtCur,rtDiff; //rt* is real time of the rt-process
|
RTIME rtStart,rtLast,rtCur,rtDiff; //rt* is real time of the rt-process
|
||||||
unsigned int scStart,scLast,scCur,scDiff; //sc* are servo counts of the motion
|
unsigned int scStart,scLast,scCur,scDiff; //sc* are servo counts of the motion
|
||||||
double srvPer,srvPer2;
|
double srvPer;
|
||||||
double mtAct,mtDes; //mt* motion time. Actual and desired. this is the accumulated time that controls motion speed
|
|
||||||
|
|
||||||
unsigned int maxDiff;
|
unsigned int maxDiff;
|
||||||
struct GateArray3* gate3_1=GetGate3MemPtr(1);
|
struct GateArray3* gate3_1=GetGate3MemPtr(1);
|
||||||
@@ -91,15 +81,14 @@ void trigsync_func(void *arg)
|
|||||||
|
|
||||||
//unsigned int lastQ12=0; //Q12 value for further sync
|
//unsigned int lastQ12=0; //Q12 value for further sync
|
||||||
double mvTimer;
|
double mvTimer;
|
||||||
double mxActPos,mxDesPos,mxHomePos=pshm->Motor[2].HomePos;
|
double mxActPos,mxDesPos,mxErr,mxHomePos=pshm->Motor[2].HomePos;
|
||||||
double myActPos,myDesPos,myHomePos=pshm->Motor[1].HomePos;
|
double myActPos,myDesPos,myErr,myHomePos=pshm->Motor[1].HomePos;
|
||||||
|
|
||||||
printf("Wait motion program arrived at start position...\n");
|
printf("Wait motion program arrived at start position...\n");
|
||||||
while(pshm->Coord[1].Q[0]!=-3)
|
while(pshm->Coord[1].Q[0]!=-3)
|
||||||
rt_task_wait_period(NULL);
|
rt_task_wait_period(NULL);
|
||||||
pshm->Coord[1].Q[0]=-2;
|
pshm->Coord[1].Q[0]=-2;
|
||||||
srvPer=pshm->ServoPeriod;
|
srvPer=pshm->ServoPeriod;
|
||||||
srvPer2=pshm->ServoPeriod;
|
|
||||||
|
|
||||||
rtStart=rt_timer_read();
|
rtStart=rt_timer_read();
|
||||||
printf("Wait for 'arm' event...\n");
|
printf("Wait for 'arm' event...\n");
|
||||||
@@ -132,17 +121,14 @@ void trigsync_func(void *arg)
|
|||||||
//FEL shot arrived FLAG1 0->1: first frame trigger before first cristall
|
//FEL shot arrived FLAG1 0->1: first frame trigger before first cristall
|
||||||
pshm->Gather.Enable=2; //start gathering data
|
pshm->Gather.Enable=2; //start gathering data
|
||||||
pshm->Coord[1].Q[0]=-1;
|
pshm->Coord[1].Q[0]=-1;
|
||||||
ENCVAL=0;
|
|
||||||
|
|
||||||
printf("Flag 1: %.5f ms\n", (rt_timer_read() - rtStart)/1E6);
|
printf("Flag 1: %.5f ms\n", (rt_timer_read() - rtStart)/1E6);
|
||||||
rtStart=rtLast=rt_timer_read();
|
rtStart=rtLast=rt_timer_read();
|
||||||
scStart=scLast=pshm->ServoCount;
|
scStart=scLast=pshm->ServoCount;
|
||||||
mtAct=0.f;
|
|
||||||
pshm->Coord[1].Q[0]=0;
|
pshm->Coord[1].Q[0]=0;
|
||||||
//pshm->Coord[1].DesTimeBase=srvPer; //start motion at default speed
|
pshm->Coord[1].DesTimeBase=srvPer; //start motion at default speed
|
||||||
pshm->Coord[1].DesTimeBase=srvPer*(mtPt2Pt+timeOfs)/mtPt2Pt; //start motion at default speed
|
|
||||||
if(mode&8)
|
if(mode&8)
|
||||||
printf("Start: rtStart:%.3f ms scStart:%d mtAct:%.3f mtDes:%.3f srvPer:%.6f\n", i, rtLast/1E6,scLast, mtAct,mtDes,srvPer);
|
printf("Start: rtStart:%.3f ms scStart:%d srvPer:%.6f\n", i, rtLast/1E6,scLast, srvPer);
|
||||||
|
|
||||||
for(i=1;pshm->Gather.Enable;i++)
|
for(i=1;pshm->Gather.Enable;i++)
|
||||||
{
|
{
|
||||||
@@ -159,43 +145,21 @@ void trigsync_func(void *arg)
|
|||||||
while(FLAG1)
|
while(FLAG1)
|
||||||
{
|
{
|
||||||
rt_task_wait_period(NULL);
|
rt_task_wait_period(NULL);
|
||||||
ENCVAL=( (i-1)*mtPt2Pt + (pshm->ServoCount-scLast)*srvPer )*1000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while(!FLAG1)
|
while(!FLAG1)
|
||||||
{
|
{
|
||||||
rt_task_wait_period(NULL);
|
rt_task_wait_period(NULL);
|
||||||
ENCVAL=( (i-1)*mtPt2Pt + (pshm->ServoCount-scLast)*srvPer )*1000;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//FEL shot arrived FLAG1 0->1
|
//FEL shot arrived FLAG1 0->1
|
||||||
//ENCVAL+=mtPt2Pt*1000; //ENCVAL in us
|
|
||||||
ENCVAL=i*mtPt2Pt*1000; //ENCVAL in us
|
|
||||||
rtCur = rt_timer_read();
|
rtCur = rt_timer_read();
|
||||||
scCur=pshm->ServoCount;
|
scCur=pshm->ServoCount;
|
||||||
//if (lastQ12!=(unsigned int)pshm->Coord[1].Q[12])
|
|
||||||
//{
|
|
||||||
// //'Coord[1].Q[12]=Sys.ServoCount'
|
|
||||||
// //'Coord[1].Q[13]={idxOfPoint}'
|
|
||||||
// //type of pshm->Coord[1].Q[12] is double
|
|
||||||
// lastQ12=(unsigned int)pshm->Coord[1].Q[12]; //saved ServoCount in program code
|
|
||||||
|
|
||||||
// //mxActPos=pshm->Motor[2].ActPos;mxDesPos=pshm->Motor[2].DesPos;
|
|
||||||
// //myActPos=pshm->Motor[1].ActPos;myDesPos=pshm->Motor[1].DesPos;
|
|
||||||
|
|
||||||
// //printf("*** SYNC *** Trigger count:%d, ProgIdx:%d, ServoCount diff:%d-%d=%d", i, (unsigned int)pshm->Coord[1].Q[13], lastQ12,scCur, lastQ12-scCur);
|
|
||||||
// printf("*** SYNC *** Trigger count:%d, myDesPos:%.2f, ServoCount diff:%d-%d=%d\n", i, pshm->Coord[1].Q[13]-myHomePos, lastQ12,scCur, lastQ12-scCur);
|
|
||||||
// //printf(" X,Y ActPos:(%.5g %.5g) DesPos:(%.5g %.5g)\n", mxActPos-mxHomePos, myActPos-myHomePos, mxDesPos-mxHomePos, myDesPos-myHomePos);
|
|
||||||
//}
|
|
||||||
|
|
||||||
rtDiff=rtCur-rtLast;
|
rtDiff=rtCur-rtLast;
|
||||||
scDiff=scCur-scLast;
|
scDiff=scCur-scLast;
|
||||||
|
|
||||||
mtAct+=scDiff*srvPer+timeCor;
|
|
||||||
mtDes=i*mtPt2Pt+timeOfs;
|
|
||||||
srvPer=(mtPt2Pt+mtDes-mtAct)/scDiff;
|
|
||||||
//srvPer=pshm->ServoPeriod; //default speed
|
//srvPer=pshm->ServoPeriod; //default speed
|
||||||
|
|
||||||
// mvTimer > 0 motion leading FEL -> decrease srvPer
|
// mvTimer > 0 motion leading FEL -> decrease srvPer
|
||||||
// mvTimer < 0 motion lagging FEL -> increase srvPer
|
// mvTimer < 0 motion lagging FEL -> increase srvPer
|
||||||
// rtDiff > mtPt2Pt -> increase srvPer
|
// rtDiff > mtPt2Pt -> increase srvPer
|
||||||
@@ -204,19 +168,20 @@ void trigsync_func(void *arg)
|
|||||||
if(mvTimer>mtPt2Pt/2) //lagging
|
if(mvTimer>mtPt2Pt/2) //lagging
|
||||||
mvTimer-=mtPt2Pt;
|
mvTimer-=mtPt2Pt;
|
||||||
//srvPer2*=(rtDiff/1E6-mvTimer)/mtPt2Pt;
|
//srvPer2*=(rtDiff/1E6-mvTimer)/mtPt2Pt;
|
||||||
srvPer2=pshm->ServoPeriod*(rtDiff/1E6-mvTimer)/mtPt2Pt;
|
srvPer=pshm->ServoPeriod*(rtDiff/1E6-mvTimer)/mtPt2Pt;
|
||||||
|
|
||||||
pshm->Coord[1].DesTimeBase=srvPer2;
|
pshm->Coord[1].DesTimeBase=srvPer;
|
||||||
pshm->Coord[1].Q[0]++;
|
pshm->Coord[1].Q[0]++;
|
||||||
if(mode&8)
|
if(mode&8)
|
||||||
{
|
{
|
||||||
mxActPos=pshm->Motor[2].ActPos;mxDesPos=pshm->Motor[2].DesPos;
|
mxActPos=pshm->Motor[2].ActPos;mxDesPos=pshm->Motor[2].DesPos;
|
||||||
myActPos=pshm->Motor[1].ActPos;myDesPos=pshm->Motor[1].DesPos;
|
myActPos=pshm->Motor[1].ActPos;myDesPos=pshm->Motor[1].DesPos;
|
||||||
|
mxErr=mxDesPos-mxActPos;
|
||||||
|
myErr=myDesPos-myActPos;
|
||||||
//printf(" X,Y ActPos:(%.5g %.5g) DesPos:(%.5g %.5g) ", mxActPos-mxHomePos, myActPos-myHomePos, mxDesPos-mxHomePos, myDesPos-myHomePos);
|
//printf(" X,Y ActPos:(%.5g %.5g) DesPos:(%.5g %.5g) ", mxActPos-mxHomePos, myActPos-myHomePos, mxDesPos-mxHomePos, myDesPos-myHomePos);
|
||||||
//printf(" X,Y Nsync:(%d) ", pshm->Coord[1].Nsync);
|
//printf(" X,Y Nsync:(%d) ", pshm->Coord[1].Nsync);
|
||||||
//printf(" X,Y MoveTimer:(%.5g %.5g) ", pshm->Motor[1].MoveTimer,pshm->Motor[2].MoveTimer);
|
//printf(" X,Y MoveTimer:(%.5g %.5g) ", pshm->Motor[1].MoveTimer,pshm->Motor[2].MoveTimer);
|
||||||
printf(" Nsync:%d, MoveTimer:(%.5g) srvPer2:%.6f ", pshm->Coord[1].Nsync,mvTimer,srvPer2);
|
printf("Trigger count:%d, Nsync:%d, MoveTimer:%.5g srvPer:%.6f rtDiff:%.3fms scDiff:%d PosErrXY:(%.3f,%.3f)\n",i, pshm->Coord[1].Nsync,mvTimer,srvPer, rtDiff/1E6,scDiff,mxErr,myErr);
|
||||||
printf("Trigger count:%d, rtDiff:%.3fms scDiff:%d mtAct:%.3f mtDes:%.3f srvPer:%.6f ENCVAL:%u \n", i, rtDiff/1E6,scDiff, mtAct,mtDes,srvPer,ENCVAL);
|
|
||||||
}
|
}
|
||||||
rtLast=rtCur;
|
rtLast=rtCur;
|
||||||
scLast=scCur;
|
scLast=scCur;
|
||||||
|
|||||||
Reference in New Issue
Block a user