通过VISA库实现GPIB通信

通过VISA库实现GPIB通信一段VC写的VISAGPIB控制代码注意事项:1、必须先安装AgilentIOLibrary驱动,本人添加的是默认位置的库;装了驱动后有很多很好的文档C:\ProgrammFiles\Agilent\IOLibrariesSuite\Manuals\visa.pdf2、安捷伦提供SICL和VISA两种库,不推荐使用SICL,因为VISA更通用。NI也用VISA,函数名一致

大家好,欢迎来到IT知识分享网。通过VISA库实现GPIB通信一段VC写的VISA GPIB控制代码

注意事项:

1、必须先安装Agilent IO Library驱动,本人添加的是默认位置的库;装了驱动后有很多很好的文档 C:\Programm Files\Agilent\IO Libraries Suite\Manuals\visa.pdf

2、安捷伦提供SICL和VISA两种库,不推荐使用SICL,因为VISA更通用。NI也用VISA,函数名一致,都是viOpenDefaultRM,viOpen,viPrintf,viQueryf,viClose

3、GPIB是用来控制电子仪器的,主要用在自动化控制,测试上。标准是SCPI。

4、其实不难,但要多实践,指示调用APD(头文件visa.h,库agvisa32.lib),APD常用的就是几个,viOpenDefaultRM,viOpen,viPrintf,viQueryf,viClose…还有viSetAttribute,viScanf等;

viSetAttribute(vi,VI_ATTR_TMO_VALUE,20000);
//超时时间s

其他的主要是SCPI命令,大多是标准化的,查查编程文档即可

5、较新的技术是:LXI(LAN Extention Interface),网口控制。因为一方面是GPIB接口较贵(3k-5k),设备也只能接十几个(通常足够了);

6、扫描时需要单次同步,这样才准确

7、应该多在Agilent和NI官网看看

8、好书:《NI-VISA Programmers Man》,《Agilent VISA User’s Guide》

9、自动搜索仪器,根据*IDN知道什么仪器

ViChar buffer[255];

ViRsrc mathes=buffer;

ViUInt32 nmatched;

ViFindList list;

viFindRsrc(defaultRM,”GPIB?*INSTR”,&list,&nmatched,matched);

viFindNext(list,matches);

viFindNext(list,matches);



viClose(list);

10、 测量多个数据可能用到strtok函数,或直接保存到一个数组里;    

11、至于GPIB规范,总线电缆包括根信号线和根地线。根信号线中,根为数据线,根 为接口管理线,根为握手线。IFC,ATN,了解即可。 

12、FORMAT ASCii | In  自动校准用,写多了也没什么意思了。

信号源? 

//信号源设置较少,主要设置频率和功率。?

viPrintf(vi_sig,?”FREQ?999MHz\n”);?

viPrintf(vi_sig,?”POW??0dBm\n”);? 

viPrintf(vi_sig,?”OUTP?ON\n”);?//射频开

viPrintf(vi_sig,?”MOD??ON\n”);?//调制开?其他滤波器什么的,很少用。? 

最新的仪器有有个很强大的功能,按下某个键即可显示其相应的SCPI命令,?于此我们不用查编程文档了,真是爽歪歪。?

viPrintf(vi_sig,”DM:IQ:STATE?ON\n”);? 

//?viPrintf(vi_4438c,?”OUTP:MOD:STAT?OFF\n”);//?

//?viPrintf(vi_4438c,”DM:STATE?ON\n”);

//频谱仪? 

viPrintf(vi_spec,?”SYST:DISP:UPDate?ON\n”);? 

viPrintf(vi_spec,?”FREQ:CENT?%dMHz\n”,m_cent_freq);?

viPrintf(vi_spec,?”FREQ:SPAN?%dMHz\n”,m_span);? 

viPrintf(vi_spec,?”DISP:WIND:TRAC:Y:RLEV?%ddBm\n”,m_rlevel);?

viPrintf(vi_spec,?”BAND:VID?%dkHz\n”,m_rbw);?

viPrintf(vi_spec,?”BAND:RES?%dkHz\n”,m_vbw);?

viPrintf(vi_spec,?”CALC:MARK:AOFF\n”);

//?

char?buf[255];? viPrintf(vi_spec,”INIT:CONT?OFF\n”);?

viPrintf(vi_spec,”INIT:IMM;*WAI\n”);?

viPrintf(vi_spec,”CALC:MARK:MAX\n”);?

viPrintf(vi_spec,”*WAI\n”);? 

viQueryf(vi_spec,”CALC:MARK:Y?\n”,”%t”,buf);?

viPrintf(vi_spec,”*WAI\n”);? 

viPrintf(vi_spec,”INIT:CONT?ON\n”);

viPrintf(vi_spec,?”SWE:TIME?2s\n”);

//功率计 /*  

