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
相关产品推荐
相关产品推荐

