基于GPIB總線的無線電頻譜監(jiān)測系統(tǒng)的設(shè)計(jì)
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卡出錯(cuò)!錯(cuò)誤號: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類中向儀器寫字符串的方法主要用于完成從控制計(jì)算機(jī)向儀器發(fā)送控制字符串的功能,可以用異步或者同步方式進(jìn)行傳送。在寫之前,要對超時(shí)進(jìn)行合理的設(shè)置。通常,如果字符串較長,可以把超時(shí)設(shè)定得大一些。其關(guān)鍵代碼如下:
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的狀態(tài)
if(ibsta ERR)
{
return FALSE;
}
return ibcntl;
}
?、蹚膬x器接收字節(jié)的方法主要用于完成從ESVN40的數(shù)據(jù)緩沖區(qū)中讀入一個(gè)字節(jié)。該方法對于讀取儀器的狀態(tài)寄存器非常有用。
int CGPIB∷ReadChar(char*ch)
{
if(!(m_bOpened)||(m_dev==NULL))
return FALSE;
int i=1;
RecvData((void*)ch,i);
return TRUE;
}
評論