📄 measure.cpp
字号:
}
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;
}
}
else
{
stat=1;
}
GpibWrt("SENSE:LEV:MODE MANUAL");
}
if ( (stat==0) && (Auto==1))
{
diff=10;
}
else
{
diff=expected_power-measured_cmu;
}
diff1=diff;
i++;
}
if( fabs(measured_cmu+9999999.99)<1)
{
sprintf(buf,"SENSE:LEVEL:MAX 35");
}
else
{
sprintf(buf,"SENSE:LEVEL:MAX %f",measured_cmu+5);
}
GpibWrt(buf);
GpibWrt("*OPC?");
GpibRd(buf);
Sleep(50);
strcpy(buf,"NAN");
i=0;
stat=0;
*phase_error=-9999999.99;
while ( (fabs(*phase_error+9999999.99)<1) && (i<=3 )) //weidg
{
GpibWrt("READ:SCALAR:MOD:RES?");
Sleep(500); //was 500
GpibRd(buf); // phase error error in 5th value (in Hz)
*phase_error=C_parse(buf,4);
i++;
}
if( fabs(*phase_error+9999999.99)<1)
{
stat=FALSE;
}
else
{
stat=1;
}
}
return stat;
}
//***************
//------------- GetTxLev
// returns FALSE on error
//***************
BOOL measure::GetTxPower(double expected_power,float *tx_power)
{
Int8 buf[80];
double abs_delta; // delta between expected and read
double delta; // measured-expected
double measured;
unsigned count;
unsigned valid_measurement;
unsigned stat,Auto;
char log_msg[256];
float dummy1,dummy2,dummy3,dummy5;
char dummy4[20];
int i,j; //weidg
i=0; //weidg
double measured_cmu; //weidg cmu
double diff; //weidg cmu
double diff1; //weidg cmu
if(tester_type==AGT8960)
{
ViInt32 Integrity;
ViReal64 TXPower;
stat=TRUE;
age1960_expectedPower( vi_instr, expected_power, age1960_CURRENT_BAND);
sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
LogGPIB(log_msg);
age1960_initMeasFcn(vi_instr, age1960_TXPOWER);
age1960_fetchTXPower_Q(vi_instr, &Integrity, &TXPower);
sprintf(log_msg,"Measuring Tx power: integrity=%d, power=%f",Integrity,TXPower);
LogGPIB(log_msg);
count=0;
// while(Integrity==5 || Integrity==6 && count<10) // power is too high or too low
while(Integrity!=0 && count<16) // power is too high or too low
{
// if(TXPower>=50 || TXPower<=-20)
// TXPower=10;
Sleep(200);
count++;
age1960_expectedPower( vi_instr, TXPower, age1960_CURRENT_BAND); // set expected to measured
sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
LogGPIB(log_msg);
age1960_initMeasFcn(vi_instr, age1960_TXPOWER);
age1960_fetchTXPower_Q(vi_instr, &Integrity, &TXPower);
sprintf(log_msg,"Measuring Tx power: integrity=%d, power=%f",Integrity,TXPower);
LogGPIB(log_msg);
}
if(Integrity == 0)
{
*tx_power=(float)TXPower;
return TRUE;
}
else
{
*tx_power=(float)TXPower;
return FALSE;
}
} // end if AGT8960
else if(tester_type==HP8922)
{
stat=TRUE;
// try measuring at the expected power. If the instrument can't make a
// measurement, sweep the expected power from 32 to 2 dBm in increments
// of 5 dBm until either a reading is obtained or the lowest power
// level is reached.
sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
GpibWrt(IdHP8922, buf);
Sleep(100);
GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
strcpy(buf,"");
GpibRd(buf);
valid_measurement=(strlen(buf)!=0);
if(!valid_measurement)
{
GpibClear(IdHP8922);
for(expected_power=33;expected_power>0 && !valid_measurement;expected_power-=5.0)
{
sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
GpibWrt(IdHP8922, buf);
Sleep(100);
GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
strcpy(buf,"");
GpibRd(buf);
valid_measurement=(strlen(buf)!=0);
if(!valid_measurement)
{
GpibClear(IdHP8922);
}
}
if(!valid_measurement)
{
return FALSE;
}
}
expected_power=(float)atof(buf);
// now try to get within 3 dB error between expected and measured
abs_delta=99.0;
count=0;
while(abs_delta>3.0 || abs_delta<0.01)
{
sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
GpibWrt(IdHP8922, buf);
Sleep(100);
GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
strcpy(buf,"");
GpibRd(buf);
valid_measurement=(strlen(buf)!=0);
if(!valid_measurement)
{
GpibClear(IdHP8922);
}
measured=atof(buf);
delta=(double)measured-(double)expected_power;
abs_delta=fabs(delta);
count++;
if(count>MAX_8922_LOOP_COUNT)
{
*tx_power=0.0;
return FALSE;
}
// sometimes the 8922 reports back exactly what the expected power was.
// detect that condition and change the expected power slightly
if(abs_delta<0.1)
{
expected_power=expected_power+0.2*((float)rand()-(float)(RAND_MAX/2))/(float)RAND_MAX;
}
else // error is greater than 0.1 dB
{
expected_power=measured;
} // end else error is not smaller than 0.1 dB
}
if(valid_measurement)
{
*tx_power=measured;
return TRUE;
}
else
{
*tx_power=0.0;
return FALSE;
}
} // end if tester is HP8922
else if(tester_type==CM200)
{
// expected_power=expected_power+3;
measured_cmu=999;
diff=expected_power-measured_cmu;
stat=TRUE;
// weidg
i=0;
strcpy(buf,"NAN");
diff1=0;
stat=0;
Auto=1;
while ( ((stat==0) && ( i<=1 )) || (((diff>=5.5) || (diff<=1)) && ((expected_power+12)>=0)&&(i<=1)) || ((Auto==1) && (i<=1)))
{
expected_power=expected_power-diff1+5;
if (expected_power<=-12 )
{
expected_power=-12;
}
if (expected_power>=39 )
{
expected_power=39;
}
sprintf(buf,"SENSE:LEVEL:MAX %f",expected_power);
GpibWrt(buf);
GpibWrt("*OPC?");
GpibRd(buf);
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;
}
}
else
{
stat=1;
}
GpibWrt("SENSE:LEV:MODE MANUAL");
}
if ( (stat==0) && (Auto==1))
{
diff=10;
}
else
{
diff=expected_power-measured_cmu;
}
diff1=diff;
i++;
}
if(stat==0)
{
*tx_power=-99.0;
stat=FALSE;
}
else
{
*tx_power=measured_cmu;
stat=1;
}
}
return stat;
}
//***************
//------------- GetTxLev
// returns FALSE on error
//***************
BOOL measure::GetTxPower(double expected_power,float *tx_power,unsigned search_down)
{
Int8 buf[80];
double abs_delta; // delta between expected and read
double delta; // measured-expected
double measured;
unsigned count;
unsigned valid_measurement;
unsigned stat,Auto;
char log_msg[256];
int i,j; //weidg
i=0; //weidg
double measured_cmu; //weidg cmu
double diff; //weidg cmu
double diff1; //weidg cmu
float dummy1,dummy2,dummy3,dummy5;
char dummy4[20];
if(tester_type==AGT8960)
{
ViInt32 Integrity;
ViReal64 TXPower;
stat=TRUE;
age1960_expectedPower( vi_instr, expected_power, age1960_CURRENT_BAND);
sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
LogGPIB(log_msg);
age1960_initMeasFcn(vi_instr, age1960_TXPOWER);
age1960_fetchTXPower_Q(vi_instr, &Integrity, &TXPower);
sprintf(log_msg,"Measuring Tx power: integrity=%d, power=%f",Integrity,TXPower);
LogGPIB(log_msg);
count=0;
// while(Integrity==5 || Integrity==6 && count<10) // power is too high or too low
while(Integrity!=0 && count<16) // power is too high or too low
{
count++;
if(Integrity==2)
{
if(expected_power>0)
{
expected_power=expected_power-5;
}
age1960_expectedPower( vi_instr, expected_power, age1960_CURRENT_BAND); // set expected to measured
sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
}
else
{
age1960_expectedPower( vi_instr, TXPower, age1960_CURRENT_BAND); // set expected to measured
sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
}
LogGPIB(log_msg);
age1960_initMeasFcn(vi_instr, age1960_TXPOWER);
age1960_fetchTXPower_Q(vi_instr, &Integrity, &TXPower);
sprintf(log_msg,"Measuring Tx power: integrity=%d, power=%f",Integrity,TXPower);
LogGPIB(log_msg);
}
if(Integrity == 0)
{
*tx_power=(float)TXPower;
return TRUE;
}
else
{
*tx_power=(float)TXPower;
return FALSE;
}
} // end if AGT8960
else if(tester_type==HP8922)
{
stat=TRUE;
// try measuring at the expected power. If the instrument can't make a
// measurement, sweep the expected power from 32 to 2 dBm in increments
// of 3 dBm until either a reading is obtained or the lowest power
// level is reached.
sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
GpibWrt(IdHP8922, buf);
Sleep(100);
GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
strcpy(buf,"");
GpibRd(buf);
valid_measurement=(strlen(buf)!=0);
if(!valid_measurement)
{
GpibClear(IdHP8922);
if(search_down)
{
for(expected_power=33;expected_power>0 && !valid_measurement;expected_power-=5.0)
{
sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
GpibWrt(IdHP8922, buf);
Sleep(100);
GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
strcpy(buf,"");
GpibRd(buf);
valid_measurement=(strlen(buf)!=0);
if(!valid_measurement)
{
GpibClear(IdHP8922);
}
} // end for each expected power guess
}
else // search up
{
for(expected_power=0;expected_power<33 && !valid_measurement;expected_power+=5.0)
{
sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
GpibWrt(IdHP8922, buf);
Sleep(100);
GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
strcpy(buf,"");
GpibRd(buf);
valid_measurement=(strlen(buf)!=0);
if(!valid_measurement)
{
GpibClear(IdHP8922);
}
} // end for each expected power guess
}
if(!valid_measurement)
{
return FALSE;
}
}
expected_power=(float)atof(buf);
// now try to get within 3 dB error between expected and measured
abs_delta=99.0;
count=0;
while(abs_delta>3.0 || abs_delta<0.01)
{
sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
GpibWrt(IdHP8922, buf);
Sleep(100);
GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
strcpy(buf,"");
GpibRd(buf);
valid_measurement=(strlen(buf)!=0);
if(!valid_measurement)
{
GpibClear(IdHP8922);
}
measured=atof(buf);
delta=(double)measured-(double)expected_power;
abs_delta=fabs(delta);
count++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -