LabVIEW在快速传输速率下丢失UDP数据包
当UDP数据包以高数据速率(大于2Mb/s)传入时,它们开始丢失,特别是当CPU被其他任务加载时。为什么这些数据包会丢失?
LabVIEW在高数据速率下可能无法跟上UDP套接字缓冲器的步伐。仅当LabVIEW将缓冲器移入队列或将它写入文件时,才会发生此问题。一种解决方案是增加Windows套接字缓冲区的大小。这为LabVIEW提供了更多时间来操作缓冲器内容,并在传入数据溢出套接字缓冲器之前执行下一次缓冲器读取。
您可以通过调用wsock32.dll中的设置点函数来设置Windows套接字缓冲区的大小。附件的VI,用于自动设置和回读定义的套接字连接上的缓冲区大小,以及使用缓冲区集/读取VI的示例VI。对于TCP,可以使用类似的方法来提高传输速率。这些示例设置套接字缓冲区的大小(以字节为单位)。
注意:UDP不是无损协议,因此无法保证完全交付。增加Windows套接字缓冲区大小可能允许以更高的速率读取UDP数据包,但是,如果应用程序依赖于无损连接,则应使用另一种协议。
LabVIEW支持若干种底层协议,用于计算机之间的通信。
每种协议都与其它协议不同,尤其是引用远程计算机网络地址的方式。通常协议之间是不兼容的。例如,如果要在macOS和Windows之间通信,必须使用这两个平台上都能正常工作的协议,比如TCP。
TCP和UDP
LabVIEW支持的所有平台都可以使用传输控制协议(TCP)和用户数据报协议(UDP)。TCP是一种可靠的、基于连接的协议。它提供错误检测,确保数据按顺序并且不重复地到达。基于这些原因,TCP通常是网络应用程序的最佳选择。
尽管UDP性能比TCP更高且不需要连接,但UDP并不保证传输能够到达目的地。UDP通常用于不需要保证传输到达目的地的应用程序。例如,当一个应用程序以足够高的频率向目的地传输数据时,一部分数据段的丢失是无关紧要的。
使用打开UDP多点传送VI代替打开UDP函数,就可打开能在多点传送IP地址之间读写UDP数据的连接。多点传送IP地址定义了一个多点传送组。多点传送IP地址的范围是224.0.0.0到239.255.255.255。如客户机要加入一个多点传送组,客户机即订阅了该组的多点传送IP地址。在客户端获取了多点传送组后,该客户端可接收发送到多点传送IP地址的数据。
需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目问题,可联系我们。