0

PyVisa/GPIB を使用してテスト システムを制御しています。このシステムは、2 つの別個のテスター (A と B) とラップトップで構成されています。ラップトップはテスター A からの GPIB メッセージを受動的にリッスンし、ラップトップが受信するとテスター B をトリガーします。

次のコードを使用して、テスター A からのイベントを受動的にリッスンしています。

rm = visa.ResourceManager()
con = "GPIB0::3"
tester_A = rm.get_instrument(con, timeout=5000)
while True:
    event = None
    try:
        event = tester_A.read_raw()
    except VisaIOError:
        logger.warning("Timeout expired.")
    if event != None:
        # Do something

テスター A からのイベントをリッスンして応答するより良い方法はありますか? GPIB 経由でこのシステムを制御するより良い方法はありますか?

4

1 に答える 1

2

あなたが説明したアプローチはうまくいきますが、あなたが経験しているように、楽器がいつ反応するのかよくわからない場合は理想的ではありません. 解決策は、GPIB のサービス リクエスト (SRQ) 機能を使用することにあります。

簡単に言うと、GPIB 接続はさまざまなステータス レジスタも提供し、たとえば、測定器がオンになっているかどうか、エラーが発生しているかどうかなどをすばやく確認できます (きれいな画像)。このレジスタの一部のビットは、特定のイベントの後 (たとえば、操作の完了時) にオンまたはオフになるように設定できます。これは、時間がかかると思われる一連のコマンドを実行するように計測器に指示し、ステータス レジスタのビットを反転して実行が完了したことを示すことを意味します。

ソフトウェア内から、これを利用するために多くのことを実行できます。

  • 操作が完了したことをステータス ビットが示すまで、while ループをループし続けます。これは非常に粗野であり、お勧めしません。
  • VISA にはviWaitOnEvent、ステータス ビットが操作の完了を示すまで待機できる機能があります。これは、計測器が測定を行うまですべての実行を停止する必要がある場合に適したソリューションです。
  • VISA では、ステータス ビットが反転したときに発生するイベントを作成することもできます。これは、イベントを処理するイベント ハンドラを作成できるため、特に優れたソリューションです。
于 2016-01-07T13:24:20.510 に答える