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

TwinCAT 3 Modbus TCP通信报ADS错误6的问题求助

TwinCAT 3 Modbus TCP 报错6(ADS目标端口未找到)及Port_851警告解决方法

问题根源

报错6(ADS目标端口未找到)和"设备上不存在应用Port_851"的警告是关联的:TwinCAT的Modbus TCP功能块依赖本地ADS端口映射,Port_851是Modbus组件默认的ADS通信端口。你未连接PLC仅本地运行时,TwinCAT Runtime没有自动创建该端口的应用实例,导致功能块无法通过ADS调用Modbus服务。

解决步骤

1. 配置本地ADS端口

  • 打开TwinCAT XAE,进入IO > Devices,右键你的本地Runtime设备(笔记本电脑对应的TwinCAT设备),选择Properties
  • 切换到ADS Ports选项卡,点击Add:
    • 端口号填851,名称设为ModbusTCP,类型选Standard,保存配置

2. 添加并配置Modbus设备

  • 在IO > Devices下右键添加新设备,根据你的需求选择Generic > Modbus TCP Client(你的代码是客户端读操作)或Modbus TCP Server
  • 新添加的Modbus设备会自动关联到Port_851,若未自动关联,可在设备属性中手动指定ADS端口为851

3. 修正代码逻辑

你的代码存在两个关键问题:

  • 连续调用MBReadCoils且立刻置bExecute:=FALSE,功能块无执行时间
  • tTimeout参数未赋值,必须指定超时时间

修正后的代码示例:

VAR
    // Modbus TCP Read Coils
    MBReadCoils : FB_MBReadCoils;
    nReadValue : BYTE;
    bReadTrigger : BOOL;
    bTrigEdge : BOOL;
END_VAR

// 用上升沿触发单次读写操作
bTrigEdge := R_TRIG(CLK := bReadTrigger).Q;

MBReadCoils(
            sIPAddr:= 'localhost', 
            nTCPPort:= 502, 
            nUnitID:= 16#FF, 
            nQuantity:= 1, 
            nMBAddr:= 1, 
            cbLength:= SIZEOF(nReadValue), 
            pDestAddr:= ADR(nReadValue), 
            bExecute:= bTrigEdge, 
            tTimeout:= T#5S, // 指定5秒超时
            bBusy=> , 
            bError=> , 
            nErrId=> , 
            cbRead=> );

4. 确保本地有Modbus TCP服务器(客户端场景)

如果你测试的是客户端读操作,必须在本地启动一个Modbus TCP服务器:

  • 可以使用第三方工具(如Modbus Poll)
  • 也可以在TwinCAT中添加Modbus TCP Server设备并配置对应的线圈地址

5. 重新下载配置

右键本地Runtime设备选择Download,确保所有配置生效,此时Port_851的警告应该不再出现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:32:42