这种情况经常发生在 ADS Client 与 Server 进行通信一段时间后,在 Client 侧通过 TwinCAT 扫描 Server 时出现无法找到 Server 或者无法添加路由的情况,此时有可能已存在的 ADS 连接依然可以正常通讯, 主要原因是由于Server 端对 Client 端发送过来的 UDP 报文或者 Add Route 报文不在响应造成。
Server 在之前的运行过程中曾经有人连接过,并进行过添加路由操作,而添加时 Client 侧的 ADS 通信必要(Host Name、 IP、 NetID) 信息和 Server 端已备案的信息产生冲突: 如之前通过 IP 地址添加的路由, 而现在改为 host Name 添加路由;直接通过 Host Name 添加路由;添加路由的 IP 地址、 NetID、 HostName 等信息不同但是在已建立通信的连接中存在等情况。这会导致 Ads Router 出现处理异常,严重时会导致以后再也无法建立连接,需要重启控制器才可以解决问题。 解决办法:尝试删除 Router 表中重复的,不需要的路由信息,以 Host Name 添加的路由等,并重新激活或重启控制器。
使用开源的 ADS Client 代码进行开发:这部分代码只实现了 ADS 协议解析和分装,只是个 demo 程序,没有自动添加路由的功能, 没有 ADS Router 的功能, 也没有网络可靠性方面的代码,因此,客户在使用该代码时,请合理增加 Socket 在通讯方面参数优化的部分,以提高代码稳定性,这也对开发人员提出了挑战,而且在出现通讯故障时,也是比较难于诊断的,因此除非你有足够的能力来掌控这些代码,否则还是建议选择 TwinCAT 提供的标准ADS DLL 进行通讯。 出现问题时,请选择 Wireshark 进行网络抓包,并配合代码逻辑来具体问题具体分析。
2025.7.7 汪继彬 编辑