You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu服务器用pyads连接TwinCAT 3 Beckhoff PLC被拒绝求助

Ubuntu下pyads连接TwinCAT 3 PLC失败问题排查与解决

针对你遇到的Windows能正常连接、Ubuntu服务器连接失败,且添加路由被拒、报错connection closed by remote的问题,给你几个针对性的排查和解决方向:

  • 检查AMS NetID的有效性
    Linux下pyads的本地AMS NetID需要和系统网卡绑定正确。你代码里的SENDER_AMS = '192.168.1.180.1.1',最后两段的设备编号(.1.1)可能和Ubuntu系统实际的ADS设备编号不匹配。先执行pyads.get_local_address()获取系统当前有效的AMS NetID,用这个值替换SENDER_AMS再试。另外,执行pyads.open_port()时可以指定自定义端口,比如pyads.open_port(48899),避免端口被占用。

  • 确认PLC路由的权限与配置
    手动在PLC路由管理器添加路由时,右键选"Routes"->"Properties",检查是否允许远程添加路由,以及你的Administrator账号是否有路由配置权限。添加时要填对:远程AMS NetID(Ubuntu的)、远程IP、PLC自身的AMS NetID,还要勾选"Enable route"。如果PLC已经存在对应路由,重复添加会被拒绝,这时候直接跳过添加步骤,用已有路由连接即可。

  • 修正pyads添加路由的参数
    代码里的HOSTNAME用的是Ubuntu主机名Grid-stabilizer,换成Ubuntu的静态IP192.168.1.180试试,避免主机名解析失败。另外,pyads.add_route_to_plc的第二个参数是远程主机名/IP,直接填IP更可靠。

  • 安装底层依赖并检查系统配置
    确保Ubuntu装了pyads的底层依赖:sudo apt install libads-dev。同时检查/etc/hosts文件,添加PLC的IP和主机名映射(比如192.168.1.100 plc-tc3),避免解析问题。

  • 优化连接代码逻辑
    先尝试用已有的路由直接连接,失败再尝试添加路由,同时加异常捕获定位问题:

    import pyads
    
    SENDER_AMS = '192.168.1.180.1.1'
    PLC_AMS = '192.168.1.100.1.1'
    PLC_IP = '192.168.1.100'
    PLC_USERNAME = 'Administrator'
    PLC_PASSWORD = '1'
    ROUTE_NAME = 'GID_TEST_ROUTE'
    
    try:
        pyads.open_port()
        pyads.set_local_address(SENDER_AMS)
    
        # 先尝试直接用已有路由连接
        plc = pyads.Connection(PLC_AMS, pyads.PORT_TC3PLC1)
        plc.open()
        state = plc.read_state()
        print(f"PLC连接成功,状态: {state}")
        plc.close()
    except Exception as e:
        print(f"直接连接失败,尝试添加路由: {str(e)}")
        try:
            # 替换HOSTNAME为IP,避免解析问题
            pyads.add_route_to_plc(SENDER_AMS, PLC_IP, PLC_IP, PLC_USERNAME, PLC_PASSWORD, route_name=ROUTE_NAME)
            plc = pyads.Connection(PLC_AMS, pyads.PORT_TC3PLC1)
            plc.open()
            state = plc.read_state()
            print(f"添加路由后连接成功,状态: {state}")
            plc.close()
        except Exception as add_err:
            print(f"添加路由并连接失败: {str(add_err)}")
    finally:
        pyads.close_port()
    
  • 检查PLC的ADS端口与远程权限
    进入TwinCAT工程的"PLC Settings"->"ADS",确认"Allow remote clients"已勾选,默认ADS端口48898是否正常开启。同时确保PLC和Ubuntu在同一子网,没有VLAN或其他网络隔离限制。

内容的提问来源于stack exchange,提问作者R Coppens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:10:32