⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 measure.cpp

📁 这是一个手机校准程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	    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 + -