[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[整理]VISA32调用频谱仪,viRead方法超时 timeout occurred

上一篇:[转帖]一个好使的dom ready的javascript代码~~
下一篇:[备忘]VISA32调用,函数返回值VI_SUCCESS_MAX_CNT和VI_SUCCESS的不同~~

添加日期:2012/9/6 10:27:18 快速返回   返回列表 阅读9708次
Java通过JNA调用VISA32,控制频谱仪,

发送“*CAL?”命令(仪器校准,时间较长,大概10秒左右)后,

使用viRead方法读取结果超时,结果的描述是:timeout occurred

debug后,发现viRead方法憋两秒就返回了~~

搜索后,得知可以设置超时时间。
---------------------------------------------------------------
result = viRead(ViSession vi, ViPBuf buf, ViUInt32 count, ViPUInt32 retCount);

viRead是同步执行的方法,直到满足以下某个条件才会返回:
<1>超时
<2>接收到希望的字节数
<3>接收到终结字符或END指示符

参数retCount将被设置为实际返回的字节数,可以用来判断是否有数据返回。
函数返回值,可以用来判断是否超时。
-------------------------------------------------------------------
Why do I Receive Timeout Error -1073807339 on VISA Read or Write? 
http://digital.ni.com/public.nsf/allkb/874B379E24C0A0D686256FCF007A6EA0?OpenDocument

超时属性 VI_ATTR_TMO_VALUE 默认是2000毫秒。
可以使用viSetAttribute方法设置该属性,如下修改为15秒。

viSetAttribute( vi, VI_ATTR_TMO_VALUE, 15000); 

设置超时时间后,影响该session中的所有read和write方法。

那么,只要在需要较长的命令前执行该语句即可,
执行完再修改为默认的两秒。

设置终结字符的方法:
vs = viSetAttribute( vi, VI_ATTR_TERMCHAR, 0x0A); 
vs = viSetAttribute( vi, VI_ATTR_TERMCHAR_EN, VI_TRUE); 
 

评论 COMMENTS
guest472089819
2019/8/8 19:00:26
我延迟了超时时间到4s,还是依然read不到数据,咋办呀?
guest1002758238
2019/8/11 13:06:07
那就再改大,30秒之类的。

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved