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_ctrl<0)
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;
}
②GPIB类中向仪器写字符串的方法主要用于完成从控制计算机向仪器发送控制字符串的功能,可以用异步或者同步方式进行传送。在写之前,要对超时进行合理的设置。通常,如果字符串较长,可以把超时设定得大一些。其关键代码如下:
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;
}