viPrintf(vi_boonton,”SENS:CORR:OFFS 31dBm\n”);//外部补偿电平 

viPrintf(vi_boonton,”DISP:TRAC:VCENT 55dBm\n”);//参考电平 

viPrintf(vi_boonton,”TRIG:LEV 40dBm\n”);//触发电平  

viPrintf(vi_boonton,”DISP:PULS:TIMEBASE 10us\n”);//时间单位 

viPrintf(vi_boonton,”DISP:TRAC:VSCALe 5dB\n”);//db/格 

viPrintf(vi_boonton,”*CLS\n”);  

viPrintf(vi_boonton,”CALC:MODE PULSE\n”);  

viPrintf(vi_boonton,”DISP:PARA:MODE MEAS\n”);   

viPrintf(vi_boonton,”SENS:CORR:OFFS 0\n”);//0dB//外部补偿电平 

viPrintf(vi_boonton,”TRIG:LEV 0\n”);//触发电平  

viPrintf(vi_boonton,”DISP:TRAC:VCENT 0\n”);//参考电平 

viPrintf(vi_boonton,”DISP:TRAC:VSCALe 5\n”);//db/格10 

viPrintf(vi_boonton,”TRIG:DEL 0\n”);//触发事件位置s 0  

viPrintf(vi_boonton,”DISP:PULS:TIMEBASE 5us\n”);//pow 

viPrintf(vi_boonton,”DISP:PULS:TIMEBASE 5us\n”); 

viPrintf(vi_boonton,”*WAI\n”);  

// viQueryf(vi_boonton,”FETCH:INTER:MAX ?\n”,”%t”,buf); 

viQueryf(vi_boonton,”FETCH:ARRAY:AMEA:POW  ?\n”,”%t”,buf);

viPrintf(vi_boonton,”TRIG:SLOP POS\n”);  

viPrintf(vi_boonton,”DISP:PULS:TIMEBASE 100ns\n”); 

viPrintf(vi_boonton,”*WAI\n”);  

viQueryf(vi_boonton,”FETCH:ARRAY:AMEA:TIM ?\n”,”%t”,buf_time); 

viQueryf(vi_boonton,”FETCH:INTER:MAX ?\n”,”%t”,buf_p);//0410 

viQueryf(vi_boonton,”FETCH:ARRAY:AMEA:POW  ?\n”,”%t”,buf_p); 

viPrintf(vi_boonton,”*WAI\n”); 

str_time=buf_time;count=0;   

/测试下降沿  

viPrintf(vi_boonton,”TRIG:SLOP NEG\n”); 

viPrintf(vi_boonton,”*WAI\n”);  

viQueryf(vi_boonton,”FETCH:ARRAY:AMEA:TIM ?\n”,”%t”,buf_time); 

viQueryf(vi_boonton,”FETCH:ARRAY:AMEA:POW  ?\n”,”%t”,buf_p2); 

//viQueryf(vi_boonton,”FETCH:INTER:MAX ?\n”,”%t”,buf_p2);//均值

viPrintf(vi_boonton,”*WAI\n”);?

//viQueryf(vi,”FETCH:INTER:AVER?\n”,”%t”,buf);READ:INTER:AVER?

viQueryf(vi,”FETCH:INTER:MAX?\n”,”%t”,buf);?READ:INTER:MAX??

//?

viPrintf(vi_zvb,?”SYST:DISP:UPDate?ON\n”);?

viPrintf(vi_zvb,?”SWE:COUnt?%d\n”,m_point);? 

viPrintf(vi_zvb,?”CALC:PAR:SEL?’CH1_S11_1’\n”);?

viPrintf(vi_zvb,?”CALC:PAR:DEF?’My_S11′,s11\n”);?

//? 

viPrintf(vi_zvb,?”CALCulate1:PARameter:SELect?’Ch1Trc2′?’S21’\n”);?? 

viPrintf(vi_zvb,?”SYST:DISP:UPDate?ON\n”);?

viPrintf(vi_zvb,?”CALC:FORM?PHAS\n”);

viPrintf(vi_zvb,?”FORMat?ASCII\n”);? 

viQueryf(vi_zvb,?”INITiate1:CONTinuous?OFF;*OPC?\n”,”%”,?ValueStr);?

viPrintf(vi_zvb,?”SENS1:FREQ:STAR?1000MHz\n”);?

viPrintf(vi_zvb,?”SENS1:FREQ:STOP?1125MHz\n”);?

viPrintf(vi_zvb,?”SENS1:SWE:POIN?126\n”);?

viPrintf(vi_zvb,?”OUTP1??OFF\n”);?

viPrintf(vi_zvb,?”SOUR:POW?-7\n”);?

viPrintf(vi_zvb,”CALC1:MARK1?ON\n”);

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22904.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信