CMU200 *OPC?指令问题!
一个是A:
ibwrt(CMUBASE,"*RST",4);
ibwrt(CMUBASE,"OPC?",5);
ibrd(CMUBASE,BUFF,sizeof(BUFF));//char BUFF[100]
第2个是B:
ibwrt(CMUBASE,"*CLS",4);
问题是:
为什么运行A后,再运行B,有时候会在B之前提示一条"-410 Query INTERRUPTED",有时候正常,搞不懂为什么会这样,在调试状态时候CVI报错信息为Function ibrd :(iberr ==6[0x6])
请高手赐教非常感谢!
高手请赐教谢谢了!
ibwrt(CMUBASE,"OPC?",5);的*OPC?的*是你漏写了,还是忘了!如果不是这个问题的话,试着在ibwrt(CMUBASE,"*RST",4);之前加个延时看看,复位命令的执行需要一段时间,很可能是RST命令还没执行完毕,你就发*OPC?命令,从而导致出错的。
*是我漏写了~你所说的加个延时好象不管用,他不是没执行*RST,或没执行*OPC?而是感觉好象有时候接收指令ibrd(CMUBASE,BUFF,sizeof(BUFF));//char BUFF[100]有时候不起作用,不起作用的时候CVI6.0提示Function ibrd :(iberr ==6[0x6])
建议summersdw不要再用ibrd、ibwrt,不要再用IEEE488.2了,改用VISA,虽然实际上基本是一个东西
用VIVQueryf试一下
另,*RST后建议稍加延迟再*OPC?
刚入门仪器控制,VISA不是很会用啊~IE488.2写会有什么问题吗?
berr ==6应该是提示操作中断,一般情况下,当一个命令还未完成,就执行另一命令时,容易出现这个问题。IE488.2本身没有什么问题,但使用他对仪器操作比较麻烦,经常容易出现一些问题,需要对GPIB总线原理比较懂才行。VISA的大部分命令是在IE488.2命令的基础上封装而成了,而且增加了一些总线控制方面的动作,使用比较简单。一句话,在你获得仪器资源句柄后,所要做的就是对该仪器句柄发出命令和读取相应了,没有附加的动作。你可以试试使用VISA。
EABO Error Code
EABO indicates that an I/O operation has been canceled, usually due to a timeout condition. Other causes are calling ibstop or receiving the Device Clear message from the CIC while performing an I/O operation. Frequently, the I/O is not progressing (the Listener is not continuing to handshake or the Talker has stopped talking), or the byte count in the call which timed out was more than the other device was expecting.
Solutions
Use the correct byte count in input calls or have the Talker use the END message to signify the end of the transfer.
Lengthen the timeout period for the I/O operation using ibtmo.
Make sure that you have configured your device to send data before you request data.
上面就是iberr=6的说明
你的timeout是多少?
另外,你再试一下每个命令加"\n",长度也要加1
例如:*RST\n,5
非常感谢楼上两位的解释,我试试用VISA写,有问题的话我会继续讨教,到时候还希望不吝赐教~再次非常感谢!
好象没有设置什么timeout!
*RST需要的时间比较长,应该将TimeOut设的长一点
再,你可以用NI Spy监视一下NIGPIB卡所有的指令、返回值
NI Spy有的时候很有用
再有问题,可以把NISpy监视结果存成txt文件,放上来,大家可以分析一下(注意不要用*.spy格式,这个格式在不同版本情况下不兼容)
ibwrt(CMUBASE,"*CLS",4);
ibwrt(CMUBASE,"*IDN?",5);
Delay(2);
memset(buff,0,100);
ibrd(CMUBASE,buff,sizeof(buff));
ibwrt(CMUBASE,"*RST",4);
Delay(10);
ibwrt(CMUBASE,"*OPC?",5);
memset(buff,0,100);
ibrd(CMUBASE,buff,sizeof(buff));
ibwrt(CMUBASE,"*CLS",4);
这样就可以了~加了10S延时,又清空了buff,就可以了~非常感谢各位指教!
初步看了一下VISA的,感觉比较难懂~还是先用IE488.2吧~
再次非常感谢!
请大家在我的帖子里去找,我已经把8960与CMU200的测试指导全部发上去了
关于GSM/GPRS/EGPRS/CDMA2000/1XEVDO/WCDMA/HSDPA
一步一步交你设置的,不懂也可以电话沟通:杨先生 13924655143