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

[整理]VISA控制频谱仪,SCPI命令出错的判断~~

上一篇:[备忘]VISA32,执行*RST后频谱仪界面不动~~
下一篇:[备忘]安装visual studio,点击下一步,没反应~~~

添加日期:2012/9/27 15:33:14 快速返回   返回列表 阅读6919次
======================================================
Common SCPI Errors

-440      Query unterminated [query received after query for indefinite response]

-410      Query interrupted [query followed by DAB or GET before response complete]

发送一个查询命令后,该命令并没有数据返回(如命令出错),此时去读取数据,就会报"Query UNTERMINATED",查询没有结束的意思?

发送一个查询命令后,该命令有数据返回,但是还没有读取,或者没有读取完毕,
此时,后面,又发送了一个查询命令,则报“Query INTERRUPTED”,查询被中断的意思。
=======================================================
如命令本身写错了,或参数范围错误等等,如何判断SCPI命令是否成功呢?

(1)发送命令后,再使用“SYST:ERR?”,可以查询错误信息。
如成功时,返回“+0,"No error"”
命令错误时,返回“-113,"Undefined header"”

在设置命令后,接“SYST:ERR?”并没有问题。
在查询命令后,如果查询命令出错了,也没有问题。
如果查询命令正常,会有数据返回,此时接“SYST:ERR?”,会报“Query INTERRUPTED”。

所以,在“SYST:ERR?”之前,应该判断一下,是否有错误发生。

(2)发现了viReadSTB方法,它返回设备的status register。
开始以为它是一个简单的成功与否的标志,
if(status!=0){
    ...发送syst:err?
    ...显示错误信息
}
后来发现,有时候不正确。

然后看了这个文章:
Using Instrument Status Registers and Service Requests in LabVIEW
http://www.ni.com/white-paper/2927/en
才发现,这个status register还真是复杂啊~~~

它由Standard Event Status Register和两个 enable registers组成。
简单来说,status register由8个bit组成
00001110
前四位是保留字节,第5位为1,表示返回数据可用了,第6位为1,表示有事件发生了,第7位为1,有点晕,具体看文章吧~~~

那只要status的第6位为1,就说明可能有错误发生了
if ((status.getValue() & 0x0004) == 0x0004){
    ...发送syst:err?
    ...显示错误信息
}

该status register取得后,会自动置空,不会影响下次结果。

(3)连接设备后,一般会使用"*RST"命令,该命令并没有置空status register,
所以还需要使用*CLS命令才行。

(4)status register的另一个作用,是轮询状态,
如发送查询命令后,在一个循环里,不停的轮询返回数据是否可用,
直到可用时,才读取数据。
上面,我们只是想知道命令是否出错,所以不需要轮询,
命令发出后,命令是否错误,马上就知道了。
 

评论 COMMENTS
没有评论 No Comments.

添加评论 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