cleanup
This commit is contained in:
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 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 SIMFLAG1 (pshm->P[11])
|
||||
//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;
|
||||
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
|
||||
double srvPer,srvPer2;
|
||||
double mtAct,mtDes; //mt* motion time. Actual and desired. this is the accumulated time that controls motion speed
|
||||
double srvPer;
|
||||
|
||||
unsigned int maxDiff;
|
||||
struct GateArray3* gate3_1=GetGate3MemPtr(1);
|
||||
@@ -91,15 +81,14 @@ void trigsync_func(void *arg)
|
||||
|
||||
//unsigned int lastQ12=0; //Q12 value for further sync
|
||||
double mvTimer;
|
||||
double mxActPos,mxDesPos,mxHomePos=pshm->Motor[2].HomePos;
|
||||
double myActPos,myDesPos,myHomePos=pshm->Motor[1].HomePos;
|
||||
double mxActPos,mxDesPos,mxErr,mxHomePos=pshm->Motor[2].HomePos;
|
||||
double myActPos,myDesPos,myErr,myHomePos=pshm->Motor[1].HomePos;
|
||||
|
||||
printf("Wait motion program arrived at start position...\n");
|
||||
while(pshm->Coord[1].Q[0]!=-3)
|
||||
rt_task_wait_period(NULL);
|
||||
pshm->Coord[1].Q[0]=-2;
|
||||
srvPer=pshm->ServoPeriod;
|
||||
srvPer2=pshm->ServoPeriod;
|
||||
|
||||
rtStart=rt_timer_read();
|
||||
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
|
||||
pshm->Gather.Enable=2; //start gathering data
|
||||
pshm->Coord[1].Q[0]=-1;
|
||||
ENCVAL=0;
|
||||
|
||||
printf("Flag 1: %.5f ms\n", (rt_timer_read() - rtStart)/1E6);
|
||||
rtStart=rtLast=rt_timer_read();
|
||||
scStart=scLast=pshm->ServoCount;
|
||||
mtAct=0.f;
|
||||
pshm->Coord[1].Q[0]=0;
|
||||
//pshm->Coord[1].DesTimeBase=srvPer; //start motion at default speed
|
||||
pshm->Coord[1].DesTimeBase=srvPer*(mtPt2Pt+timeOfs)/mtPt2Pt; //start motion at default speed
|
||||
pshm->Coord[1].DesTimeBase=srvPer; //start motion at default speed
|
||||
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++)
|
||||
{
|
||||
@@ -159,43 +145,21 @@ void trigsync_func(void *arg)
|
||||
while(FLAG1)
|
||||
{
|
||||
rt_task_wait_period(NULL);
|
||||
ENCVAL=( (i-1)*mtPt2Pt + (pshm->ServoCount-scLast)*srvPer )*1000;
|
||||
}
|
||||
|
||||
while(!FLAG1)
|
||||
{
|
||||
rt_task_wait_period(NULL);
|
||||
ENCVAL=( (i-1)*mtPt2Pt + (pshm->ServoCount-scLast)*srvPer )*1000;
|
||||
}
|
||||
}
|
||||
//FEL shot arrived FLAG1 0->1
|
||||
//ENCVAL+=mtPt2Pt*1000; //ENCVAL in us
|
||||
ENCVAL=i*mtPt2Pt*1000; //ENCVAL in us
|
||||
rtCur = rt_timer_read();
|
||||
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;
|
||||
scDiff=scCur-scLast;
|
||||
|
||||
mtAct+=scDiff*srvPer+timeCor;
|
||||
mtDes=i*mtPt2Pt+timeOfs;
|
||||
srvPer=(mtPt2Pt+mtDes-mtAct)/scDiff;
|
||||
//srvPer=pshm->ServoPeriod; //default speed
|
||||
|
||||
// mvTimer > 0 motion leading FEL -> decrease srvPer
|
||||
// mvTimer < 0 motion lagging FEL -> increase srvPer
|
||||
// rtDiff > mtPt2Pt -> increase srvPer
|
||||
@@ -204,19 +168,20 @@ void trigsync_func(void *arg)
|
||||
if(mvTimer>mtPt2Pt/2) //lagging
|
||||
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]++;
|
||||
if(mode&8)
|
||||
{
|
||||
mxActPos=pshm->Motor[2].ActPos;mxDesPos=pshm->Motor[2].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 Nsync:(%d) ", pshm->Coord[1].Nsync);
|
||||
//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, rtDiff:%.3fms scDiff:%d mtAct:%.3f mtDes:%.3f srvPer:%.6f ENCVAL:%u \n", i, rtDiff/1E6,scDiff, mtAct,mtDes,srvPer,ENCVAL);
|
||||
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);
|
||||
}
|
||||
rtLast=rtCur;
|
||||
scLast=scCur;
|
||||
|
||||
Reference in New Issue
Block a user