为什么当我对串口使用VISA进行数据流控制时缓冲区溢出



硬件: PXI/CompactPCI>>Controllers

问题: 我在LabVIEW  RT上用NI-VISA控制串口时提示缓冲区溢出。流控制能不能阻止FIFO溢出?

解答:

这个问题由一些因素引起,包括您电脑的速度,波特率的设置,电脑串口FIFO的大小和仪器传递给串口数据FIFO的大小。

流控制会在向处理器发送消息或向其他仪器发送退出请求前等待缓冲区中指定的字节数。在高波特率时,串口会收到缓冲区流控制完成与仪器停止传输间的几个字节。这些额外的字节在一个高优先级的进程独占RT目标处理器时会更多,因为这类进程优先级高于VISA中断,处理器也就不会有任何动作直到高优先级的进程结束。

默认的VISAWindows设置的16字节是14字节及剩下的2个用于向设备发送消息的字节。在高波特率而电脑速度很低时,很有可能在串口请求处理器发送给仪器停止传输命令期间收到多于4个字节的内容。

LabVIEW RT上使用NI串口硬件

打开MAX,在设备与接口下找到出现问题的串口。在单击COM端口后,会出现高级设置选项卡。这些设置会允许您调低接收缓冲区的大小,你可以调低这个设置直到问题解决。

CompactRIOFieldPoint

打开MAX并找到与控制器上的串口,您会注意到高级选项卡并不显示。因此,我们必须修改在控制器上的一些文件而不再单单调高硬件流控制了,修改的niserial.dbs文件在c:\ni-rt\system路径上。可以直接在SerialPortName=”COM1”这一行下面添加:RXFIF=1.RXFIFO可能的值可以取为1,4,814。修改这个文件可以使得您可以改变硬件流控制的触发值。

您还可以在LabVIEW RT上使能第二中断控制。当第二中断控制使能,I/O处理就以低于实时优先级运行。使用第二中断可以降低实时优先级循环的抖动使得串口硬件中断更为确定。当然,这样会降低I/O的性能也增加了RX FIFO溢出的可能性。

为了使能或禁用这些特性,完成以下步骤:

1.     复制主机上的niserial.dbs 文件到RT目标的/ni-rt/system

2.     在该文件的键值SecondaryInterrupts通过设置1或设置0来控制使能或禁用。

3.     下载更新的niserial.dbs文件到目标下,覆盖原来路径下的该文件

4.     重启您的RT目标


Windows

为了修复问题您需要打开设备管理器,然后找到您想要修改的COM端口打开属性,然后单击高级选项,您将会看到一个滑条允许您改变输入缓冲区的值。

 

默认值已经在大多数情况下够用了,如果您遇到了缓冲区溢出的情况,您就需要降低该值。这样就能引起更多的中断为处理器获取并降低向UART的写入速度,如果您增加该值将使FIFO溢出。



相关链接:

附件:


buffer_setting.JPG - buffer_setting.JPG
RTbuffers_small.JPG - RTbuffers_small.JPG


报告日期: 07/15/2004
最近更新: 07/25/2011
文档编号: 3BE87GW3