标题说...
我想检查通过GPIB连接的设备的SBR寄存器。我有兴趣阅读Mav Bit 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,但我找不到任何东西。Matlab的签证司机帮助直接与驾驶员或公共汽车进行通信的话题保持沉默。
我还试图检查busmanagementstatus而无用。
供参考,我使用的是MATLAB R2011b
,带有32位Agilent VISA
驱动程序,启用GPIB的设备为Agilent E4980A LCR Meter
。感谢您的任何帮助。
好吧,我认为我已经弄清楚了。如果我错了,请纠正我...
首先,我需要预测需要检查可用消息,因为在我的解决方案中,我将无法检查sbr。
然后,在我的实际命令(可能会产生一些输出(之前,我需要掩盖服务请求启用寄存器(SRER(以仅允许MAV位。那就是这样做的(以示例为例(:
>> fprintf(fid, '*SRE 16');
>> fprintf(fid, '...ACTUAL COMMANDS THAT ARE TO BE EXECUTED...');
现在,我可以使用上述BusManagementStatus
命令检查设备是否发送服务请求。以下命令返回true iff iff sbr。
>> strcmp(fid.BusManagementStatus.ServiceRequest, 'on')
缺点是在我的ACTUAL COMMANDS
执行过程中无法检查错误。如果我这样做,它可能会产生错误...:]