找回密码
 注册
搜索
查看: 1634|回复: 14

[讨论] CMU200 *OPC?指令问题!

[复制链接]
发表于 2008-2-21 18:33:39 | 显示全部楼层 |阅读模式
我用CVI6.0定义了两个按钮,
一个是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])
请高手赐教非常感谢!
 楼主| 发表于 2008-2-21 18:40:12 | 显示全部楼层
高手请赐教谢谢了!!
点评回复

使用道具 举报

发表于 2008-2-21 21:04:14 | 显示全部楼层
ibwrt(CMUBASE,"OPC?",5);的*OPC?的*是你漏写了,还是忘了!如果不是这个问题的话,试着在ibwrt(CMUBASE,"*RST",4);之前加个延时看看,复位命令的执行需要一段时间,很可能是RST命令还没执行完毕,你就发*OPC?命令,从而导致出错的。
点评回复

使用道具 举报

 楼主| 发表于 2008-2-22 08:59:38 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>suoliwen</I>在2008-2-21 21:04:14的发言:</B>
ibwrt(CMUBASE,"OPC?",5);的*OPC?的*是你漏写了,还是忘了!如果不是这个问题的话,试着在ibwrt(CMUBASE,"*RST",4);之前加个延时看看,复位命令的执行需要一段时间,很可能是RST命令还没执行完毕,你就发*OPC?命令,从而导致出错的。</DIV>


*是我漏写了~你所说的加个延时好象不管用,他不是没执行*RST,或没执行*OPC?而是感觉好象有时候接收指令ibrd(CMUBASE,BUFF,sizeof(BUFF));//char BUFF[100]有时候不起作用,不起作用的时候CVI6.0提示Function ibrd :(iberr ==6[0x6])
点评回复

使用道具 举报

发表于 2008-2-22 09:00:47 | 显示全部楼层
建议summersdw不要再用ibrd、ibwrt,不要再用IEEE488.2了,改用VISA,虽然实际上基本是一个东西
用VIVQueryf试一下
另,*RST后建议稍加延迟再*OPC?
点评回复

使用道具 举报

 楼主| 发表于 2008-2-22 09:14:53 | 显示全部楼层
刚入门仪器控制,VISA不是很会用啊~IE488.2写会有什么问题吗?
点评回复

使用道具 举报

发表于 2008-2-22 09:50:15 | 显示全部楼层
berr ==6应该是提示操作中断,一般情况下,当一个命令还未完成,就执行另一命令时,容易出现这个问题。IE488.2本身没有什么问题,但使用他对仪器操作比较麻烦,经常容易出现一些问题,需要对GPIB总线原理比较懂才行。VISA的大部分命令是在IE488.2命令的基础上封装而成了,而且增加了一些总线控制方面的动作,使用比较简单。一句话,在你获得仪器资源句柄后,所要做的就是对该仪器句柄发出命令和读取相应了,没有附加的动作。你可以试试使用VISA。
点评回复

使用道具 举报

发表于 2008-2-22 10:12:50 | 显示全部楼层
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.
点评回复

使用道具 举报

发表于 2008-2-22 10:13:44 | 显示全部楼层
上面就是iberr=6的说明
你的timeout是多少?
点评回复

使用道具 举报

发表于 2008-2-22 10:17:51 | 显示全部楼层
另外,你再试一下每个命令加"\n",长度也要加1
例如:*RST\n,5
点评回复

使用道具 举报

 楼主| 发表于 2008-2-22 10:26:12 | 显示全部楼层
非常感谢楼上两位的解释,我试试用VISA写,有问题的话我会继续讨教,到时候还希望不吝赐教~再次非常感谢!!
点评回复

使用道具 举报

 楼主| 发表于 2008-2-22 10:28:47 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>cuijw</I>在2008-2-22 10:13:44的发言:</B>
上面就是iberr=6的说明
你的timeout是多少?
</DIV>



好象没有设置什么timeout!
点评回复

使用道具 举报

发表于 2008-2-22 10:36:23 | 显示全部楼层
*RST需要的时间比较长,应该将TimeOut设的长一点
再,你可以用NI Spy监视一下NIGPIB卡所有的指令、返回值
NI Spy有的时候很有用
再有问题,可以把NISpy监视结果存成txt文件,放上来,大家可以分析一下(注意不要用*.spy格式,这个格式在不同版本情况下不兼容)
点评回复

使用道具 举报

 楼主| 发表于 2008-2-22 14:06:03 | 显示全部楼层
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吧~
再次非常感谢!!
点评回复

使用道具 举报

发表于 2009-6-12 10:01:41 | 显示全部楼层

有关于8960与CMU200的所有资料(免费大放送)

请大家在我的帖子里去找,我已经把8960与CMU200的测试指导全部发上去了

关于GSM/GPRS/EGPRS/CDMA2000/1XEVDO/WCDMA/HSDPA

一步一步交你设置的,不懂也可以电话沟通:杨先生 13924655143

本文来自:我爱研发网(52RD.com) 详细出处:http://www.52rd.com/bbs/Detail_RD.BBS_160419_91_1_1.html
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-9-21 18:31 , Processed in 0.047844 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表