今回は,測定機器をPyVISAパッケージを使ってコントロールする際に,測定機器からの応答を待つために使う,timeoutとdelayのそれぞれに関して説明します.
まず,timeoutですが,これは測定機器に対して設定します.具体的には,inst.timeout = 1000
という具合で,ミリ秒単位で設定します(instに測定機器が割り当てられている).
timeoutが設定されると,query関数を使って測定機器に問い合わせる際に,測定機器からの応答をtimeoutで設定された時間待ちます(但し,timeoutには0ではないデフォルト値が設定されていますので,timeoutに値を設定しなければ,この0でないデフォルト値が有効となります).
待ち時間中に応答があれば,次の処理に移ります.
これに対し,delayは,個別のquery関数毎に設定し(省略も可能),上記に示したtimeoutと異なり,測定機器へSCPIコマンドを送信した後,delay秒経過した時点で,測定機器からの応答を得ます.つまり,delay秒の間,測定機器からの応答を待つのではなく,delay秒経過するまで応答を得ることはしません.
例えば,測定機器からの応答に1秒かかるケースで,timeoutが10秒の場合は1秒で応答を得ることになりますが,delayが10秒の場合は10秒で応答を得ることになります.
これだけだと,delayではなくtimeoutに待ち時間を設定した方が良い気がします.
但し,timeoutは,測定機器の全ての応答に対して待ち時間を設定してしまうのに対し,delayは個別のquery関数に対して設定できるので,使い分けるのが実用的です.
測定機器の各種モードの切り替えなど,測定機器をコントロールする大半のコマンドは,待ち時間を意識しなくても良いケースが大半です(timeoutのデフォルトの設定値で問題ない).
これに対し,ファンクション・ジェネレータに巨大な任意波形データを設定したり,オシロから同じく巨大な測定データを取得したりするケースでは,該当するコマンドを実行後,数秒の待ち時間(この間に測定機器がデータの転送処理を行う)が必要になりますので,delayを使って個別のquery関数で応答を待つようにするのが良いのではないでしょうか.
前回の投稿では,エヌエフ回路設計社製のファンクション・ジェネレータで任意波形データの設定に関して,設定しようとする任意波形データが問題なく設定できたかどうか,専用の不具合検出コマンドを使うことを紹介しました.この不具合検出コマンドをquery関数で問い合わせるケースなど,delayを使って待ち時間を指定するケースに当てはまります.
0 件のコメント:
コメントを投稿