MATLAB GPIB-如何从状态字节寄存器中读取可用的消息



标题说...

我想检查通过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。

中设置了MAV位
>> strcmp(fid.BusManagementStatus.ServiceRequest, 'on')

缺点是在我的ACTUAL COMMANDS执行过程中无法检查错误。如果我这样做,它可能会产生错误...:]

相关内容

  • 没有找到相关文章

最新更新