エラー -1073807298: VISA読み取り/書き込み後にエラーが発生する

更新しました Jul 8, 2022

使用製品

ドライバ

  • NI-VISA

問題

NI-VISAを使用して計測器に書き込みを試みていますが、エラー -1073807298(Hex 0xBFFF003E)が不明位置で発生し続けます。なぜエラーが発生するのですか?回避策はありますか?
 

解決策

  1. コード内で開いているVISAセッションリファレンスがすべて閉じるようにしていることを確認します。VISAを使用したほとんどのLabVIEWコードは、以下の手順を行います。
    1. VISAリファレンスを開きます。
    2. 読み取りと書き込みを実行します。
    3. VISAリファレンスを閉じます。

    このコード構造の例については、ヘルプ>>サンプルを検索からLabVIEWのサンプルプログラムSimple Serial.viを参考にしてください。
     
  2. デバイスのI/Oポート(Modbus I/O、I/Oサーバなど)を妨害するプロセスがないことを確認します。 これは分散システムマネージャで確認できます。
     
  3. この問題は、VISA Write IRP_MJ_FLUSH_BUFFER要求がデバイスからのINVALID DEVICE REQUEST応答を引き起こしている可能性があります。デフォルトでは、VISA読み取りおよび書き込み後に、RS-232経由で通信するときにVISA I/Oバッファ排出の呼び出しが続きます。このエラーを回避するために、VISAバッファ設定を変更して、VISA I/Oバッファ排出の呼び出しを実行しないようにすることができます。

    アプリケーション開始時(VISAを開く関数の後、読み取りまたは書き込み関数の前)にVISA I/Oバッファ設定関数を呼び出し、マスクを48(16 + 32、16は受信バッファのマスク、32は送信バッファのマスクです)、サイズを4000から読み書きを行う想定最大量の間の値に設定すると、排出コマンドが実行されなくなります。

    重要: 上限を設定してください。送信または受信しているデータに対して十分な大きさでない場合、コンピュータがクラッシュする可能性があります。

追加情報

排出関数を呼び出さない場合、NI-VISAはすべての書き込みを500ミリ秒のチャンクに分割し、書き込みごとに排出します。NI-VISAに4000以上の値、またはサイズを設定する値を使用しないようにすることで、NI-VISAは排出を呼び出しません。