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

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

11阅读 1 回复 2026-04-01 09:34发布
关注Ta

15610538308038普通会员楼主

电话/手机:联系客服

环境:倍福上位机 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状态


    很多视觉和扫码系统都是这么做的。