📄 measure.cpp
字号:
GpibWrt("MEAS:DSP:AMPLITUDE8:HLIMIT:VALUE -30.0");
GpibWrt("MEAS:DSP:AMPLITUDE8:HLIMIT:STATE 1");
GpibWrt("MEAS:DSP:AMPLITUDE8:LLIMIT:STATE 0");
GpibWrt("DSP:AMPLITUDE:TIME9 -1.90E-05S");
GpibWrt("MEAS:DSP:AMPLITUDE9:HLIMIT:VALUE -30.0");
GpibWrt("MEAS:DSP:AMPLITUDE9:HLIMIT:STATE 1");
GpibWrt("MEAS:DSP:AMPLITUDE9:LLIMIT:STATE 0");
GpibWrt("DSP:AMPLITUDE:TIME10 -1.80E-05S");
GpibWrt("MEAS:DSP:AMPLITUDE10:HLIMIT:VALUE -30.0");
GpibWrt("MEAS:DSP:AMPLITUDE10:HLIMIT:STATE 1");
GpibWrt("MEAS:DSP:AMPLITUDE10:LLIMIT:STATE 0");
GpibWrt("DSP:AMPLITUDE:TIME11 -1.70E-05S ");
GpibWrt("MEAS:DSP:AMPLITUDE11:HLIMIT:VALUE -6.0");
GpibWrt("MEAS:DSP:AMPLITUDE11:HLIMIT:STATE 1");
GpibWrt("MEAS:DSP:AMPLITUDE11:LLIMIT:STATE 0");
GpibWrt("DSP:AMPLITUDE:TIME12 -1.00E-05S ");
GpibWrt("MEAS:DSP:AMPLITUDE12:HLIMIT:VALUE -6.0");
GpibWrt("MEAS:DSP:AMPLITUDE12:HLIMIT:STATE 1");
GpibWrt("MEAS:DSP:AMPLITUDE12:LLIMIT:STATE 0");
// disable peak flatness
GpibWrt("MEAS:DSP:AMPLITUDE:NPFL:STATE 0");
GpibWrt("MEAS:DSP:AMPLITUDE:PPFL:STATE 0");
}
else if(tester_type==CM200)// set up CM200
{
// GpibWrt("SENSE:LEVEL:MAX 15");
GpibWrt("CONF:POW:CONTROL ARR,1"); // scalar, average 10 values
Sleep(200);
}
} // end if initializing
else // measuring
{
if(tester_type==AGT8960)
{
ViInt32 Integrity, Count;
ViReal64 MaskFail, TXPower, PVTArray[12];
age1960_initMeasFcn(vi_instr, age1960_PVTIME);
age1960_fetchPowerVsTime_Q(vi_instr, 12, &Integrity, &MaskFail, &TXPower, PVTArray, &Count);
if(Integrity!=0)
{
if(TXPower<40)
{
age1960_expectedPower( vi_instr, TXPower, age1960_CURRENT_BAND);
}
else
{
age1960_expectedPower( vi_instr, -15.0, age1960_CURRENT_BAND);
}
} // end if Integrity==1 or 2
if( PVTArray[0] < -30.0 && PVTArray[1] < -30.0 &&
PVTArray[2] < -30.0 && PVTArray[3] < -30.0 &&
PVTArray[4] < -30.0 && PVTArray[5] < -30.0 &&
PVTArray[6] < -30.0 && PVTArray[7] < -30.0 &&
PVTArray[7] < -30.0 && PVTArray[9] < -30.0 &&
PVTArray[10] < -6.0 && PVTArray[11] < -6.0
)
{
*stat=TRUE;
}
else
{
*stat=FALSE;
}
} // end if tester is HP
else if(tester_type==HP8922)
{
// MUST be on Amplitude Main screen to read summary
GpibWrt("DISP:DSP:VIEW 'AMPL MAIN'");
Sleep(100);
GpibWrt("MEAS:DSP:AMPLITUDE1:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE2:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE3:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE4:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE5:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE6:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE7:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE8:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE9:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE10:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE11:HLIMIT:RESET");
GpibWrt("MEAS:DSP:AMPLITUDE12:HLIMIT:RESET");
Sleep(100);
strcpy(buf,"");
GpibWrt("MEAS:DSP:AMPL:MSUM?");
Sleep(100);
GpibRd(buf);
if(strstr(buf,"Passed"))
{
*stat=TRUE;
}
else
{
*stat=FALSE;
}
} // end if tester is HP
else if(tester_type==CM200)// CMU2000
{
Sleep(100);
GpibWrt("READ:POW?");
Sleep(1000);
strcpy(buf,"");
GpibRd(buf);
if(strstr(buf,"MATC"))
{
*stat=TRUE;
}
else
{
*stat=FALSE;
}
} // end if CMU2000
} // end else measuring
return TRUE;
}
//***************
//------------- GetUpperRampStatus(init,*stat)
// Measure ramp at 2 points only at top of ramp to see if it is within mask
// if init==1, initializes, otherwise, makes the measurement
// this is for speed.
// returns a 2 bit result indicating whether the power was exceeded at T1 and T0
//***************
BOOL measure::GetUpperRampStatus(unsigned init,
float power,
unsigned num_pts,
struct limit_msmnt m[])
{
Int8 buf1[512]; //weidg
char buf[10030]; //[256];weidg
char cmd[10030]; //[256] weidg
char buf9[20];
unsigned i;
unsigned j;
unsigned d; //weidg
char log_msg[10030];
char time_string[256];
double ret_data[668];
char buf2[14];
int v;
unsigned stat;
double measured_cmu;
float dummy1,dummy2,dummy3,dummy7,dummy5,dummy6;
char dummy4[20];
unsigned Auto;
double data_array[80];
char *token = NULL;
char seps[] = " ,\t\n";
ViStatus vi_stat;
// set HP8922 up to sync on TSC0
if(init)
{
if(tester_type==AGT8960)
{
ViReal64 pvsTimeOffsets[12];
age1960_expectedPower( vi_instr, power, age1960_CURRENT_BAND);
sprintf(log_msg,"Setting expected Tx power: %f dBm",power);
LogGPIB(log_msg);
sprintf(log_msg,"Configuring power vs. time measurement. Times: ");
for(i=0;i<num_pts;i++)
{
pvsTimeOffsets[i]=(ViReal64)(m[i].time);
sprintf(time_string,"%g ",m[i].time);
strcat(log_msg,time_string);
}
age1960_confPowerVsTime(vi_instr,3,age1960_TRIG_RF_RISE,0.0,age1960_BSYNC_MID,num_pts,pvsTimeOffsets,5.0);
LogGPIB(log_msg);
}
else if(tester_type==HP8922)
{
sprintf(cmd,"RFANALYZER:AMPLITUDE1 %f",power);
GpibWrt(cmd);
GpibWrt("DISP:SCREEN MSYNC");
GpibWrt("MSYNC:SYNC:BSEL '0'");
GpibWrt("DDEM:BURST:TYPE0 'TSC0'");
// set the times and amplitudes
GpibWrt("DISP:DSP:VIEW 'AMPL RISE'");
for(i=0;i<num_pts;i++)
{
sprintf(cmd,"DSP:AMPLITUDE:TIME%d %fS",i+1,m[i].time);
GpibWrt(cmd);
if(m[i].llimit)
{
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:LLIMIT:VALUE %f",i+1,m[i].power);
GpibWrt(cmd);
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:LLIMIT:STATE 1",i+1);
GpibWrt(cmd);
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:HLIMIT:STATE 0",i+1);
GpibWrt(cmd);
}
else
{
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:HLIMIT:VALUE %f",i+1,m[i].power);
GpibWrt(cmd);
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:HLIMIT:STATE 1",i+1);
GpibWrt(cmd);
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:LLIMIT:STATE 0",i+1);
GpibWrt(cmd);
}
} // end for all measurements
// disable peak flatness
GpibWrt("MEAS:DSP:AMPLITUDE:NPFL:STATE 0");
GpibWrt("MEAS:DSP:AMPLITUDE:PPFL:STATE 0");
}
else if(tester_type==CM200)// set up CM200
{
// GpibWrt("SENSE:LEVEL:MAX 15");
GpibWrt("CONF:POW:CONTROL ARR,1"); // scalar, average 10 values
Sleep(200);
power=power+5;
if (power<=-12 )
{
power=-12;
}
if (power>=39 )
{
power=39;
}
sprintf(buf,"SENSE:LEVEL:MAX %f",power);
GpibWrt(buf);
GpibWrt("*OPC?");
GpibRd(buf);
Sleep(200);
}
} // end if initializing
else // measuring
{
if(tester_type==AGT8960)
{
ViInt32 Integrity, Count;
ViReal64 MaskFail, TXPower, PVTArray[12];
age1960_initMeasFcn(vi_instr, age1960_PVTIME);
age1960_fetchPowerVsTime_Q(vi_instr, 12, &Integrity, &MaskFail, &TXPower, PVTArray, &Count);
sprintf(log_msg,"Measuring power vs time. Integrity=%d. Measured powers: ",Integrity);
for(i=0;i<num_pts;i++)
{
sprintf(time_string,"%g ",PVTArray[i]);
strcat(log_msg,time_string);
}
LogGPIB(log_msg);
if(Integrity!=0)
{
if(TXPower<40)
{
age1960_expectedPower( vi_instr, TXPower, age1960_CURRENT_BAND);
sprintf(log_msg,"Setting expected Tx power: %f dBm",TXPower);
LogGPIB(log_msg);
}
else
{
age1960_expectedPower( vi_instr, -15.0, age1960_CURRENT_BAND);
sprintf(log_msg,"Setting expected Tx power: %f dBm",-15.0);
LogGPIB(log_msg);
}
} // end if Integrity!=0
for(i=0;i<num_pts;i++)
{
if(m[i].llimit && PVTArray[i]<(ViReal64)(m[i].power))
{
m[i].passed=0;
}
else if(m[i].ulimit && PVTArray[i]>(ViReal64)(m[i].power))
{
m[i].passed=0;
}
else
{
m[i].passed=1;
}
}
}
else if(tester_type==HP8922)
{
// MUST be on Amplitude Main screen to read summary
GpibWrt("DISP:DSP:VIEW 'AMPL MAIN'");
Sleep(100);
for(i=0;i<num_pts;i++)
{
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:LLIMIT:RESET",i+1);
GpibWrt(cmd);
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:HLIMIT:RESET",i+1);
GpibWrt(cmd);
Sleep(1000);
strcpy(buf,"");
// check limit
if(m[i].llimit)
{
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:LLIMIT:EXCEEDED?",i+1);
}
else
{
sprintf(cmd,"MEAS:DSP:AMPLITUDE%d:HLIMIT:EXCEEDED?",i+1);
}
GpibWrt(cmd);
Sleep(1000); // yes, it really needs to wait 1000 msec
GpibRd(buf);
if(strstr(buf,"0"))
{
m[i].passed=1;
}
else
{
m[i].passed=0;
}
} // end for all measurements
} // end if tester is HP
else if(tester_type==CM200)// CMU2000
{
Sleep(100);
stat=TRUE;
i=0;
strcpy(buf,"NAN");
measured_cmu=-9999999.99;
while ((fabs(measured_cmu+9999999.99)<1) && (i<=1) )
{
GpibWrt("READ:POW?");
GpibRd(buf);
measured_cmu=C_parse(buf,1);
if( fabs(measured_cmu+9999999.99)<1)
{
stat=0;
}
else
{
stat=1;
}
Auto=0;
if(stat==0)
{
GpibWrt("SENSE:LEV:MODE AUTOMATIC");
Auto=1;
Sleep(50);
GpibWrt("READ:POW?");
GpibRd(buf);
measured_cmu=C_parse(buf,1);
if( fabs(measured_cmu+9999999.99)<1)
{
stat=0;
}
else
{
stat=1;
}
if(stat!=1)
{
stat=0;
j=0;
strcpy(buf,"NAN");
while ( (strstr(buf,"NAN")) && ( j<=1 ))
{
GpibWrt("READ:SPOW?");
Sleep(50);
GpibRd(buf);
j++;
}
if(strstr(buf,"NAN"))
{
measured_cmu=-9999999.99;
}
else
{
measured_cmu=(float)atof(buf);
stat=1;
sprintf(buf,"SENSE:LEVEL:MAX %f",measured_cmu+5);
GpibWrt(buf);
GpibWrt("*OPC?");
GpibRd(buf);
Sleep(200);
}
}
else
{
stat=1;
}
GpibWrt("SENSE:LEV:MODE MANUAL");
}
i++;
} //end while
if(stat==0)
{
for(i=0;i<num_pts;i++)
{
m[i].passed=0;
}
}
else
{
GpibWrt("FETCH:ARR:POW:BURS?");
GpibRdArr(buf);
for (int k=0; k<60; k++)
ret_data[k] = -9999999.99;
/* Establish str and get the first token: */
token = strtok( buf, seps );
i=0;
while( token != NULL )
{
/* While there are tokens in "str" */
if (strstr(token, "NAN")||strstr(token, "NINF"))
ret_data[i] = -9999999.99;
else if (strstr(token, "INF"))
ret_data[i] = 9999999.99;
else
ret_data[i]=atof(token);
/* Get next token: */
token = strtok( NULL, seps );
i++;
}
for(i=0;i<num_pts;i++)
{
m[i].passed=0;
v=(m[i].time/3.692e-006+10)/0.25+0.5+1; //+???
if(m[i].llimit && ret_data[v]<(ViReal64)(m[i].power))
{
m[i].passed=0;
}
else if (m[i].ulimit && ret_data[v]>(ViReal64)(m[i].power))
{
m[i].passed=0;
}
else
{
m[i].passed=1;
}
_gcvt( ret_data[v], 6, buf9 );
sprintf(buf1,"ret_data[v]: %s", buf9);
LogGPIB(buf1);
}
}
}
} // end else measuring
return TRUE;
}
//***************
//------------- GpibRd(address,*buf)
//***************
void measure::GpibRd(Int8 *buf)
{
Int8 buf1[512];
unsigned len;
unsigned i;
Int16 address;
// figure out which address to use
if(tester_type==HP8922)
{
address=IdHP8922;
}
else if(tester_type==CM200)
{
if(band==GSM)
{
address=IdCM200_GSM900_NS;
}
else if(band==DCS)
{
address=IdCM200_GSM1800_NS;
}
else if(band==PCS)
{
address=IdCM200_GSM1900_NS;
}
}
*buf='\0';
#if VISA
viRead(vi_instr,(unsigned char *)buf,255L,VI_NULL); //was 100L weidg
#else
ibrd(address, buf, 255L);
#endif
len=strlen(buf);
if(len==0) // take care of unterminated queries
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -