错误56:使用NI软件在网络设备之间通信时超时

更新 Jun 7, 2024

适用于

软件

  • LabVIEW
  • VeriStand

操作系统

  • NI Linux Real-Time
  • Windows

问题详述

  • 我正在尝试使用LabVIEW中的网络通信TCP/IP的API函数在网络设备之间进行通信,但VI超时出现错误56 - LabVIEW:网络操作超出了用户指定或系统时间限制(The network operation exceeded the user-specified or system time limit) 。我该怎么做才能解决这个问题?
  • 我正在尝试使用我的计算机与终端网络设备通信,但收到错误56。然而我可以在另一台计算机上成功运行相同的代码。发生了什么?
  • 我想部署一个VeriStand项目时收到一条错误消息,如下图所示。
VeriStand网关在部署系统定义文件时遇到错误(The VeriStand Gateway encountered an error while deploying the System Definition file)。
详细信息:
错误56发生在 Project Window.lvlib: Project Window.vi >> Project Window.lvlib: Command Loop.vi >> NI_VS Workspace ExecutionAPI.lvlib
: NI VeriStand - Connect to System.vi
可能的原因:
LabVIEW:网络操作超出了用户指定或系统时间限制。

解决方案

这种超时错误可能是由于错误地配置TCP/IP函数导致的,通常情况下只要正在接收数据,超时错误可以在没有损害的情况下清除。如果未收到数据,则下面有几个故障排除步骤可以尽量避免发生该错误。


如果使用特定的LabVIEW应用程序:

  • 确保生成错误的VI正确设置了超时值。比如:使用HTTP客户端下的“GET.vi”从慢速服务器接收体量较大的字符串时,默认的10秒超时时间可能不够。
  • 如果使用TCP/IP函数编写了可重入VI ,请尝试关闭可重入功能。因为可能会产生竞争状态,导致网络在写入或读取时变得忙碌从而发生超时。
  • 超时错误可能是您的应用程序的预期行为。使用读取TCP数据函数接收数据时,TCP函数将在超时期间等待指定的字节数。如果该函数未收到足够的数字,它将返回收到的数据并显示错误56。有关清楚错误的详细信息,请参阅从错误簇中清除指定错误
  • 确保网络电缆已正确连接到每个系统,或已正确建立无线网络连接。
  • 打开连接时,用IP地址代替域名来检查与域名服务器(DNS)相关的问题。
    • 示例:使用“http://74.125.224.72/”而不是“http://www.google.com”
  • 使用 telnet 命令检查 TCP 端口是否已打开,请参阅此文章 了解如何使用 telnet 命令。
    • 如果 telnet 命令显示与 TCP 端口的连接失败,请联系贵公司的 IT 部门寻求协助或请求允许计算机使用并访问该 TCP 端口。 某些时候 IT 部门出于安全目的会阻挡某些 TCP 端口。
  • 您还可以尝试导航到工具(Tools)» 选项(Options)» VI服务器(VI Server),将*加入到机器访问列表(Machine Access List)中,方法是点击列表底部的添加(Add),在计算机名称/地址字段中输入*,并确保选择允许访问(Allow access)。但是这将授予所有机器访问终端的权限。
  • 尝试使用ping命令访问相关网络设备,以验证设备是否仍处于连接并通信的状态。
  • 关闭计算机上安装的所有防火墙和杀毒软件以确保没有端口被屏蔽。
  • 确保两个设备位于同一子网上,并且具有相同的子网掩码。有关配置NI网络设备的更多信息,请参见NI MAX中连接到RT终端时出现“不一致的IP设置”
  • 检查过多的本地网络流量是否降低了您的网络通信速度,并导致传输时间超出预期。
  • 如果您正在使用FTP VI,请检查所使用的密码是否包含任何不可打印的字符或空格。
  • 确保发送信息的VI正在运行。
  • 如果通信部分放在子VI中,请尝试将其从子VI中取出,并查看它是否在子VI之外工作。
  • 尝试使用LabVIEW范例查找器中的范例“Simple TCP.lvproj”。
  • 如果使用循环重复读取和/或写入,请尝试在循环中插入等待函数 (大约200 ms)。


如果使用VeriStand:

  • 尝试仅指定控制器设置来部署空白的系统定义(System Definition)。
  • 确保在系统定义中指定了正确的IP地址和控制器系统。
  • 确保网络电缆已正确连接到每个系统,或已正确建立无线网络连接。
  • 如果可能,尝试在主机PC和RT终端之间用以太网连接直连。
  • 尝试使用ping命令访问相关网络设备,以验证设备是否仍处于连接并通信状态。
    • 应尽量减少响应时间,以确保VeriStand有足够的时间来部署必需的依赖项,如自定义设备(Custom Devices)。
  • 关闭主机上安装的所有防火墙和杀毒软件,确保没有端口被屏蔽。
  • 确保两个设备位于同一子网上,并且具有相同的子网掩码。有关配置NI网络设备的更多信息,请参见NI MAX中连接到RT终端时出现“不一致的IP设置”
  • 检查过多的本地网络流量是否降低了您的网络通信速度,并导致传输时间超出预期。


如果使用RT控制器VI:

  • 确保连接到VI的MAC地址准确无误,并且格式正确。确保您的字符串控件或常量ID以十六进制格式显示数据,比如:0080 2F0A 14FF。如果您的字符串控件不是十六进制格式,请右键单击它并选择十六进制显示(Hex Display)


如果在Open Suse 11.1上使用带有LabVIEW for Linux的“FTP传送文件.vi”“等待TCP侦听器.vi”

  • 配置FTP传送文件.vi(FTP Put File.vi)以使用被动模式进行FTP传输。


使用数据包嗅探进行故障排除:

如果上述步骤无效,请使用数据包嗅探程序查看数据是否通过网络发送。比如第三方工具Wireshark可以帮助您查看数据是否到达。如果没有数据到达且您看到此错误,则发送方设备或网络出现问题。如果数据到达Wireshark,且您仍然看到此错误,那么很可能是您遇到防火墙问题或TCP函数使用出错。 Wireshark官网提供Wireshark下载,同时您可以将Capture Filters与Wireshark一起使用,限制数据包只和某一个特定IP地址传输。

此外,如果数据包成功发送到网络,但终端设备没有响应,则终端设备的网络适配器可能存在问题。

相关信息

错误56是由LabVIEW代码在用户定义的时间限制内未收到网络响应导致的。此错误是一般的超时错误,可能是许多不同因素的结果。错误56通常是错误66 - LabVIEW:终端结束了网络连接(The network connection was closed by the peer)导致的这将使得VI一直等待响应,直到在服务器达到超时限制并关闭连接。