在VISA读/写后出现错误-1073807298

更新 Jul 8, 2022

适用于

驱动

  • NI-VISA

问题详述

我正在尝试使用NI-VISA写入和读取仪器,但是我持续得到“在一个未识别的位置发生错误-1073807298(Hex 0xBFFF003E)为什么会出现这样情况?设备是否在工作呢?
 

解决方案

1.确保您的代码打开并关闭所有VISA会话引用。大多数VISA LabVIEW代码将遵循以下模式:1.打开VISA引用 2. 执行读写 3.关闭VISA引用。有关此代码结构的示例,请参阅LabVIEW中的示例程序简单串口VI,查找方法是帮助>>查找范例,在浏览中选择硬件输入与输出>>串口>>简单串口.vi


2.确保没有任何进程会干扰设备的I/O端口(Modbus I/O,I/O服务器等)。您可以在Distributed System Manager进行检查。

3.问题可能来自VISA写入IRP_MJ_FLUSH_BUFFER请求时,导致设备发出无效的设备请求响应。默认情况下,每次VISA读写操作后,通过RS-232进行通信时都会调用VISA Flush。您可以更改VISA缓冲区设置以防止调用VISA Flush,从而避免此错误。

如果在应用程序开始时(打开VISA之后, 在任何读取或写入之前)调用VISA Set I/O Buffer功能,将掩码设置为48(16 + 32,其中16是接收缓冲区的掩码,32是发送缓冲区的掩码),并将大小设置在从4k到期望读取或写入的最大值之间,这将导致flush命令不被执行。

重要提示: 设置时请确保上限。如果上限不足以容纳您正在传输或接收的数据,则可能导致计算机崩溃。

相关信息

如果不调用flush函数,NI-VISA会将所有的写入分割成500毫秒的数据块,并在每次写入后调用flush。通过告知NI-VISA永远不会使用超过4k或超过设定大小的值,NI-VISA则不会调用flush。