首页 > 全部分类 > 技术问答 > 帖子内容

环境:倍福上位机 IPC 跑 TwinCAT3,通过 ADS 通信读基恩士 SR-2000 的数据。 情况:开机前 1 小时好好的,扫码、传数都正常。只要一过中午吃饭时间,回来必断。检查了上位机的防火

联系人:15610538308038

电话/手机:联系客服

发布时间:2026-04-01 09:34

浏览:10次

环境:倍福上位机 IPC 跑 TwinCAT3,通过 ADS 通信读基恩士 SR-2000 的数据。
情况:开机前 1 小时好好的,扫码、传数都正常。只要一过中午吃饭时间,回来必断。检查了上位机的防火墙、省电模式全关了。扫码枪那边也设了长连接。奇怪的是,ping 扫码枪 IP 是通的,但 ADS 通道就是显示丢失。必须手动在 TwinCAT 里重新激活配置(Activate Configuration)才行。这到底是软件的 Bug 还是网络协议冲突?”
明扬工控技术客服2026-04-01 09:38:20
答复内容:你这个现象其实很典型,而且关键词很明显:

ping 一直通

ADS 通道丢失

必须 Activate Configuration 才恢复

长时间运行后发生(午休回来)

这类问题在 TwinCAT3 + IPC + 第三方设备(扫码枪、视觉、PLC等) 的项目里出现过很多次。
基本可以先给你一个结论方向:

这通常不是网络物理问题,也不是防火墙,而是 ADS 会话(Session)或 TwinCAT Runtime 状态被断开了。

也就是说:

TCP/IP 网络还在
但 ADS Router 的连接状态丢了


下面我把最常见的几种原因按现场概率给你讲清楚。

一、先说最可能的原因:ADS Router 会话超时

TwinCAT 的 ADS 通信其实是通过:

ADS Router


管理所有通信连接。

ADS 的底层是:

TCP 48898


但它不是普通 TCP 连接,而是带会话状态的通信。

如果长时间没有数据交互,某些设备(尤其是第三方设备)会主动断开 ADS 会话。

典型情况:

长时间无通信

对方关闭 socket

ADS Router 还认为连接存在

通信异常


这时就会出现:

ping 正常
ADS 通道丢失


而 Activate Configuration 的本质其实是:

重启 ADS Router
重新建立通信


所以马上恢复。

二、为什么偏偏“中午吃饭回来就断”

这个细节很关键。

通常说明:

长时间没有扫码


于是系统进入一种状态:

ADS Idle


可能触发:

SR-2000 自动关闭连接

IPC TCP keepalive 未发送

网络交换机老化清表

ADS Router 会话未更新

所以:

空闲一段时间 → ADS会话断

三、SR-2000 本身其实不是 ADS 设备

这里有个非常关键的点:

基恩士 SR-2000 本身不支持 ADS。

它通常支持:

TCP Socket

EtherNet/IP

Profinet

Serial

所以你现在的结构很可能是:

SR2000
↓ TCP
IPC程序

TwinCAT ADS

PLC逻辑


也就是说:

SR2000 → IPC 是普通 TCP

IPC → TwinCAT 是 ADS

因此问题很可能在:

IPC应用层 socket


而不是 ADS 本身。

当 SR2000 关闭连接时:

IPC socket断

ADS变量更新停止

TwinCAT认为通道丢失

四、TwinCAT Runtime 也可能进入 Idle 状态

有些 IPC 系统在长时间空闲时会触发:

TwinCAT task idle


尤其是:

Task 周期较慢

ADS 变量没有更新

上位机程序停止轮询

这时 ADS Router 的连接表可能被清理。

五、一个非常常见的 TwinCAT 坑:AMS NetID 连接刷新

ADS 通信依赖:

AMS NetID


如果设备之间的连接表过期,会出现:

Route still exists
but session invalid


表现就是:

ADS device not reachable


但 ping 正常。

重新 Activate Configuration 就相当于:

刷新 AMS Route

六、你这个情况还有一个高概率原因:IPC 网卡省电

虽然你说关了省电,但 Windows 有 三层省电:

1️⃣ Windows 电源策略
2️⃣ 网卡驱动省电
3️⃣ BIOS 的 PCIe ASPM

很多人只关了第一层。

当系统空闲一段时间:

NIC power save


网络接口会进入低功耗状态。

恢复后:

TCP session 已失效

七、交换机老化表项(MAC Aging)

工业交换机通常有:

MAC aging time


默认可能是:

300s
600s


如果端口长时间没有数据,交换机会删除 MAC 表。

重新通信时:

ARP / MAC 重新学习


部分设备在这个过程中会掉连接。

八、为什么 ADS 不自动恢复

ADS 有一个特点:

很多客户端不会自动重新连接。

尤其是:

.NET ADS

C++ ADS

LabVIEW ADS

如果 socket 断开:

客户端不会自动 reconnect


所以 TwinCAT 变量会一直保持:

invalid


直到重新初始化。

九、最有效的排查方法

建议你做几个简单测试。

测试1:午休时持续 ping

在 IPC 上执行:

ping SR2000 -t


看看中午是否有丢包。

如果 ping 完全稳定,说明:

网络层没问题

测试2:抓 TCP 连接

用:

netstat -ano


看 SR2000 的 TCP 连接是否存在。

如果午休后连接消失:

SR2000主动断开

测试3:抓 ADS Router 状态

TwinCAT 有:

TcAmsSrv


服务。

可以看日志:

C:\TwinCAT\3.1\Boot\Logs


看看是否有:

AMS connection closed

十、最推荐的解决方案

现场一般会这样解决。

方案1:增加心跳通信(最有效)

每隔:

1~5秒


发送一次数据。

例如:

IPC → SR2000


发送:

PING


或者读取一个变量。

这样:

TCP session 不会超时

方案2:程序自动重连

在 IPC 程序里加:

if socket disconnected
reconnect


不要依赖 TwinCAT。

方案3:调整 SR2000 通信参数

SR2000 里有:

connection timeout


把它改大。

方案4:关闭网卡所有节能

在网卡属性里关闭:

Energy Efficient Ethernet
Green Ethernet
Power Saving

方案5:TwinCAT Watchdog

让 PLC 周期性访问 IPC。

保持 ADS 活跃。

十一、我根据经验给你一个概率排序

你这个问题最可能是:

1️⃣ SR2000 TCP 会话超时关闭
2️⃣ IPC socket 没有自动重连
3️⃣ ADS Router session 失效
4️⃣ 网卡节能导致 TCP reset
5️⃣ 交换机 MAC aging

十二、为什么 Activate Configuration 一定能恢复

因为这个操作实际上做了三件事:

停止TwinCAT Runtime

重启 ADS Router

重新建立 AMS Route

重新打开 socket


所以连接恢复。

十三、我强烈建议你做一件事

在 IPC 程序里做一个:

heartbeat


比如:

每3秒读一次SR2000状态


很多视觉和扫码系统都是这么做的。
对不起,请登录后再发表评论!

触屏端
扫一扫手机也能发信息
明扬工控商城-工控网-工控自动化真品,一站式专业服务!