基于GPIB總線的無線電頻譜監測系統的設計
BOOL CGPIB∷Open(int BdIndx,int pad,int sad,int tmo,int eot,int eos)
{ if (m_bOpened==TRUE)
return TRUE;
m_ctrl=ibfind(″GPIB0″);//獲得GPIB卡的控制句柄
if (m_ctrl0)
return FALSE;
ibconfig(m_ctrl,IbcAUTOPOLL,0);//禁止AutoPoll
eot=1;
eos=0x0C0A;
m_dev=ibdev(BdIndx,pad,sad,tmo,1,eos);
//獲得ESVN40的控制句柄
if (ibsta ERR)
{ sprintf(ErrString,″打開GPIB卡出錯!錯誤號:ibsta=
0x%x iberr=%dn″,ibsta,iberr);
this->SetError(ErrString);
return FALSE;
}
ibbna(m_dev,″GPIB0″); //將ESVN40分配給GPIB卡
setGPIBEos(0x0C0A);
m_bOpened=TRUE;
return m_bOpened;
}
?、贕PIB類中向儀器寫字符串的方法主要用于完成從控制計算機向儀器發送控制字符串的功能,可以用異步或者同步方式進行傳送。在寫之前,要對超時進行合理的設置。通常,如果字符串較長,可以把超時設定得大一些。其關鍵代碼如下:
int CGPIB∷SendData(const char*buf,int DataLength)
{ string tmpbuf;
tmpbuf=buf;
tmpbuf +=10;
ibeot(m_dev,1);
ibwrta(m_dev,(void*)tmpbuf.c_str( ),tmpbuf.size( ));
//異步寫字符串到儀器
ibwait(m_dev,0x4100); //等待寫操作完成
ibwait(m_dev,0x0000); //讀出GPIB的狀態
if(ibsta ERR)
{
return FALSE;
}
return ibcntl;
}
③從儀器接收字節的方法主要用于完成從ESVN40的數據緩沖區中讀入一個字節。該方法對于讀取儀器的狀態寄存器非常有用。
int CGPIB∷ReadChar(char*ch)
{
if(!(m_bOpened)||(m_dev==NULL))
return FALSE;
int i=1;
RecvData((void*)ch,i);
return TRUE;
}
評論