电话/手机:联系客服
环境:倍福上位机 IPC 跑 TwinCAT3,通过 ADS 通信读基恩士 SR-2000 的数据。
情况:开机前 1 小时好好的,扫码、传数都正常。只要一过中午吃饭时间,回来必断。检查了上位机的防火墙、省电模式全关了。扫码枪那边也设了长连接。奇怪的是,ping 扫码枪 IP 是通的,但 ADS 通道就是显示丢失。必须手动在 TwinCAT 里重新激活配置(Activate Configuration)才行。这到底是软件的 Bug 还是网络协议冲突?”
优质评论内容
你这个现象其实很典型,而且关键词很明显:
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状态
很多视觉和扫码系统都是这么做的。