正如标题所说......
我想查看通过SBR连接的设备的GPIB注册表。我有兴趣阅读MAV第4位,如果乐器有想要寄给我的东西,应该设置它。
问题是,为了检查SBR,我不可避免地要发送另一个查询(*STB?
),默认情况下会清除设备输出缓冲区。 换句话说,每当我检查是否有东西需要阅读时,我只是通过查找删除它。以下是重现它的代码,问题是最后一次调用fscanf()
:
>> fid = gpib('agilent', 7, 26);
>> fopen(fid)
>> fprintf(fid, '*SRE 255; *SRE?') % Enable everything in SBR
>> fscanf(fid) % Returns +191 as expected (255 - 64 for MSS)
>> fprintf(fid, '*IDN?') % Make any query...
>> fprintf(fid, '*STB?') % Read SBR
% The line above generates device Query Error (beep)
>> fscanf(fid) % << Returns +0 !!!
>> fclose(fid) % Just to prevent flames :]
我怀疑,有一些方法可以在不查询设备的情况下检查SBR,但我找不到任何东西。 VISA驱动程序的MATLAB帮助是关于直接与驱动程序或总线通信的主题。
我也尝试检查BusManagementStatus但没有用。
作为参考,我使用MATLAB R2011b
,使用32位Agilent VISA
驱动程序,启用GPIB的设备为Agilent E4980A LCR Meter
。谢谢你的帮助。
答案 0 :(得分:0)
首先,我需要预测需要检查可用消息,因为在我的解决方案中,我无法检查{{3中设置的错误队列,主摘要和其他位。 }}
然后,在我的实际命令(可能产生一些输出)之前,我需要屏蔽SBR以仅允许MAV位。多数民众赞成这样做(以下是有问题的例子):
>> fprintf(fid, '*SRE 16');
>> fprintf(fid, '...ACTUAL COMMANDS THAT ARE TO BE EXECUTED...');
现在我可以使用前面提到的Service Request Enable Register (SRER)命令检查设备是否发送服务请求。如果在SBR中设置了MAV位,则以下命令返回true。
>> strcmp(fid.BusManagementStatus.ServiceRequest, 'on')
缺点是在ACTUAL COMMANDS
执行期间无法检查错误。如果我这样做,可能会产生错误......:]