2017-05-03 6 views
1

タイトルとして...Matlab GPIB - Status Byte RegisterからAVABを読むには?

GPIBに接続されたデバイスのSBRの登録を確認したいと思います。私は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

OK、私はそれを理解したと思います。私が間違っている場合は、私を修正してください...

私の解決策ではエラーキュー、マスター要約などをチェックすることができないので、最初に利用可能なメッセージを確認する必要があります。ビットは、SBRに設定されています。

実際のコマンド(出力が出るかもしれません)の前に、Service Request Enable Register (SRER)をマスクしてMAVビットのみを許可する必要があります。ザッツので(問題の例から次)のように行わ:

>> fprintf(fid, '*SRE 16'); 
>> fprintf(fid, '...ACTUAL COMMANDS THAT ARE TO BE EXECUTED...'); 

今私は、デバイスは、前述のBusManagementStatusコマンドを使用して、サービス要求を送信するかどうか、確認することができます。次のコマンドは、SBRにMAVビットが設定されている場合にtrueを返します。

>> strcmp(fid.BusManagementStatus.ServiceRequest, 'on') 

デメリットは、ACTUAL COMMANDSの実行中にエラーをチェックする方法がないことです。私がそうすると、エラーが発生するかもしれません...:]

関連する問題