- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于GPIB总线的无线电频谱监测系统的设计
②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;
}
④从仪器读入数据的方法主要用于完成读入仪器的测量结果。对于ESVN40而言,预期返回数据的长度与实际返回的数据长度是有差别的。在设定预期返回数据长度时,应该尽量设置得大一些,以保证每次测量数据不被认为丢失。对于超时参数的设置,与写操作的原则是相同的。该方法的实现代码如下:
int CGPIB∷RecvData(void*Buffer,int& limitLength)
{ if(!(m_bOpened)||(m_dev==NULL))
return FALSE;
ibeot(m_dev,1);
i^mo(m_ctrl,T3s);
i^mo(m_dev,T3s);
ibrda(m_dev,Buffer,limitLength);
//从仪器异步读数据到Buffer
ibwait(m_dev,0x4100); //等待异步读完成
int nLocCount=ibcntl;
if(ibsta & ERR)
return FALSE;
ibwait(m_ctrl,0x0000);
if(ibsta & ERR)
return -1;
return nLocCount;
}
⑤关闭仪器的方法主要用于将仪器置为本地测量方式,同时使仪器处于离线状态。其关键代码如下:
BOOL CGPIB∷Close( )
{ if(!(m_bOpened)||(m_dev==NULL))
return TRUE;
ibloc(m_dev); //置ESVN40为本地测量方式
ibonl(m_dev,0); //置ESVN40为离线方式
if(ibsta & ERR)
return FALSE;
m_bOpened=FALSE;
ibonl(m_ctrl,0); //设置GPIB卡为OFF-Line状态
return 1;
}
3 程序运行界面
该系统可以进行无线电信号的监测,其中包括某个频点的电平、调整深度、频率补偿和频率偏移等。此外,系统还能对单频点的频谱进行分析,对给定的频段进行信号扫描。在实际应用中,采用双线程的工作机理,可以很大程度地提高数据采集的速度。系统对信号进行频率扫描时的运行界面如图4所示。在界面中,由于ESVN40只是返回扫描驻点的电平值,因此在软件中对该扫描功能进行了扩充。在界面上只要设定一个电平阈值(用户可以认为超过该阈值的电平,可能存在信道占用)和一个用户认为每个信道应该占用的最大带宽或法定的最大带宽,则通过软件设计对采样的样本进行分析后,可以对占用信道的中心频点进行初步定位。用户根据在测量结果表中显示的值,可以进一步分析该中心频点的频谱或测量其他的调制特征值。可见,通过虚拟仪器的思想,将软硬件结合使用,可以极大地扩充硬件的功能。

4 结束语
在系统的开发中,采用了C++中类的思想,使得系统具备了良好的扩展性,对于不同的仪器接口方式,可以最大限度地利用已开发的代码段。同时,也增强了系统的可维护性,在实际应用中取得了不错的效果。在采用了双线程工作机制后,充分发挥了仪器的性能,比单线程的速度提高了50%。
来源:维库开发网
上一篇:北斗导航定位接收机的原理及硬件实现
下一篇:支持下一代3G/4G设计的融合RF架构


