写的一个控制OSA86142B的类.

没发现有这样的代码,写了一个,第一次写,达人们多给点意见.用的是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;
    }
}
//--------------------------------------------------------------------------- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值