没发现有这样的代码,写了一个,第一次写,达人们多给点意见.用的是VISA的库
__fastcall OSA86140::OSA86140(int addr)
{
Gpibaddr=addr;
}
__fastcall OSA86140::~OSA86140()
{
}
//---------------------------------------------------------------------------
bool __fastcall OSA86140::Open()
{
//---- Place thread code here ----
//打开GPIB资源并连接器件
errStatus = viOpenDefaultRM(&defaultRM);
if(errStatus<VI_SUCCESS)
{
return(false);
}
errStatus = viOpen(defaultRM,AnsiString("GPIB::" + AnsiString(Gpibaddr) + "::INSTR").c_str(),VI_NULL,VI_NULL,&vi);
if(errStatus<VI_SUCCESS)
{
return(false);
}
return(true);
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::Close()
{
viClose(vi);
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::Clear()
{
errStatus=viPrintf(vi,"*CLS/n");
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::BuffON()
{
errStatus=viPrintf(vi,"syst:comm:gpib:buff on/n");
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::Sweep()
{
errStatus=viPrintf(vi,"INIT:IMM/n");
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::DispText(char* str)
{
errStatus=viPrintf(vi,AnsiString("disp:wind:text:data '" + AnsiString(str) + "'/n").c_str());
}
//---------------------------------------------------------------------------
double __fastcall OSA86140::GetPoint()
{
errStatus=viQueryf(vi,"%s/n","%t","SENS:SWE:POIN?",replyBuf);
return(atof(replyBuf));
}
//---------------------------------------------------------------------------
double __fastcall OSA86140::GetWaveStart()
{
errStatus=viQueryf(vi,"%s/n","%t","SENS:WAV:STAR?",replyBuf);
return(atof(replyBuf));
}
//---------------------------------------------------------------------------
double __fastcall OSA86140::GetWaveStop()
{
errStatus=viQueryf(vi,"%s/n","%t","SENS:WAV:STOP?",replyBuf);
return(atof(replyBuf));
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::SetPoint(int iPoint)
{
errStatus=viPrintf(vi,AnsiString("SENS:SWE:POIN " + AnsiString(iPoint) + "/n").c_str());
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::SetWaveStart(int iWaveStart)
{
errStatus=viPrintf(vi,AnsiString("SENS:WAV:STAR " + AnsiString(iWaveStart) + "nm/n").c_str());
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::SetWaveStop(int iWaveStop)
{
errStatus=viPrintf(vi,AnsiString("SENS:WAV:STOP " + AnsiString(iWaveStop) + "nm/n").c_str());
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::SetWaveSpan(int iWaveSpan)
{
errStatus=viPrintf(vi,AnsiString("SENS:WAV:SPAN " + AnsiString(iWaveSpan) + "nm/n").c_str());
}
//---------------------------------------------------------------------------
double __fastcall OSA86140::GetWaveStep()
{
double dstartW,dstopW,dbucket,sum;
dstartW=GetWaveStart();
dstopW=GetWaveStop();
sum=GetPoint();
dbucket = (dstopW - dstartW) / (sum-1);
return(dbucket);
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::SetSweepCont(int iCont)
{
errStatus=viPrintf(vi,AnsiString("INIT:CONT " + AnsiString(iCont) + "/n").c_str());
}
//---------------------------------------------------------------------------
void __fastcall OSA86140::GetSweepPoint()
{
int dx,pos,sum;
char temp[20];
char *replyBuf;
double dstartW,dstopW,dbucket;
pos=0;
sum=GetPoint();
dstartW = GetWaveStart();
dbucket = GetWaveStep();
fWaveData = new double[sum];
fPowerData = new double[sum]; //存储扫描数据;
replyBuf = new char[sum*20];//分配返回值得空间
errStatus=viQueryf(vi,"%s/n","%t","trac:data:y? tra",replyBuf);
for (int i=0;i<sum;i++) //convert trace data to double
{
dx = 5;
while((replyBuf[pos+dx]!=',')&&(replyBuf[pos+dx]!='/0'))
dx++;
if(dx >19)
{
strncpy(temp,&replyBuf[pos],19);
temp[19] = '/0';
}
else
{
strncpy(temp,&replyBuf[pos],dx);
temp[dx] = '/0';
}
fPowerData[i] = atof(FormatFloat("#.00",atof(temp)).c_str());
fWaveData[i] = atof(FormatFloat("#.00",(dstartW + (dbucket*i))*1.E9).c_str());
if(replyBuf[pos+dx]=='/0')
break;
pos = pos+dx+1;
}
}
//---------------------------------------------------------------------------